From 6feca365ff01e27d418b6c94f557192f1d89e364 Mon Sep 17 00:00:00 2001 From: Bun Date: Sun, 4 May 2025 22:54:21 -0400 Subject: [PATCH] Add Kanshi, Hyprland, remove Niri --- .../home/programs/gui/librewolf/default.nix | 1 - .../home/settings/xdg/defaults/default.nix | 1 + modules/home/wms/default.nix | 2 +- .../home/wms/hyprland/autostart/default.nix | 23 +++ modules/home/wms/hyprland/default.nix | 17 ++ modules/home/wms/hyprland/hotkeys/default.nix | 170 ++++++++++++++++++ modules/home/wms/hyprland/inputs/default.nix | 16 ++ modules/home/wms/hyprland/outputs/default.nix | 29 +++ modules/home/wms/hyprland/plugins/default.nix | 22 +++ modules/home/wms/hyprland/rules/default.nix | 37 ++++ modules/home/wms/hyprland/theme/default.nix | 51 ++++++ modules/home/wms/niri/autostart/default.nix | 19 -- modules/home/wms/niri/default.nix | 26 --- modules/home/wms/niri/hotkeys/default.nix | 164 ----------------- modules/home/wms/niri/inputs/default.nix | 23 --- modules/home/wms/niri/outputs/default.nix | 89 --------- modules/home/wms/niri/rules/default.nix | 62 ------- modules/home/wms/niri/theme/default.nix | 28 --- modules/home/wms/programs/default.nix | 1 + modules/home/wms/programs/kanshi/default.nix | 59 ++++++ modules/home/wms/sway/default.nix | 1 - modules/home/wms/sway/hotkeys/default.nix | 5 +- modules/home/wms/sway/outputs/default.nix | 25 --- modules/home/wms/sway/programs/default.nix | 4 - .../wms/sway/programs/prop-sway/default.nix | 13 -- modules/system/programs/desktops/default.nix | 3 +- 26 files changed, 430 insertions(+), 461 deletions(-) create mode 100644 modules/home/wms/hyprland/autostart/default.nix create mode 100644 modules/home/wms/hyprland/default.nix create mode 100644 modules/home/wms/hyprland/hotkeys/default.nix create mode 100644 modules/home/wms/hyprland/inputs/default.nix create mode 100644 modules/home/wms/hyprland/outputs/default.nix create mode 100644 modules/home/wms/hyprland/plugins/default.nix create mode 100644 modules/home/wms/hyprland/rules/default.nix create mode 100644 modules/home/wms/hyprland/theme/default.nix delete mode 100644 modules/home/wms/niri/autostart/default.nix delete mode 100644 modules/home/wms/niri/default.nix delete mode 100644 modules/home/wms/niri/hotkeys/default.nix delete mode 100644 modules/home/wms/niri/inputs/default.nix delete mode 100644 modules/home/wms/niri/outputs/default.nix delete mode 100644 modules/home/wms/niri/rules/default.nix delete mode 100644 modules/home/wms/niri/theme/default.nix create mode 100644 modules/home/wms/programs/kanshi/default.nix delete mode 100644 modules/home/wms/sway/programs/default.nix delete mode 100644 modules/home/wms/sway/programs/prop-sway/default.nix diff --git a/modules/home/programs/gui/librewolf/default.nix b/modules/home/programs/gui/librewolf/default.nix index 76a7463f..25480847 100644 --- a/modules/home/programs/gui/librewolf/default.nix +++ b/modules/home/programs/gui/librewolf/default.nix @@ -41,7 +41,6 @@ simple-tab-groups sponsorblock ublock-origin - vimium violentmonkey ]; commonSearch = { diff --git a/modules/home/settings/xdg/defaults/default.nix b/modules/home/settings/xdg/defaults/default.nix index 19869b7f..9d9094cb 100644 --- a/modules/home/settings/xdg/defaults/default.nix +++ b/modules/home/settings/xdg/defaults/default.nix @@ -6,6 +6,7 @@ "image/png" = [ "imv.desktop" ]; "image/jpeg" = [ "imv.desktop" ]; "image/jp2" = [ "imv.desktop" ]; + "image/gif" = [ "mpv.desktop" ]; "video/*" = [ "mpv.desktop" ]; }; } diff --git a/modules/home/wms/default.nix b/modules/home/wms/default.nix index a137fc57..339c3386 100644 --- a/modules/home/wms/default.nix +++ b/modules/home/wms/default.nix @@ -1,7 +1,7 @@ { ... }: { imports = [ - ./niri + ./hyprland ./programs ./sway ]; diff --git a/modules/home/wms/hyprland/autostart/default.nix b/modules/home/wms/hyprland/autostart/default.nix new file mode 100644 index 00000000..a41c551e --- /dev/null +++ b/modules/home/wms/hyprland/autostart/default.nix @@ -0,0 +1,23 @@ +{ pkgs, ... }: +{ + wayland.windowManager.hyprland.settings.exec-once = [ + "waybar" + + # Scratchpads + "foot -a btop -T Gotop btop" + "foot -a music -T Music ncmpcpp" + "foot -a sound -T Sound pulsemixer" + + # Deamons and tray + "wpaperd" + "wl-paste -t text --watch clipman store -P" + "wl-copy" + "mako" + "rot8" + "wlsunset -s 22:30 -S 07:30" + + # Foreground + "thunderbird" + "vesktop" + ]; +} diff --git a/modules/home/wms/hyprland/default.nix b/modules/home/wms/hyprland/default.nix new file mode 100644 index 00000000..b75d04fd --- /dev/null +++ b/modules/home/wms/hyprland/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, ... }: +{ + imports = [ + ./autostart + ./hotkeys + ./inputs + ./outputs + ./plugins + ./rules + ./theme + ]; + + wayland.windowManager.hyprland = { + enable = true; + plugins = with pkgs.hyprlandPlugins; [ hy3 ]; + }; +} diff --git a/modules/home/wms/hyprland/hotkeys/default.nix b/modules/home/wms/hyprland/hotkeys/default.nix new file mode 100644 index 00000000..99262f99 --- /dev/null +++ b/modules/home/wms/hyprland/hotkeys/default.nix @@ -0,0 +1,170 @@ +{ pkgs, config, ... }: +{ + wayland.windowManager.hyprland.settings = let + # Set default modifier and variables + primeMod = "Super"; + secMod = "Alt"; + resizeAmount = "55"; + in { + bind = [ + ## Launchers + + # Browser + ''${primeMod}, F1, exec, librewolf -p Main --name MainBrowser | notify-send "Main Browser"'' + ''${primeMod}, F2, exec, librewolf -p Alt --name AltBrowser | notify-send "Alternate Browser"'' + ''${primeMod}, F3, exec, librewolf -p Misc --name MiscBrowser | notify-send "Miscellaneous Browser"'' + + # Virtual machines + ''${primeMod}, F4, exec, virt-manager | notify-send "Virtual Machines"'' + ''${primeMod}, F5, exec, looking-glass-client | notify-send "Looking Glass"'' + + # Prime + key + "${primeMod}, s, exec, rofi -show run -p Command" + "${primeMod}, c, exec, clipman pick -t rofi" + "${primeMod}, x, exec, rofipower" + "${primeMod}, b, exec, pkill -USR1 waybar" + "${primeMod}, Return, exec, foot" + + # Prime + shift + key + "${primeMod} Shift, s, exec, rofi -show drun -modi drun -drun-display-format {name} -show-icons -disable-history" + "${primeMod} Shift, t, exec, pcmanfm" + "${primeMod} Shift, e, exec, bemoji -n -P 0" + "${primeMod} Shift, b, exec, rofi-bluetooth" + "${primeMod} Shift, Return, exec, foot ranger" + + # Prime + ctrl + key + "${primeMod} Ctrl, s, exec, rofiscratch" + ''${primeMod} Ctrl, c, exec, wlpicker && notify-send "Color copied to clipboard"'' + + ## Media + + # Volume + "${secMod}, j, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + "${secMod}, k, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" + "${secMod}, m, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + + # MPRIS + "${primeMod}, Backslash, exec, playerctl -p firefox play-pause" + "${primeMod} Shift, Backslash, exec, playerctl -p mpd play-pause" + "${secMod} Shift, h, exec, playerctl -p mpd previous" + "${secMod} Shift, j, exec, playerctl -p mpd volume 0.03-" + "${secMod} Shift, k, exec, playerctl -p mpd volume 0.03+" + "${secMod} Shift, l, exec, playerctl -p mpd next" + + ## Miscellaneous + + # Notifications + "${primeMod}, n, exec, makotoggle" + "${primeMod} Shift, n, exec, makoctl restore" + "${primeMod} Ctrl, n, exec, makoctl dismiss -a" + + # Screenshots + ''${secMod}, f, exec, XDG_SCREENSHOTS_DIR="$HOME/Pictures/Screenshots" SLURP_ARGS="-w 3 -c 3823C4 -B 00000066 -b 00000099" grimblast --freeze --notify copysave area'' + "${secMod} Shift, f, exec, grimblast --notify copysave output" + "${secMod} Ctrl, f, exec, grimblast --notify copysave active" + + # Screenshots + + # Display brightness + "${primeMod}, equal, exec, brightnessctl s 5%+" + "${primeMod}, minus, exec, brightnessctl s 5%-" + "${primeMod} Shift, equal, exec, brightnessctl s 1%+" + "${primeMod} Shift, minus, exec, brightnessctl s 1%-" + + # Keyboard brightness + "${primeMod} Alt, equal, exec, brightnessctl -d spi::kbd_backlight s 20%+" + "${primeMod} Alt, minus, exec, brightnessctl -d spi::kbd_backlight s 20%-" + + ## Window manager + "${primeMod}, q, killactive," + + # Switch to workspaces + "${primeMod}, grave, workspace, name:0" + "${primeMod}, 1, workspace, name:${config.ws.w1}" + "${primeMod}, 2, workspace, name:${config.ws.w2}" + "${primeMod}, 3, workspace, name:${config.ws.w3}" + "${primeMod}, 4, workspace, name:${config.ws.w4}" + "${primeMod}, 5, workspace, name:${config.ws.w5}" + "${primeMod}, 6, workspace, name:${config.ws.w6}" + "${primeMod}, 7, workspace, name:${config.ws.w7}" + "${primeMod}, 8, workspace, name:${config.ws.w8}" + "${primeMod}, 9, workspace, name:${config.ws.w9}" + + # Switch to alternate workspaces + "${secMod}, F1, workspace, name:${config.ws.w1a}" + "${secMod}, F2, workspace, name:${config.ws.w2a}" + "${secMod}, F3, workspace, name:${config.ws.w3a}" + "${secMod}, F4, workspace, name:${config.ws.w4a}" + "${secMod}, F5, workspace, name:${config.ws.w5a}" + "${secMod}, F6, workspace, name:${config.ws.w6a}" + "${secMod}, F7, workspace, name:${config.ws.w7a}" + "${secMod}, F8, workspace, name:${config.ws.w8a}" + "${secMod}, F9, workspace, name:${config.ws.w9a}" + + # Move window to and focus workspace + "${primeMod} Shift, grave, movetoworkspace, name:${config.ws.w0}" + "${primeMod} Shift, 1, movetoworkspace, name:${config.ws.w1}" + "${primeMod} Shift, 2, movetoworkspace, name:${config.ws.w2}" + "${primeMod} Shift, 3, movetoworkspace, name:${config.ws.w3}" + "${primeMod} Shift, 4, movetoworkspace, name:${config.ws.w4}" + "${primeMod} Shift, 5, movetoworkspace, name:${config.ws.w5}" + "${primeMod} Shift, 6, movetoworkspace, name:${config.ws.w6}" + "${primeMod} Shift, 7, movetoworkspace, name:${config.ws.w7}" + "${primeMod} Shift, 8, movetoworkspace, name:${config.ws.w8}" + "${primeMod} Shift, 9, movetoworkspace, name:${config.ws.w9}" + + # Move window to and focus alternate workspace + "${secMod} Shift, F1, movetoworkspace, name:${config.ws.w1a}" + "${secMod} Shift, F2, movetoworkspace, name:${config.ws.w2a}" + "${secMod} Shift, F3, movetoworkspace, name:${config.ws.w3a}" + "${secMod} Shift, F4, movetoworkspace, name:${config.ws.w4a}" + "${secMod} Shift, F5, movetoworkspace, name:${config.ws.w5a}" + "${secMod} Shift, F6, movetoworkspace, name:${config.ws.w6a}" + "${secMod} Shift, F7, movetoworkspace, name:${config.ws.w7a}" + "${secMod} Shift, F8, movetoworkspace, name:${config.ws.w8a}" + "${secMod} Shift, F9, movetoworkspace, name:${config.ws.w9a}" + + # Change focused window + "${primeMod}, h, hy3:movefocus, l" + "${primeMod}, j, hy3:movefocus, d" + "${primeMod}, k, hy3:movefocus, u" + "${primeMod}, l, hy3:movefocus, r" + + # Move focused window + "${primeMod} Shift, h, hy3:movewindow, l" + "${primeMod} Shift, j, hy3:movewindow, d" + "${primeMod} Shift, k, hy3:movewindow, u" + "${primeMod} Shift, l, hy3:movewindow, r" + + # Resize window + "${primeMod} ${secMod}, h, resizeactive, -${resizeAmount} 0" + "${primeMod} ${secMod}, j, resizeactive, 0 -${resizeAmount}" + "${primeMod} ${secMod}, k, resizeactive, 0 ${resizeAmount}" + "${primeMod} ${secMod}, l, resizeactive, ${resizeAmount} 0" + + # Floating + "${primeMod}, Space, hy3:togglefocuslayer" + "${primeMod} Shift, Space, togglefloating" + + # Change layout + "${primeMod}, f, fullscreen" + "${primeMod}, w, hy3:changegroup, opposite" + "${primeMod}, v, hy3:makegroup, v" + "${primeMod}, e, hy3:changegroup, toggletab" + + ## Scratchpads + "${primeMod} Shift, BackSpace, togglespecialworkspace, btop" + "${primeMod} Shift, m, togglespecialworkspace, music" + "${primeMod} Shift, v, togglespecialworkspace, sound" + ]; + + # Mouse + bindm = [ + "${primeMod}, mouse:272, movewindow" + "${primeMod}, mouse:273, resizewindow" + ]; + bindn = [ + ",mouse:272, hy3:focustab, mouse" + ]; + }; +} diff --git a/modules/home/wms/hyprland/inputs/default.nix b/modules/home/wms/hyprland/inputs/default.nix new file mode 100644 index 00000000..4906a560 --- /dev/null +++ b/modules/home/wms/hyprland/inputs/default.nix @@ -0,0 +1,16 @@ +{ config, ... }: +{ + wayland.windowManager.hyprland.settings = { + input = { + follow_mouse = 1; + accel_profile = "flat"; + scroll_factor = 0.7; + touchpad.natural_scroll = false; + }; + gestures.workspace_swipe = false; + device = { + name = "sinowealth-game-mouse"; + sensitivity = "-0.9"; + }; + }; +} diff --git a/modules/home/wms/hyprland/outputs/default.nix b/modules/home/wms/hyprland/outputs/default.nix new file mode 100644 index 00000000..bd2cd7bb --- /dev/null +++ b/modules/home/wms/hyprland/outputs/default.nix @@ -0,0 +1,29 @@ +{ config, ... }: +{ + # Monitors + wayland.windowManager.hyprland.settings = { + workspace = [ + "name:${config.ws.w1}, monitor:${config.displays.d1}, default:true" + "name:${config.ws.w2}, monitor:${config.displays.d1}" + "name:${config.ws.w3}, monitor:${config.displays.d1}" + "name:${config.ws.w1a}, monitor:${config.displays.d1}" + "name:${config.ws.w2a}, monitor:${config.displays.d1}" + "name:${config.ws.w3a}, monitor:${config.displays.d1}" + + "name:${config.ws.w4}, monitor:${config.displays.d2}, default:true" + "name:${config.ws.w5}, monitor:${config.displays.d2}" + "name:${config.ws.w6}, monitor:${config.displays.d2}" + "name:${config.ws.w4a}, monitor:${config.displays.d2}" + "name:${config.ws.w5a}, monitor:${config.displays.d2}" + + "name:${config.ws.w7}, monitor:${config.displays.d3}, default:true" + "name:${config.ws.w8}, monitor:${config.displays.d3}" + "name:${config.ws.w9}, monitor:${config.displays.d3}" + "name:${config.ws.w7a}, monitor:${config.displays.d3}" + "name:${config.ws.w8a}, monitor:${config.displays.d3}" + + "name:${config.ws.w6a}, monitor:${config.displays.d4}, default:true" + "name:${config.ws.w9a}, monitor:${config.displays.d4}" + ]; + }; +} diff --git a/modules/home/wms/hyprland/plugins/default.nix b/modules/home/wms/hyprland/plugins/default.nix new file mode 100644 index 00000000..43f3bdc8 --- /dev/null +++ b/modules/home/wms/hyprland/plugins/default.nix @@ -0,0 +1,22 @@ +{ config, ... }: +{ + wayland.windowManager.hyprland.settings.plugin = { + hy3 = { + no_gaps_when_only = 0; + node_collapse_policy = 0; + group_inset = 5; + tabs = { + text_font = config.look.fonts.main; + text_height = 10; + height = 17; + padding = 0; + rounding = 0; + "col.active" = "rgba(${config.look.colors.prime}FF)"; + "col.inactive" = "rgba(${config.look.colors.split}FF)"; + "col.urgent" = "rgba(${config.look.colors.urgent}FF)"; + "col.text.active" = "rgba(${config.look.colors.text}FF)"; + "col.text.inactive" = "rgba(${config.look.colors.text}FF)"; + }; + }; + }; +} diff --git a/modules/home/wms/hyprland/rules/default.nix b/modules/home/wms/hyprland/rules/default.nix new file mode 100644 index 00000000..0e26e53f --- /dev/null +++ b/modules/home/wms/hyprland/rules/default.nix @@ -0,0 +1,37 @@ +{ config, ... }: +{ + wayland.windowManager.hyprland.settings = { + windowrulev2 = [ + # Scratchpads + "workspace special:btop silent, class:^(btop)$" + "workspace special:music silent, class:^(music)$" + "workspace special:sound silent, class:^(sound)$" + + # Browsers + "workspace name:${config.ws.w1} silent, class:(MainBrowser)" + "workspace name:${config.ws.w1a} silent, class:(AltBrowser)" + + # Communication + "workspace name:${config.ws.w7} silent, class:(MiscBrowser)" + "workspace name:${config.ws.w7} silent, class:(vesktop)" + "workspace name:${config.ws.w8} silent, class:(org.gnome.Fractal)" + "workspace name:${config.ws.w8} silent, class:(org.telegram.desktop)" + "workspace name:${config.ws.w9} silent, class:(thunderbird)" + + # Etc + "workspace name:${config.ws.w2} silent, class:(steam)" + "workspace name:${config.ws.w2} silent, class:(heroic)" + "workspace name:${config.ws.w2a} silent, class:(looking-glass-client)" + "workspace name:${config.ws.w4a} silent, class:(com.obsproject.Studio)" + + # Borderless single window part 1 + "bordersize 0, floating:0, onworkspace:w[tv1]" + ]; + + # Borderless on single window part 2 + workspace = [ "w[tv1], gapsout:0, gapsin:0" ]; + + # Borderless screenshots + layerrule = "noanim, selection"; + }; +} diff --git a/modules/home/wms/hyprland/theme/default.nix b/modules/home/wms/hyprland/theme/default.nix new file mode 100644 index 00000000..82d0083f --- /dev/null +++ b/modules/home/wms/hyprland/theme/default.nix @@ -0,0 +1,51 @@ +{ config, ... }: +{ + wayland.windowManager.hyprland.settings = { + general = { + "col.active_border" = "rgba(${config.look.colors.prime}FF)"; + "col.inactive_border" = "rgba(${config.look.colors.split}FF)"; + gaps_in = 4; + gaps_out = 10; + border_size = config.look.border.string; + allow_tearing = true; + layout = "hy3"; + }; + + misc = { + disable_hyprland_logo = true; + font_family = config.look.fonts.main; + middle_click_paste = false; + vrr = 2; + }; + + decoration.blur.enabled = false; + + animations = { + bezier = [ + "easeOutQuint,0.23,1,0.32,1" + "easeInOutCubic,0.65,0.05,0.36,1" + "linear,0,0,1,1" + "almostLinear,0.5,0.5,0.75,1.0" + "quick,0.15,0,0.1,1" + ]; + animation = [ + "global, 1, 10, default" + "border, 1, 5.39, easeOutQuint" + "windows, 1, 4.79, easeOutQuint" + "windowsIn, 1, 4.1, easeOutQuint, popin 87%" + "windowsOut, 1, 1.49, linear, popin 87%" + "fadeIn, 1, 1.73, almostLinear" + "fadeOut, 1, 1.46, almostLinear" + "fade, 1, 3.03, quick" + "layers, 1, 3.81, easeOutQuint" + "layersIn, 1, 4, easeOutQuint, fade" + "layersOut, 1, 1.5, linear, fade" + "fadeLayersIn, 1, 1.79, almostLinear" + "fadeLayersOut, 1, 1.39, almostLinear" + "workspaces, 1, 1.94, almostLinear, fade" + "workspacesIn, 1, 1.21, almostLinear, fade" + "workspacesOut, 1, 1.94, almostLinear, fade" + ]; + }; + }; +} diff --git a/modules/home/wms/niri/autostart/default.nix b/modules/home/wms/niri/autostart/default.nix deleted file mode 100644 index 57b67eca..00000000 --- a/modules/home/wms/niri/autostart/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ pkgs, ... }: -{ - config.home.niri.settings.autostart = pkgs.writeText "autostart" '' - spawn-at-startup "waybar" - - // Daemons and tray - spawn-at-startup "wpaperd" - spawn-at-startup "wl-paste" "-t" "text" "--watch" "clipman" "store" "-P" - spawn-at-startup "wl-copy" - spawn-at-startup "mako" - spawn-at-startup "rot8" - spawn-at-startup "wlsunset" "-s" "22:00" "-S" "07:30" - spawn-at-startup "${pkgs.xwayland-satellite}/bin/xwayland-satellite" - - // Foreground - spawn-at-startup "thunderbird" - spawn-at-startup "vesktop" - ''; -} diff --git a/modules/home/wms/niri/default.nix b/modules/home/wms/niri/default.nix deleted file mode 100644 index 0beb7a11..00000000 --- a/modules/home/wms/niri/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, ... }: -{ - imports = [ - ./autostart - ./hotkeys - ./inputs - ./outputs - ./rules - ./theme - ]; - - options.home.niri.settings = lib.mkOption { - type = lib.types.attrs; - }; - - config = lib.mkIf config.home.desktop.enable { - xdg.configFile."niri/config.kdl".text = '' - ${builtins.readFile config.home.niri.settings.autostart} - ${builtins.readFile config.home.niri.settings.hotkeys} - ${builtins.readFile config.home.niri.settings.inputs} - ${builtins.readFile config.home.niri.settings.outputs} - ${builtins.readFile config.home.niri.settings.rules} - ${builtins.readFile config.home.niri.settings.theme} - ''; - }; -} diff --git a/modules/home/wms/niri/hotkeys/default.nix b/modules/home/wms/niri/hotkeys/default.nix deleted file mode 100644 index 531ca93e..00000000 --- a/modules/home/wms/niri/hotkeys/default.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ config, pkgs, ... }: -{ - config.home.niri.settings.hotkeys = let - primeMod = "Mod"; - secMod = "Alt"; - resizeAmount = "5"; - in pkgs.writeText "hotkeys" '' - binds { - //// Launchers - - // Browser - ${primeMod}+F1 { spawn "sh" "-c" "librewolf -p Main --name MainBrowser | notify-send \"Main Browser\""; } - ${primeMod}+F2 { spawn "sh" "-c" "librewolf -p Alt --name AltBrowser | notify-send \"Alternate Browser\""; } - - // Virtual machines - ${primeMod}+F4 { spawn "sh" "-c" "virt-manager | notify-send \"Virtual Machines\""; } - ${primeMod}+F5 { spawn "sh" "-c" "looking-glass-client input:rawMouse=yes | notify-send \"Looking Glass\""; } - - // Prime + key - ${primeMod}+s { spawn "sh" "-c" "rofi -show run -p Command"; } - ${primeMod}+c { spawn "sh" "-c" "clipman pick -t rofi"; } - ${primeMod}+x { spawn "sh" "-c" "rofipower"; } - ${primeMod}+b { spawn "sh" "-c" "pkill -USR1 waybar"; } - ${primeMod}+Return { spawn "sh" "-c" "foot"; } - - // Prime + shift + key - ${primeMod}+Shift+s { spawn "sh" "-c" "rofi -show drun -modi drun -drun-display-format {name} -show-icons -disable-history"; } - ${primeMod}+Shift+t { spawn "sh" "-c" "pcmanfm"; } - ${primeMod}+Shift+e { spawn "sh" "-c" "bemoji -n -P 0"; } - ${primeMod}+Shift+b { spawn "sh" "-c" "rofi-bluetooth"; } - ${primeMod}+Shift+Return { spawn "sh" "-c" "foot ranger"; } - - // Prime + ctrl + key - ${primeMod}+Ctrl+s { spawn "sh" "-c" "rofiscratch"; } - ${primeMod}+Ctrl+c { spawn "sh" "-c" "wlpicker && notify-send \"Color copied to clipboard\""; } - - //// Media - - // Volume - ${secMod}+j { spawn "sh" "-c" "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"; } - ${secMod}+k { spawn "sh" "-c" "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"; } - ${secMod}+m { spawn "sh" "-c" "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; } - - // MPD - ${primeMod}+Backslash { spawn "sh" "-c" "playerctl -p firefox play-pause"; } - ${primeMod}+Shift+Backslash { spawn "sh" "-c" "playerctl -p mpd play-pause"; } - ${secMod}+Shift+h { spawn "sh" "-c" "playerctl -p mpd previous"; } - ${secMod}+Shift+j { spawn "sh" "-c" "playerctl -p mpd volume 0.03-"; } - ${secMod}+Shift+k { spawn "sh" "-c" "playerctl -p mpd volume 0.03+"; } - ${secMod}+Shift+l { spawn "sh" "-c" "playerctl -p mpd next"; } - - //// Miscellaneous - - // Notifications - ${primeMod}+n { spawn "sh" "-c" "makotoggle"; } - ${primeMod}+Shift+n { spawn "sh" "-c" "makoctl restore"; } - ${primeMod}+Ctrl+n { spawn "sh" "-c" "makoctl dismiss -a"; } - - // Screenshots - ${secMod}+F { screenshot; } - ${secMod}+Shift+F { screenshot-screen; } - ${secMod}+Ctrl+F { screenshot-window; } - - // Display brightness - ${primeMod}+equal { spawn "sh" "-c" "brightnessctl s 5%+"; } - ${primeMod}+minus { spawn "sh" "-c" "brightnessctl s 5%-"; } - ${primeMod}+Shift+equal { spawn "sh" "-c" "brightnessctl s 1%+"; } - ${primeMod}+Shift+minus { spawn "sh" "-c" "brightnessctl s 1%-"; } - - // Keyboard brightness - ${primeMod}+Alt+equal { spawn "sh" "-c" "brightnessctl -d spi::kbd_backlight s 20%+"; } - ${primeMod}+Alt+minus { spawn "sh" "-c" "brightnessctl -d spi::kbd_backlight s 20%-"; } - - //// Window manager - ${primeMod}+q { close-window; } - - // Switch to workspaces - ${primeMod}+grave { focus-workspace "${config.ws.w0}"; } - ${primeMod}+1 { focus-workspace "${config.ws.w1}"; } - ${primeMod}+2 { focus-workspace "${config.ws.w2}"; } - ${primeMod}+3 { focus-workspace "${config.ws.w3}"; } - ${primeMod}+4 { focus-workspace "${config.ws.w4}"; } - ${primeMod}+5 { focus-workspace "${config.ws.w5}"; } - ${primeMod}+6 { focus-workspace "${config.ws.w6}"; } - ${primeMod}+7 { focus-workspace "${config.ws.w7}"; } - ${primeMod}+8 { focus-workspace "${config.ws.w8}"; } - ${primeMod}+9 { focus-workspace "${config.ws.w9}"; } - - // Switch to alternate workspaces - ${secMod}+F1 { focus-workspace "${config.ws.w1a}"; } - ${secMod}+F2 { focus-workspace "${config.ws.w2a}"; } - ${secMod}+F3 { focus-workspace "${config.ws.w3a}"; } - ${secMod}+F4 { focus-workspace "${config.ws.w4a}"; } - ${secMod}+F5 { focus-workspace "${config.ws.w5a}"; } - ${secMod}+F6 { focus-workspace "${config.ws.w6a}"; } - ${secMod}+F7 { focus-workspace "${config.ws.w7a}"; } - ${secMod}+F8 { focus-workspace "${config.ws.w8a}"; } - ${secMod}+F9 { focus-workspace "${config.ws.w9a}"; } - - // Move window to and focus workspace - ${primeMod}+Shift+grave { move-window-to-workspace "${config.ws.w0}"; } - ${primeMod}+Shift+1 { move-window-to-workspace "${config.ws.w1}"; } - ${primeMod}+Shift+2 { move-window-to-workspace "${config.ws.w2}"; } - ${primeMod}+Shift+3 { move-window-to-workspace "${config.ws.w3}"; } - ${primeMod}+Shift+4 { move-window-to-workspace "${config.ws.w4}"; } - ${primeMod}+Shift+5 { move-window-to-workspace "${config.ws.w5}"; } - ${primeMod}+Shift+6 { move-window-to-workspace "${config.ws.w6}"; } - ${primeMod}+Shift+7 { move-window-to-workspace "${config.ws.w7}"; } - ${primeMod}+Shift+8 { move-window-to-workspace "${config.ws.w8}"; } - ${primeMod}+Shift+9 { move-window-to-workspace "${config.ws.w9}"; } - - // Move window to and focus workspace - ${secMod}+Shift+F1 { move-window-to-workspace "${config.ws.w1a}"; } - ${secMod}+Shift+F2 { move-window-to-workspace "${config.ws.w2a}"; } - ${secMod}+Shift+F3 { move-window-to-workspace "${config.ws.w3a}"; } - ${secMod}+Shift+F4 { move-window-to-workspace "${config.ws.w4a}"; } - ${secMod}+Shift+F5 { move-window-to-workspace "${config.ws.w5a}"; } - ${secMod}+Shift+F6 { move-window-to-workspace "${config.ws.w6a}"; } - ${secMod}+Shift+F7 { move-window-to-workspace "${config.ws.w7a}"; } - ${secMod}+Shift+F8 { move-window-to-workspace "${config.ws.w8a}"; } - ${secMod}+Shift+F9 { move-window-to-workspace "${config.ws.w9a}"; } - - // Change focused window - ${primeMod}+h { focus-column-or-monitor-left; } - ${primeMod}+j { focus-window-down; } - ${primeMod}+k { focus-window-up; } - ${primeMod}+l { focus-column-or-monitor-right; } - - // Move focused window - ${primeMod}+Shift+h { move-column-left-or-to-monitor-left; } - ${primeMod}+Shift+j { move-window-down; } - ${primeMod}+Shift+k { move-window-up; } - ${primeMod}+Shift+l { move-column-right-or-to-monitor-right; } - - // Resize window - ${primeMod}+${secMod}+h { set-column-width "-${resizeAmount}%"; } - ${primeMod}+${secMod}+j { set-window-height "-${resizeAmount}%"; } - ${primeMod}+${secMod}+k { set-window-height "+${resizeAmount}%"; } - ${primeMod}+${secMod}+l { set-column-width "+${resizeAmount}%"; } - - // Floating - ${primeMod}+space { switch-focus-between-floating-and-tiling; } - ${primeMod}+Shift+space { toggle-window-floating; } - - // There are also commands that consume or expel a single window to the side. - ${primeMod}+Ctrl+h { consume-or-expel-window-left; } - ${primeMod}+Ctrl+l { consume-or-expel-window-right; } - - // Toggle fullscreen - ${primeMod}+f { maximize-column; } - ${primeMod}+Shift+f { fullscreen-window; } - - // Column functions - ${primeMod}+r { switch-preset-column-width; } - ${primeMod}+Shift+r { reset-window-height; } - ${primeMod}+Shift+c { center-column; } - - // Move these into scratchpads if or when they get supported - ${primeMod}+Shift+BackSpace { spawn "sh" "-c" "foot btop"; } - ${primeMod}+Shift+m { spawn "sh" "-c" "foot ncmpcpp"; } - ${primeMod}+Shift+v { spawn "sh" "-c" "foot pulsemixer"; } - } - ''; -} diff --git a/modules/home/wms/niri/inputs/default.nix b/modules/home/wms/niri/inputs/default.nix deleted file mode 100644 index af58f194..00000000 --- a/modules/home/wms/niri/inputs/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ pkgs, ... }: -{ - config.home.niri.settings.inputs = pkgs.writeText "inputs" '' - input { - mouse { - accel-profile "flat" - accel-speed -0.9 - } - touchpad { - accel-profile "flat" - scroll-method "two-finger" - } - trackpoint { - off - } - warp-mouse-to-focus - focus-follows-mouse - } - clipboard { - disable-primary - } - ''; -} diff --git a/modules/home/wms/niri/outputs/default.nix b/modules/home/wms/niri/outputs/default.nix deleted file mode 100644 index ac4c8204..00000000 --- a/modules/home/wms/niri/outputs/default.nix +++ /dev/null @@ -1,89 +0,0 @@ -{ config, pkgs, ... }: -{ - config.home.niri.settings.outputs = pkgs.writeText "outputs" '' - // Workspace 1 - workspace "${config.ws.w0}" { - open-on-output "${config.displays.d1}" - } - workspace "${config.ws.w1}" { - open-on-output "${config.displays.d1}" - } - workspace "${config.ws.w2}" { - open-on-output "${config.displays.d1}" - } - workspace "${config.ws.w3}" { - open-on-output "${config.displays.d1}" - } - workspace "${config.ws.w1a}" { - open-on-output "${config.displays.d1}" - } - workspace "${config.ws.w2a}" { - open-on-output "${config.displays.d1}" - } - workspace "${config.ws.w3a}" { - open-on-output "${config.displays.d1}" - } - - // Workspace 2 - workspace "${config.ws.w4}" { - open-on-output "${config.displays.d2}" - } - workspace "${config.ws.w5}" { - open-on-output "${config.displays.d2}" - } - workspace "${config.ws.w6}" { - open-on-output "${config.displays.d2}" - } - workspace "${config.ws.w4a}" { - open-on-output "${config.displays.d2}" - } - workspace "${config.ws.w5a}" { - open-on-output "${config.displays.d2}" - } - - // Workspace 3 - workspace "${config.ws.w7}" { - open-on-output "${config.displays.d3}" - } - workspace "${config.ws.w8}" { - open-on-output "${config.displays.d3}" - } - workspace "${config.ws.w9}" { - open-on-output "${config.displays.d3}" - } - workspace "${config.ws.w7a}" { - open-on-output "${config.displays.d3}" - } - workspace "${config.ws.w8a}" { - open-on-output "${config.displays.d3}" - } - - // Workspace 4 - workspace "${config.ws.w6a}" { - open-on-output "${config.displays.d4}" - } - workspace "${config.ws.w9a}" { - open-on-output "${config.displays.d4}" - } - - // Monitors - output "${config.displays.d1}" { - mode "1920x1080@143.980" - position x=3840 y=405 - variable-refresh-rate - } - output "${config.displays.d2}" { - mode "1920x1080@60" - position x=1920 y=405 - } - output "${config.displays.d3}" { - mode "1680x1050@59.883" - transform "90" - position x=5760 y=0 - } - output "${config.displays.d4}" { - mode "1920x1080@60" - position x=0 y=405 - } - ''; -} diff --git a/modules/home/wms/niri/rules/default.nix b/modules/home/wms/niri/rules/default.nix deleted file mode 100644 index 23c48435..00000000 --- a/modules/home/wms/niri/rules/default.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ config, pkgs, ... }: -{ - config.home.niri.settings.rules = pkgs.writeText "rules" '' - // Browsers - window-rule { - match app-id="MainBrowser" - open-on-workspace "${config.ws.w1}" - } - window-rule { - match app-id="AltBrowser" - open-on-workspace "${config.ws.w1a}" - } - - // Gaming - window-rule { - match app-id="steam" - open-on-workspace "${config.ws.w2}" - } - window-rule { - match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# - default-floating-position x=10 y=10 relative-to="bottom-right" - } - - // Communication - window-rule { - match app-id="MiscBrowser" - match app-id="vesktop" - block-out-from "screencast" - open-maximized true - open-on-workspace "${config.ws.w7}" - } - window-rule { - match app-id="thunderbird" - block-out-from "screencast" - open-maximized true - open-on-workspace "${config.ws.w9}" - } - - // Etc - window-rule { - match app-id="com.obsproject.Studio" - open-on-workspace "${config.ws.w4a}" - } - - // Layer rules - layer-rule { - match namespace="^notifications$" - block-out-from "screencast" - } - - // Everything else - screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" - - hotkey-overlay { - skip-at-startup - } - - environment { - DISPLAY ":0" - } - ''; -} diff --git a/modules/home/wms/niri/theme/default.nix b/modules/home/wms/niri/theme/default.nix deleted file mode 100644 index 3f9350b2..00000000 --- a/modules/home/wms/niri/theme/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, pkgs, ... }: -{ - config.home.niri.settings.theme = pkgs.writeText "theme" '' - prefer-no-csd - - layout { - border { - width 3 - active-color "#${config.look.colors.prime}" - inactive-color "#${config.look.colors.split}" - } - - focus-ring { - off - } - - gaps 7 - center-focused-column "never" - default-column-width { proportion 0.5; } - - preset-column-widths { - proportion 0.33333 - proportion 0.5 - proportion 0.66667 - } - } - ''; -} diff --git a/modules/home/wms/programs/default.nix b/modules/home/wms/programs/default.nix index dde85843..10484976 100644 --- a/modules/home/wms/programs/default.nix +++ b/modules/home/wms/programs/default.nix @@ -2,6 +2,7 @@ { imports = [ ./grimsnap + ./kanshi ./mako ./swaylock ./waybar diff --git a/modules/home/wms/programs/kanshi/default.nix b/modules/home/wms/programs/kanshi/default.nix new file mode 100644 index 00000000..55a90b1c --- /dev/null +++ b/modules/home/wms/programs/kanshi/default.nix @@ -0,0 +1,59 @@ +{ config, lib, ... }: +{ + services.kanshi = { + enable = true; + settings = [ + { + profile = { + name = "tower"; + outputs = [ + { + criteria = "Microstep MSI G24C 0000000000001"; + position = "3840,405"; + mode = "1920x1080@143.979996Hz"; + } + { + criteria = "BNQ BenQ GW2270 6CH00781019"; + position = "1920,405"; + } + { + criteria = "Eizo Nanao Corporation CG223W 23252050"; + position = "5760,0"; + transform = "90"; + } + { + criteria = "Samsung Electric Company SAMSUNG Unknown"; + position = "0,405"; + } + ]; + }; + } + { + profile = { + name = "docked"; + outputs = [ + { + criteria = "*"; + status = "enable"; + } + { + criteria = "eDP-1"; + status = "disable"; + } + ]; + }; + } + { + profile = { + name = "undocked"; + outputs = [ + { + criteria = "eDP-1"; + status = "enable"; + } + ]; + }; + } + ]; + }; +} diff --git a/modules/home/wms/sway/default.nix b/modules/home/wms/sway/default.nix index ac78c3cf..7ec5e4c6 100644 --- a/modules/home/wms/sway/default.nix +++ b/modules/home/wms/sway/default.nix @@ -5,7 +5,6 @@ ./hotkeys ./inputs ./outputs - ./programs ./rules ./theme ]; diff --git a/modules/home/wms/sway/hotkeys/default.nix b/modules/home/wms/sway/hotkeys/default.nix index 07ff8534..988e3967 100644 --- a/modules/home/wms/sway/hotkeys/default.nix +++ b/modules/home/wms/sway/hotkeys/default.nix @@ -17,7 +17,7 @@ # Virtual machines "${primeMod}+F4" = ''exec virt-manager | notify-send "Virtual Machines"''; - "${primeMod}+F5" = ''exec looking-glass-client input:rawMouse=yes | notify-send "Looking Glass"''; + "${primeMod}+F5" = ''exec looking-glass-client | notify-send "Looking Glass"''; # Prime + key "${primeMod}+s" = ''exec rofi -show run -p Command''; @@ -34,7 +34,6 @@ "${primeMod}+Shift+Return" = ''exec foot ranger''; # Prime + ctrl + key - "${primeMod}+Ctrl+x" = ''exec prop-sway''; "${primeMod}+Ctrl+s" = ''exec rofiscratch''; "${primeMod}+Ctrl+c" = ''exec wlpicker && notify-send "Color copied to clipboard"''; @@ -45,7 +44,7 @@ "${secMod}+k" = ''exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+''; "${secMod}+m" = ''exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle''; - # MPD + # MPRIS "${primeMod}+Backslash" = ''exec playerctl -p firefox play-pause''; "${primeMod}+Shift+Backslash" = ''exec playerctl -p mpd play-pause''; "${secMod}+Shift+h" = ''exec playerctl -p mpd previous''; diff --git a/modules/home/wms/sway/outputs/default.nix b/modules/home/wms/sway/outputs/default.nix index 2d9ea2b9..7edc6dfd 100644 --- a/modules/home/wms/sway/outputs/default.nix +++ b/modules/home/wms/sway/outputs/default.nix @@ -41,30 +41,5 @@ (assign "${config.displays.d2}" workspaces2) ++ (assign "${config.displays.d3}" workspaces3) ++ (assign "${config.displays.d4}" workspaces4); - - output = { - ${config.displays.d1} = { - pos = "3840 405"; - mode = "1920x1080@143.980Hz"; - max_render_time = "3"; - allow_tearing = "yes"; - }; - ${config.displays.d2} = { - pos = "1920 405"; - mode = "1920x1080@60Hz"; - max_render_time = "3"; - }; - ${config.displays.d3} = { - pos = "5760 0"; - mode = "1680x1050@59.883Hz"; - transform = "270"; - max_render_time = "3"; - }; - ${config.displays.d4} = { - pos = "0 405"; - mode = "1920x1080@60Hz"; - max_render_time = "3"; - }; - }; }; } diff --git a/modules/home/wms/sway/programs/default.nix b/modules/home/wms/sway/programs/default.nix deleted file mode 100644 index dbc2c1a0..00000000 --- a/modules/home/wms/sway/programs/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - imports = [ ./prop-sway ]; -} diff --git a/modules/home/wms/sway/programs/prop-sway/default.nix b/modules/home/wms/sway/programs/prop-sway/default.nix deleted file mode 100644 index 8ba8916f..00000000 --- a/modules/home/wms/sway/programs/prop-sway/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - home.packages = with pkgs; lib.mkIf config.wayland.windowManager.sway.enable [ - (pkgs.writeScriptBin "prop-sway" '' - selected_window=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | "\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)"' | ${pkgs.slurp}/bin/slurp -r -c ${config.look.colors.prime} -B 00000066 -b 00000000) - if [ -n "$selected_window" ]; then - app_id=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | select("\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)" == "'"$selected_window"'") | .app_id') - system=$(sed 's/xdg_shell/Wayland/g; s/xwayland/Xorg/g' < <(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | select("\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)" == "'"$selected_window"'") | .shell')) - notify-send "$(echo -e "Window's app_id: $app_id\nWindow System: $system")" - fi - '') - ]; -} diff --git a/modules/system/programs/desktops/default.nix b/modules/system/programs/desktops/default.nix index aff115c4..43d5484d 100644 --- a/modules/system/programs/desktops/default.nix +++ b/modules/system/programs/desktops/default.nix @@ -2,9 +2,8 @@ { config = lib.mkIf config.system.desktop.enable { programs = { + hyprland.enable = true; sway.enable = true; - niri.enable = true; - xwayland.enable = lib.mkForce true; }; environment.sessionVariables.WLR_RENDERER = "vulkan";