Add Kanshi, Hyprland, remove Niri

This commit is contained in:
Bun 2025-05-04 22:54:21 -04:00
parent 4e90ea2e1c
commit 6feca365ff
26 changed files with 430 additions and 461 deletions

View file

@ -41,7 +41,6 @@
simple-tab-groups
sponsorblock
ublock-origin
vimium
violentmonkey
];
commonSearch = {

View file

@ -6,6 +6,7 @@
"image/png" = [ "imv.desktop" ];
"image/jpeg" = [ "imv.desktop" ];
"image/jp2" = [ "imv.desktop" ];
"image/gif" = [ "mpv.desktop" ];
"video/*" = [ "mpv.desktop" ];
};
}

View file

@ -1,7 +1,7 @@
{ ... }:
{
imports = [
./niri
./hyprland
./programs
./sway
];

View file

@ -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"
];
}

View file

@ -0,0 +1,17 @@
{ config, pkgs, ... }:
{
imports = [
./autostart
./hotkeys
./inputs
./outputs
./plugins
./rules
./theme
];
wayland.windowManager.hyprland = {
enable = true;
plugins = with pkgs.hyprlandPlugins; [ hy3 ];
};
}

View file

@ -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"
];
};
}

View file

@ -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";
};
};
}

View file

@ -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}"
];
};
}

View file

@ -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)";
};
};
};
}

View file

@ -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";
};
}

View file

@ -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"
];
};
};
}

View file

@ -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"
'';
}

View file

@ -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}
'';
};
}

View file

@ -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"; }
}
'';
}

View file

@ -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
}
'';
}

View file

@ -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
}
'';
}

View file

@ -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"
}
'';
}

View file

@ -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
}
}
'';
}

View file

@ -2,6 +2,7 @@
{
imports = [
./grimsnap
./kanshi
./mako
./swaylock
./waybar

View file

@ -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";
}
];
};
}
];
};
}

View file

@ -5,7 +5,6 @@
./hotkeys
./inputs
./outputs
./programs
./rules
./theme
];

View file

@ -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'';

View file

@ -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";
};
};
};
}

View file

@ -1,4 +0,0 @@
{ pkgs, ... }:
{
imports = [ ./prop-sway ];
}

View file

@ -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
'')
];
}