diff --git a/.config/home-manager/flake.nix b/.config/home-manager/flake.nix index 77791dd..1904aad 100644 --- a/.config/home-manager/flake.nix +++ b/.config/home-manager/flake.nix @@ -13,9 +13,28 @@ url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; + + dgop = { + url = "github:AvengeMedia/dgop"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + dms-cli = { + url = "github:AvengeMedia/danklinux"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + dankMaterialShell = { + url = "github:AvengeMedia/DankMaterialShell"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.dgop.follows = "dgop"; + inputs.dms-cli.follows = "dms-cli"; + }; + niri = { + url = "github:sodiboo/niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { nixpkgs, home-manager, stylix, ... }: + outputs = { nixpkgs, home-manager, stylix, dgop, dms-cli, dankMaterialShell, niri, ... }: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; @@ -27,9 +46,13 @@ # the path to your home.nix. modules = [ stylix.homeModules.stylix + dankMaterialShell.homeModules.dankMaterialShell.default + dankMaterialShell.homeModules.dankMaterialShell.niri + niri.homeModules.niri ./home.nix ]; + # Optionally use extraSpecialArgs # to pass through arguments to home.nix }; diff --git a/.config/home-manager/home.nix b/.config/home-manager/home.nix index bd2fdd3..375fe09 100644 --- a/.config/home-manager/home.nix +++ b/.config/home-manager/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, inputs, ... }: { imports = [ @@ -14,9 +14,11 @@ home.username = "nicole"; home.homeDirectory = "/home/nicole"; - home.stateVersion = "25.05"; # Please read the comment before changing. - home.packages = [ + home.stateVersion = "25.11"; # Please read the comment before changing. + home.packages = with pkgs; [ + #inputs.quickshell.packages.${pkgs.system}.default ]; programs.home-manager.enable = true; + programs.dankMaterialShell.enable = true; } diff --git a/.config/home-manager/theme.nix b/.config/home-manager/theme.nix index d72d330..f29abc3 100644 --- a/.config/home-manager/theme.nix +++ b/.config/home-manager/theme.nix @@ -5,6 +5,7 @@ stylix = { enable = true; base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-moon.yaml"; + #base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml"; polarity = "dark"; fonts = { diff --git a/.config/hypr/hypridle.conf b/.config/hypr/hypridle.conf index cbd2c7d..20d264f 100644 --- a/.config/hypr/hypridle.conf +++ b/.config/hypr/hypridle.conf @@ -9,9 +9,9 @@ listener { } listener { - timeout = 90 # 5.5min + timeout = 120 # 5.5min #on-timeout = hyprctl dispatch dpms off # command to run when timeout has passed #on-resume = hyprctl dispatch dpms on # command to run when activity is detected after timeout has fired. - on-timeout = hyprctl dispatch dpms off && pkill hyprpanel # command to run when timeout has passed - on-resume = hyprctl dispatch dpms on && sleep 5 && hyprpanel # command to run when activity is detected after timeout has fired. + on-timeout = hyprctl dispatch dpms off && hyprctl output remove headless && pkill hyprpanel# command to run when timeout has passed + on-resume = hyprctl dispatch dpms on && sleep 5 && hyprctl output add headless headless && hyprctl keyword monitor headless,1920x1280,760x1440,1 && hyprpanel # command to run when activity is detected after timeout has fired. } diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index a1a6824..4aab70d 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -56,7 +56,11 @@ exec-once = flatpak run app.zen_browser.zen exec-once = /home/nicole/Msty/msty.sh exec-once = nix-shell -p appimage-run --run "appimage-run ~/Msty/Msty.AppImage" exec-once = hyprctl output add headless headless && hyprctl keyword monitor headless,1920x1280,760x1440,1 #960x1440 if 1.25 -exec-once = wayvnc 0.0.0.0 5905 +exec-once = sunshine +#exec-once = wayvnc 0.0.0.0 5905 +exec-once = telegram-desktop +exec-once = steam +exec-once = vesktop exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # for GTK4 apps #env = QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps @@ -406,6 +410,7 @@ windowrule = workspace 2, class:app.zen_browser.zen$ windowrule = workspace 2, class:^brave-browser$ windowrule = workspace 3, class:^org.telegram.desktop$ windowrule = workspace 3, class:^discord$ +windowrule = workspace 3, class:^vesktop$ windowrule = workspace 3, class:^Element$ windowrule = workspace 4, class:^Mailspring$ windowrule = workspace 5, class:^code$ diff --git a/.config/hypr/hyprpaper.conf b/.config/hypr/hyprpaper.conf index e7bcff1..d5f6548 100644 --- a/.config/hypr/hyprpaper.conf +++ b/.config/hypr/hyprpaper.conf @@ -1,7 +1,7 @@ -preload = /home/nicole/Pictures/Wallpapers/wp31.png +preload = /home/nicole/Pictures/Wallpapers/Shooting_Star.png #set the default wallpaper(s) seen on initial workspace(s) --depending on the number of monitors used -wallpaper = ,/home/nicole/Pictures/Wallpapers/wp31.png +wallpaper = ,/home/nicole/Pictures/Wallpapers/Shooting_Star.png #enable splash text rendering over the wallpaper splash = false diff --git a/.config/hyprpanel/config.json b/.config/hyprpanel/config.json index 88ce3d9..71c8be1 100644 --- a/.config/hyprpanel/config.json +++ b/.config/hyprpanel/config.json @@ -410,7 +410,7 @@ "theme.osd.orientation": "horizontal", "bar.customModules.microphone.label": false, "bar.layouts": { - "*": { + "0": { "left": [ "dashboard", "workspaces", @@ -435,6 +435,11 @@ "clock", "notifications" ] + }, + "1": { + "left": [], + "middle": [], + "right": [] } }, "wallpaper.pywal": false, @@ -522,5 +527,6 @@ "theme.osd.muted_zero": true, "theme.osd.enableShadow": true, "theme.matugen_settings.mode": "dark", - "theme.matugen_settings.scheme_type": "tonal-spot" + "theme.matugen_settings.scheme_type": "tonal-spot", + "bar.customModules.hyprsunset.temperature": "4000k" } \ No newline at end of file diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf index ec65b10..1661401 120000 --- a/.config/kitty/kitty.conf +++ b/.config/kitty/kitty.conf @@ -1 +1 @@ -/nix/store/5vhx5x4ym618sn8s2liqvn0j6bm5a2y8-home-manager-files/.config/kitty/kitty.conf \ No newline at end of file +/nix/store/s5ay1yl5pcyjrgycsffjzhzlhnpv22yp-home-manager-files/.config/kitty/kitty.conf \ No newline at end of file diff --git a/.config/niri/config.kdl b/.config/niri/config.kdl new file mode 100644 index 0000000..caa126a --- /dev/null +++ b/.config/niri/config.kdl @@ -0,0 +1,537 @@ +// This config is in the KDL format: https://kdl.dev +// "/-" comments out the following node. +// Check the wiki for a full description of the configuration: +// https://github.com/YaLTeR/niri/wiki/Configuration:-Introduction +config-notification { + disable-failed +} +// Outputs from existing configuration +output "DP-1" { + // Uncomment this line to disable this output. + // off + + // Resolution and, optionally, refresh rate of the output. + // The format is "x" or "x@". + // 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 "3440x1440@160" + + // You can use integer or fractional scale, for example use 1.5 for 150% scale. + scale 1 + + // 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=0 y=0 +} + + +gestures { + hot-corners { + off + } +} + +// Input device configuration. +// Find the full list of options on the wiki: +// https://github.com/YaLTeR/niri/wiki/Configuration:-Input +input { + keyboard { + xkb { + } + numlock + } + touchpad { + } + mouse { + } + trackpoint { + } + focus-follows-mouse +} +// 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 "/-"! + +// 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 5 + background-color "transparent" + // 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 "never" + // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. + preset-column-widths { + // Proportion sets the width as a fraction of the output width, taking gaps into account. + // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. + // The default preset widths are 1/3, 1/2 and 2/3 of the output. + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + // Fixed sets the width in logical pixels exactly. + // fixed 1920 + } + // 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`. + border { + off + width 4 + active-color "#707070" // Neutral gray + inactive-color "#d0d0d0" // Light gray + urgent-color "#cc4444" // Softer red + } + focus-ring { + width 2 + active-color "#808080" // Medium gray + inactive-color "#505050" // Dark gray + } + shadow { + softness 30 + spread 5 + offset x=0 y=5 + color "#0007" + } + struts { + } +} +layer-rule { + match namespace="^quickshell$" + place-within-backdrop true +} +overview { + workspace-shadow { + off + } +} +// Add lines like this to spawn processes at startup. +// Note that running niri as a session supports xdg-desktop-autostart, +// which may be more convenient to use. +// See the binds section below for more spawn examples. +// This line starts waybar, a commonly used bar for Wayland compositors. +spawn-at-startup "bash" "-c" "wl-paste --watch cliphist store &" +spawn-at-startup "dms" "run" +spawn-at-startup "xwayland-satellite" + +spawn-at-startup "telegram-desktop" +spawn-at-startup "vesktop" +spawn-at-startup "steam" +spawn-at-startup "geary" +spawn-at-startup "kitty" +spawn-at-startup "app.zen_browser.zen" +spawn-at-startup "nextcloud" +spawn-at-startup "element-desktop" + +xwayland-satellite { + path "/run/current-system/sw/bin/xwayland-satellite" +} + + +environment { + XDG_CURRENT_DESKTOP "niri" + QT_QPA_PLATFORM "wayland" + ELECTRON_OZONE_PLATFORM_HINT "auto" + QT_QPA_PLATFORMTHEME "gtk3" + QT_QPA_PLATFORMTHEME_QT6 "gtk3" + TERMINAL "kitty" +} +hotkey-overlay { + skip-at-startup +} +prefer-no-csd +screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" +animations { + workspace-switch { + spring damping-ratio=0.80 stiffness=523 epsilon=0.0001 + } + window-open { + duration-ms 150 + curve "ease-out-expo" + } + window-close { + duration-ms 150 + curve "ease-out-quad" + } + horizontal-view-movement { + spring damping-ratio=0.85 stiffness=423 epsilon=0.0001 + } + window-movement { + spring damping-ratio=0.75 stiffness=323 epsilon=0.0001 + } + window-resize { + spring damping-ratio=0.85 stiffness=423 epsilon=0.0001 + } + config-notification-open-close { + spring damping-ratio=0.65 stiffness=923 epsilon=0.001 + } + screenshot-ui-open { + duration-ms 200 + curve "ease-out-quad" + } + overview-open-close { + spring damping-ratio=0.85 stiffness=800 epsilon=0.0001 + } +} +// Window rules let you adjust behavior for individual windows. +// Find more information on the wiki: +// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules +// Work around WezTerm's initial configure bug +// by setting an empty default-column-width. +window-rule { + open-maximized true +} +window-rule { + match app-id="kitty" + open-on-workspace "terminal" + open-maximized false + default-column-width { proportion 0.33333; } +} +window-rule { + match app-id="app.zen_browser.zen" + open-on-workspace "browser" +} +window-rule { + match app-id=r#"^org\.telegram\.desktop$"# + exclude app-id=r#"^org\.telegram\.desktop$"# title="^Media viewer$" + match app-id="vesktop" + match app-id="Element" + open-on-workspace "social" + open-maximized false + default-column-width { proportion 0.33333; } + +} +window-rule { + match app-id="geary" + open-on-workspace "mail" +} +window-rule { + match app-id="code" + open-on-workspace "code" +} +window-rule { + match app-id="steam" + match app-id="lutris" + open-on-workspace "games" +} + +window-rule { + match app-id="fsearch" + match app-id="org.gnome.NautilusPreviewer" + match app-id="zernity" + match app-id="org.qbittorrent.qBittorrent" + match app-id="org.gnome.Calculator" + open-maximized false + open-floating true +} +window-rule { + match app-id=r#"^org\.telegram\.desktop$"# title="^Media viewer$" + open-fullscreen false + open-floating true +} + + + +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 {} +} +window-rule { + match app-id=r#"^org\.gnome\."# + draw-border-with-background false + geometry-corner-radius 12 + clip-to-geometry true +} +window-rule { + match app-id=r#"^gnome-control-center$"# + match app-id=r#"^pavucontrol$"# + match app-id=r#"^nm-connection-editor$"# + default-column-width { proportion 0.5; } + open-floating false +} +window-rule { + match app-id=r#"^gnome-calculator$"# + match app-id=r#"^galculator$"# + match app-id=r#"^blueman-manager$"# + match app-id=r#"^org\.gnome\.Nautilus$"# + match app-id=r#"^xdg-desktop-portal$"# + open-floating true +} +window-rule { + match app-id=r#"^org\.wezfurlong\.wezterm$"# + match app-id="Alacritty" + match app-id="zen" + match app-id="com.mitchellh.ghostty" + match app-id="kitty" + draw-border-with-background false +} +window-rule { + match is-active=false + opacity 0.9 +} +window-rule { + match app-id=r#"firefox$"# title="^Picture-in-Picture$" + match app-id="zoom" + open-floating true +} +window-rule { + geometry-corner-radius 12 + clip-to-geometry true +} + +workspace "terminal" +workspace "browser" +workspace "social" +workspace "mail" +workspace "code" +workspace "games" +workspace "generic1" +workspace "generic2" +workspace "music" +workspace "windows" + +binds { + // === System & Overview === + Mod+Space { spawn "niri" "msg" "action" "toggle-overview"; } + Mod+Tab repeat=false { toggle-overview; } + Mod+Shift+Slash { show-hotkey-overlay; } + + // === Application Launchers === + Mod+Return hotkey-overlay-title="Open Terminal" { spawn "kitty"; } + Mod+E { spawn "nautilus"; } + Alt+Space { spawn "fsearch"; } + Mod+D hotkey-overlay-title="Application Launcher" { + spawn "dms" "ipc" "call" "spotlight" "toggle"; + } + Mod+V hotkey-overlay-title="Clipboard Manager" { + spawn "dms" "ipc" "call" "clipboard" "toggle"; + } + Mod+M hotkey-overlay-title="Task Manager" { + spawn "dms" "ipc" "call" "processlist" "toggle"; + } + Mod+Comma hotkey-overlay-title="Settings" { + spawn "dms" "ipc" "call" "settings" "toggle"; + } + Mod+N hotkey-overlay-title="Notification Center" { spawn "dms" "ipc" "call" "notifications" "toggle"; } + Mod+Shift+N hotkey-overlay-title="Notepad" { spawn "dms" "ipc" "call" "notepad" "toggle"; } + + // === Security === + Mod+L hotkey-overlay-title="Lock Screen" { + spawn "dms" "ipc" "call" "lock" "lock"; + } + Mod+Shift+E { quit; } + Ctrl+Alt+Delete hotkey-overlay-title="Task Manager" { + spawn "dms" "ipc" "call" "processlist" "toggle"; + } + + // === Audio Controls === + XF86AudioRaiseVolume allow-when-locked=true { + spawn "dms" "ipc" "call" "audio" "increment" "3"; + } + XF86AudioLowerVolume allow-when-locked=true { + spawn "dms" "ipc" "call" "audio" "decrement" "3"; + } + XF86AudioMute allow-when-locked=true { + spawn "dms" "ipc" "call" "audio" "mute"; + } + XF86AudioMicMute allow-when-locked=true { + spawn "dms" "ipc" "call" "audio" "micmute"; + } + + XF86KbdBrightnessUp allow-when-locked=true { + spawn "kbdbrite.sh" "up"; + } + XF86KbdBrightnessDown allow-when-locked=true { + spawn "kbdbrite.sh" "down"; + } + // === Brightness Controls === + XF86MonBrightnessUp allow-when-locked=true { + spawn "dms" "ipc" "call" "brightness" "increment" "5" ""; + } + XF86MonBrightnessDown allow-when-locked=true { + spawn "dms" "ipc" "call" "brightness" "decrement" "5" ""; + } + // === Calculator === + XF86Calculator allow-when-locked=false { + spawn "gnome-calculator"; + } + + // === Window Management === + Mod+Shift+Q repeat=false { close-window; } + Mod+F { maximize-column; } + Mod+Shift+F { fullscreen-window; } + Mod+Shift+T { toggle-window-floating; } + Mod+Shift+V { switch-focus-between-floating-and-tiling; } + Mod+W { toggle-column-tabbed-display; } + + // === Focus Navigation === + 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; } + + // === Window Movement === + Mod+Shift+Left { move-column-left; } + Mod+Shift+Down { move-window-down; } + Mod+Shift+Up { move-window-up; } + Mod+Shift+Right { move-column-right; } + Mod+Shift+H { move-column-left; } + Mod+Shift+J { move-window-down; } + Mod+Shift+K { move-window-up; } + Mod+Shift+L { move-column-right; } + + // === Column Navigation === + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + // === Monitor Navigation === + Mod+Ctrl+Left { focus-monitor-left; } + //Mod+Ctrl+Down { focus-monitor-down; } + //Mod+Ctrl+Up { focus-monitor-up; } + Mod+Ctrl+Right { focus-monitor-right; } + Mod+Ctrl+H { focus-monitor-left; } + Mod+Ctrl+J { focus-monitor-down; } + Mod+Ctrl+K { focus-monitor-up; } + Mod+Ctrl+L { focus-monitor-right; } + + // === Move to Monitor === + 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; } + + // === Workspace Navigation === + Mod+Page_Down { focus-workspace-down; } + Mod+Page_Up { focus-workspace-up; } + Mod+U { focus-workspace-down; } + Mod+I { focus-workspace-up; } + Mod+Ctrl+Down { move-column-to-workspace-down; } + Mod+Ctrl+Up { move-column-to-workspace-up; } + Mod+Ctrl+U { move-column-to-workspace-down; } + Mod+Ctrl+I { move-column-to-workspace-up; } + + // === Move Workspaces === + 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; } + + // === Mouse Wheel Navigation === + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Mod+WheelScrollUp cooldown-ms=150 { 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 { focus-column-right; } + Mod+WheelScrollLeft { focus-column-left; } + Mod+Ctrl+WheelScrollRight { move-column-right; } + Mod+Ctrl+WheelScrollLeft { move-column-left; } + + 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; } + + // === Numbered Workspaces === + Mod+1 { focus-workspace "terminal"; } + Mod+2 { focus-workspace "browser"; } + Mod+3 { focus-workspace "social"; } + Mod+4 { focus-workspace "mail"; } + Mod+5 { focus-workspace "code"; } + Mod+6 { focus-workspace "games"; } + Mod+7 { focus-workspace "generic1"; } + Mod+8 { focus-workspace "generic2"; } + Mod+9 { focus-workspace "music"; } + Mod+0 { focus-workspace "windows"; } + + // === Move to Numbered Workspaces === + 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; } + + // === Column Management === + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + Mod+Period { expel-window-from-column; } + + // === Sizing & Layout === + Mod+R { switch-preset-column-width; } + Mod+Shift+R { switch-preset-window-height; } + Mod+Ctrl+R { reset-window-height; } + Mod+Ctrl+F { expand-column-to-available-width; } + Mod+C { center-column; } + Mod+Ctrl+C { center-visible-columns; } + + // === Manual Sizing === + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + + // === Screenshots === + Mod+Shift+S { spawn-sh "grim -g \"$(slurp -d)\" - | wl-copy"; } + Shift+Print { spawn-sh "grim -g \"$(slurp -d)\" - | swappy -f -"; } + Print { screenshot-screen; } + //XF86Launch1 { screenshot; } + //Ctrl+XF86Launch1 { screenshot-screen; } + //Alt+XF86Launch1 { screenshot-window; } + //Print { screenshot; } + //Ctrl+Print { screenshot-screen; } + //Alt+Print { screenshot-window; } + // === System Controls === + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } + Mod+Shift+P { power-off-monitors; } +}