233 lines
7.2 KiB
Nix
233 lines
7.2 KiB
Nix
{pkgs, ...}: let
|
|
terminal = "${pkgs.foot}/bin/footclient";
|
|
nautilus = "${pkgs.nautilus}/bin/nautilus";
|
|
playerctl = "${pkgs.playerctl}/bin/playerctl";
|
|
wpctl = "${pkgs.wireplumber}/bin/wpctl";
|
|
brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
|
|
terminal-name = "foot";
|
|
launch_terminal = pkgs.writeShellScriptBin "launch_terminal" ''
|
|
function find_leaf_pid(){
|
|
local PID
|
|
local RET
|
|
local NAME
|
|
PID=$1
|
|
for CHILD_PID in $(pgrep -P "$PID"); do
|
|
RET=$(find_leaf_pid "$CHILD_PID")
|
|
if [ "$RET" != "" ]; then
|
|
PID="$RET"
|
|
fi
|
|
done
|
|
NAME=$(ps -p "$PID" -o comm=)
|
|
if [ "$NAME" == "zsh" ]; then
|
|
echo "$PID"
|
|
elif [ "$NAME" == "ssh" ]; then
|
|
echo "$PID"
|
|
fi
|
|
}
|
|
|
|
LEAF_PID=$(find_leaf_pid "$1")
|
|
if [ "$(ps -p "$LEAF_PID" -o comm=)" == "ssh" ]; then
|
|
SSH_COMMAND=$(ps -p "$LEAF_PID" -o args --no-headers)
|
|
if [[ "$SSH_COMMAND" == *"waypipe"* ]]; then
|
|
CLIENT=$(echo "$SSH_COMMAND" | awk '{ print $5 }')
|
|
PREVIOUS_SESSION_ID=$(grep -z "SSH_SESSION_ID" "/proc/$LEAF_PID/environ" | xargs -0 -n 1 | grep -oP "[0-9]*")
|
|
SSH_SESSION_ID=$RANDOM
|
|
${terminal} -e zsh -c "SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t \"$CLIENT\" env SSH_SESSION_ID=\"$SSH_SESSION_ID\" PREVIOUS_SESSION_ID=\"$PREVIOUS_SESSION_ID\" \"zsh --login\""
|
|
else
|
|
${terminal} -e zsh -c "ssh -t \"$(echo "$SSH_COMMAND" | awk '{ print $2 }')\""
|
|
fi
|
|
|
|
else # Not an ssh session
|
|
if [ "$(ps -p "$1" -o comm=)" == "${terminal-name}" ]; then
|
|
CWD=$(readlink -e /proc/"$LEAF_PID"/cwd)
|
|
if [ "$CWD" != "" ]; then
|
|
${terminal} --working-directory "$CWD"
|
|
else
|
|
${terminal}
|
|
fi
|
|
else
|
|
${terminal}
|
|
fi
|
|
fi
|
|
'';
|
|
in {
|
|
# Since native Home Manager doesn't have a programs.niri module yet,
|
|
# we generate the KDL configuration file directly.
|
|
services.hyprpaper = {
|
|
enable = true;
|
|
settings = {
|
|
ipc = "off";
|
|
splash = false;
|
|
wallpaper = {
|
|
path = "${../hyprland/files/wallpaper.png}";
|
|
monitor = "";
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.hyprlock = {
|
|
enable = true;
|
|
settings = {
|
|
input-field = [
|
|
{
|
|
size = "200, 50";
|
|
position = "0, -80";
|
|
monitor = "";
|
|
dots_center = true;
|
|
fade_on_empty = true;
|
|
font_color = "rgb(202, 211, 245)";
|
|
inner_color = "rgb(91, 96, 120)";
|
|
outer_color = "rgb(24, 25, 38)";
|
|
outline_thickness = 3;
|
|
placeholder_text = "<span foreground=\"##cad3f5\">Password...</span>";
|
|
shadow_passes = 2;
|
|
}
|
|
];
|
|
general = {
|
|
no_fade_in = false;
|
|
};
|
|
background = [
|
|
{
|
|
path = "screenshot";
|
|
blur_passes = 3;
|
|
blur_size = 8;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
xdg.configFile."niri/config.kdl".text = ''
|
|
spawn-at-startup "${pkgs.hyprpaper}/bin/hyprpaper"
|
|
spawn-at-startup "foot" "--server"
|
|
spawn-at-startup "ags" "run"
|
|
spawn-at-startup "${pkgs.mate-polkit}/bin/polkit-mate"
|
|
prefer-no-csd
|
|
|
|
hotkey-overlay {
|
|
skip-at-startup
|
|
}
|
|
|
|
gestures {
|
|
hot-corners {
|
|
off
|
|
}
|
|
}
|
|
|
|
|
|
layout {
|
|
gaps 5
|
|
border {
|
|
off
|
|
}
|
|
focus-ring {
|
|
width 4
|
|
active-color "rgba(0, 47, 95, 238)"
|
|
inactive-color "rgba(255, 255, 255, 0)"
|
|
}
|
|
}
|
|
|
|
input {
|
|
touchpad {
|
|
tap
|
|
}
|
|
keyboard {
|
|
xkb {
|
|
options "compose:rctrl"
|
|
}
|
|
}
|
|
focus-follows-mouse max-scroll-amount="10%"
|
|
warp-mouse-to-focus
|
|
}
|
|
output "eDP-1" {
|
|
scale 1.2
|
|
}
|
|
window-rule {
|
|
match app-id="vicinae"
|
|
open-floating true
|
|
}
|
|
|
|
binds {
|
|
// General Binds
|
|
Mod+Return { spawn "sh" "-c" "${launch_terminal}/bin/launch_terminal $(niri msg --json focused-window | ${pkgs.jq}/bin/jq .pid)"; }
|
|
Mod+Shift+Return { spawn "${terminal}"; }
|
|
Mod+Q { close-window; }
|
|
Mod+A { spawn "${nautilus}"; }
|
|
Mod+B { spawn "Helium"; }
|
|
Mod+M { maximize-column; }
|
|
Mod+F {maximize-window-to-edges;}
|
|
Mod+Tab { toggle-overview; }
|
|
|
|
// Vicinae Binds
|
|
Mod+C { spawn "vicinae" "vicinae://extensions/vicinae/clipboard/history"; }
|
|
Mod+N { spawn "vicinae" "vicinae://extensions/vicinae/wm/switch-windows"; }
|
|
Mod+Escape { spawn "vicinae" "open" "-q" "Power Management "; }
|
|
Mod+Space { spawn "vicinae" "toggle"; }
|
|
|
|
Mod+Comma { consume-or-expel-window-left; }
|
|
Mod+Period { consume-or-expel-window-right; }
|
|
|
|
Mod+Alt+H { set-column-width "-5%"; }
|
|
Mod+Alt+L { set-column-width "+5%"; }
|
|
Mod+Alt+K { set-window-height "-5%"; }
|
|
Mod+Alt+J { set-window-height "+5%"; }
|
|
|
|
// Movement
|
|
Mod+H { focus-column-left; }
|
|
Mod+J { focus-window-down; }
|
|
Mod+K { focus-window-up; }
|
|
Mod+L { focus-column-right; }
|
|
|
|
Mod+Shift+H { move-column-left; }
|
|
Mod+Shift+L { move-column-right; }
|
|
Mod+Shift+J { move-window-down; }
|
|
Mod+Shift+K { move-window-up; }
|
|
|
|
// Workspaces
|
|
Mod+Shift+U { move-column-to-workspace-down; }
|
|
Mod+Shift+I { move-column-to-workspace-up; }
|
|
|
|
Mod+I { focus-workspace-up; }
|
|
Mod+U { focus-workspace-down; }
|
|
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; }
|
|
|
|
// Move to workspace
|
|
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; }
|
|
|
|
Print { screenshot; }
|
|
Ctrl+Alt+L {spawn "${pkgs.hyprlock}/bin/hyprlock"; }
|
|
|
|
XF86MonBrightnessUp { spawn "${brightnessctl}" "set" "+10%"; }
|
|
XF86MonBrightnessDown { spawn "${brightnessctl}" "set" "10%-"; }
|
|
|
|
// Volume
|
|
XF86AudioRaiseVolume { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SINK@" "10%+" "--limit" "1.0"; }
|
|
XF86AudioLowerVolume { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SINK@" "10%-"; }
|
|
XF86AudioMute { spawn "${wpctl}" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
|
XF86AudioMicMute { spawn "${wpctl}" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
|
|
|
// Media
|
|
XF86AudioNext { spawn "${playerctl}" "next"; }
|
|
XF86AudioPrev { spawn "${playerctl}" "previous"; }
|
|
Mod+XF86AudioMute { spawn "${playerctl}" "play-pause"; }
|
|
Mod+XF86AudioRaiseVolume { spawn "${playerctl}" "next"; }
|
|
Mod+XF86AudioLowerVolume { spawn "${playerctl}" "previous"; }
|
|
}
|
|
'';
|
|
}
|