254 lines
9.2 KiB
Nix
254 lines
9.2 KiB
Nix
{ inputs, pkgs, ... }:
|
|
let
|
|
hyprland = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
|
playerctl = "${pkgs.playerctl}/bin/playerctl";
|
|
wl-paste = "${pkgs.wl-clipboard}/bin/wl-paste";
|
|
hyprpaper = "${pkgs.hyprpaper}/bin/hyprpaper";
|
|
firefox = "${pkgs.firefox}/bin/firefox";
|
|
nautilus = "${pkgs.gnome.nautilus}/bin/nautilus";
|
|
gnome-calendar = "${pkgs.gnome.gnome-calendar}/bin/gnome-calendar";
|
|
waybar = "${inputs.waybar.packages.${pkgs.system}.waybar}/bin/waybar";
|
|
wpctl = "${pkgs.wireplumber}/bin/wpctl";
|
|
alacritty = "${pkgs.alacritty}/bin/alacritty";
|
|
swaylock = "${pkgs.swaylock}/bin/swaylock";
|
|
rofi = "${pkgs.rofi}/bin/rofi";
|
|
jq = "${pkgs.jq}/bin/jq";
|
|
rofi-ykman = pkgs.writeShellScriptBin "rofi-ykman" ''
|
|
accounts=$(${pkgs.yubikey-manager}/bin/ykman oath accounts list)
|
|
prompt="YubiKey OATH"
|
|
account=$(echo "''${accounts/, TOTP/\n}" | awk '{ print $0 "\0icon\x1fyubioath"; }' | ${rofi} -dmenu -i -p "$prompt" ''${shortcuts[@]})
|
|
code=$(${pkgs.yubikey-manager}/bin/ykman oath accounts code "$account")
|
|
IFS=', ' read -r -a code <<< "$code"
|
|
echo -n "''${code[-1]}" | ${pkgs.wl-clipboard}/bin/wl-copy;
|
|
'';
|
|
|
|
launch_alacritty = pkgs.writeShellScriptBin "launch_alacritty" ''
|
|
RUNNING_WAYPIPE=false
|
|
SSH_CLIENT=""
|
|
CHILD_PID=$(pgrep -P "$1")
|
|
|
|
if [ "$GRAND_CHILD_PID" != "" ]; then
|
|
GRAND_CHILD_NAME=$(ps -p "$GRAND_CHILD_PID" -o comm=)
|
|
if [ "$GRAND_CHILD_NAME" == "ssh" ]; then
|
|
CHILD_PID=$GRAND_CHILD_PID
|
|
SSH_CLIENT=$(ps -p "$CHILD_PID" -o args --no-headers | awk '{ print $2 }')
|
|
fi
|
|
if [ "$GRAND_CHILD_NAME" == "waypipe" ]; then
|
|
RUNNING_WAYPIPE=true
|
|
CHILD_PID=$(pgrep -P "$GRAND_CHILD_PID")
|
|
SSH_CLIENT=$(ps -p "$GRAND_CHILD_PID" -o args --no-headers | awk '{ print $4 }')
|
|
fi
|
|
fi
|
|
|
|
if [ $RUNNING_WAYPIPE == true ]; then
|
|
PREVIOUS_SESSION_ID=$(grep -z "SSH_SESSION_ID" "/proc/$CHILD_PID/environ" | xargs -0 -n 1 | grep -oP "[0-9]*")
|
|
SSH_SESSION_ID=$RANDOM
|
|
${alacritty} -e zsh -c "SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t \"$SSH_CLIENT\" env SSH_SESSION_ID=\"$SSH_SESSION_ID\" PREVIOUS_SESSION_ID=\"$PREVIOUS_SESSION_ID\" \"zsh --login\""
|
|
else
|
|
if [ "$(ps -p "$1" -o comm=)" == "alacritty" ]; then
|
|
CWD=$(readlink -e /proc/"$CHILD_PID"/cwd)
|
|
if [ "$CWD" != "" ]; then
|
|
${alacritty} --working-directory "$CWD"
|
|
else
|
|
${alacritty}
|
|
fi
|
|
else
|
|
${alacritty}
|
|
fi
|
|
fi
|
|
'';
|
|
in {
|
|
services.kdeconnect = {
|
|
enable = true;
|
|
package = pkgs.kdePackages.kdeconnect-kde;
|
|
indicator = true;
|
|
};
|
|
|
|
home.packages = with pkgs; [ wl-clipboard ];
|
|
|
|
services.cliphist = { enable = true; };
|
|
|
|
services.hyprpaper = {
|
|
enable = true;
|
|
settings = {
|
|
ipc = "on";
|
|
splash = false;
|
|
preload = [ "${./files/wallpaper.png}" ];
|
|
wallpaper = [
|
|
# Fill in by host-specific config!
|
|
# "Display,${./files/wallpaper.png}"
|
|
];
|
|
};
|
|
};
|
|
|
|
services.dunst = {
|
|
enable = true;
|
|
settings = {
|
|
global = {
|
|
frame_color = "#00000000";
|
|
separator_color = "frame";
|
|
background = "#24273A";
|
|
foreground = "#ffffff";
|
|
font = "Ubuntu 10.5";
|
|
width = "(0, 600)";
|
|
padding = 15;
|
|
origin = "top-right";
|
|
offset = "10x10";
|
|
horizontal_padding = 20;
|
|
gap_size = 15;
|
|
};
|
|
};
|
|
};
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
systemd.variables = [ "--all" ];
|
|
systemd.enable = true;
|
|
systemd.enableXdgAutostart = true;
|
|
xwayland.enable = true;
|
|
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
|
plugins = [
|
|
inputs.split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
|
|
];
|
|
settings = {
|
|
"$mainMod" = "SUPER";
|
|
exec-once = [
|
|
"hyprpaper"
|
|
"${waybar}"
|
|
"${wl-paste} --type text --watch cliphist store"
|
|
"${wl-paste} --type image --watch cliphist store"
|
|
];
|
|
env = [
|
|
"WLR_NO_HARDWARE_CURSORS,1"
|
|
"TERMINAL,${alacritty}"
|
|
"WLR_RENDERER_ALLOW_SOFTWARE,1"
|
|
];
|
|
debug = { disable_logs = false; };
|
|
windowrulev2 = [
|
|
"float, title:^(rofi)(.*)$"
|
|
"center, title:^(rofi)(.*)$"
|
|
"noborder, title:^(rofi)(.*)$"
|
|
"stayfocused, title:^()$,class:^(steam)$"
|
|
"minsize 1 1, title:^()$,class:^(steam)$"
|
|
"stayfocused, title:^()$,class:^(steam)$"
|
|
];
|
|
windowrule = [ "noanim,waybar" ];
|
|
general = {
|
|
gaps_in = 1;
|
|
gaps_out = 5;
|
|
border_size = 2;
|
|
"col.active_border" = "rgba(002f5fee)";
|
|
"col.inactive_border" = "rgba(ffffff00)";
|
|
layout = "dwindle";
|
|
};
|
|
input = {
|
|
kb_layout = "us";
|
|
follow_mouse = 1;
|
|
kb_options = "compose:rctrl";
|
|
numlock_by_default = true;
|
|
};
|
|
binds = { scroll_event_delay = 1; };
|
|
xwayland = { force_zero_scaling = true; };
|
|
misc = { disable_hyprland_logo = 1; };
|
|
decoration = {
|
|
rounding = 1;
|
|
blur = { enabled = false; };
|
|
};
|
|
animations = {
|
|
enabled = "yes";
|
|
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
|
animation = [
|
|
"windows, 1, 2, myBezier"
|
|
"windowsOut, 1, 2, default, popin 80%"
|
|
"border, 1, 2, default"
|
|
"borderangle, 1, 2, default"
|
|
"fade, 1, 2, default"
|
|
"workspaces, 1, 1, default"
|
|
];
|
|
};
|
|
dwindle = {
|
|
preserve_split = "yes";
|
|
no_gaps_when_only = 1;
|
|
force_split = 2;
|
|
};
|
|
gestures = {
|
|
workspace_swipe = "on";
|
|
workspace_swipe_invert = false;
|
|
};
|
|
bindr = [
|
|
"$mainMod, SUPER_L, exec, pkill rofi || ${rofi} -show drun"
|
|
"$mainMod, SUPER_R, exec, pkill rofi || ${rofi} -show drun"
|
|
];
|
|
bindm = [
|
|
"$mainMod, mouse:272, movewindow"
|
|
"$mainMod, mouse:273, resizewindow"
|
|
];
|
|
bind = [
|
|
"$mainMod, return, exec, ${launch_alacritty}/bin/launch_alacritty $(hyprctl activewindow -j | ${jq} .pid)"
|
|
"$mainMod SHIFT, return, exec, ${alacritty}"
|
|
"$mainMod, Q, killactive,"
|
|
"$mainMod, A, exec, ${nautilus}"
|
|
"$mainMod, S, exec, ${gnome-calendar}"
|
|
"$mainMod, B, exec, MOZ_ENABLE_WAYLAND=1 ${firefox}"
|
|
"$mainMod, M, fullscreen, 1"
|
|
"$mainMod, F11, fullscreen"
|
|
"$mainMod, F, togglefloating,"
|
|
"$mainMod, SPACE, togglesplit, # dwindle"
|
|
"CONTROL_L ALT_L, L, exec, ${swaylock}"
|
|
''
|
|
$mainMod, C, exec, cliphist list | awk '{print $0, "\0icon\x1fcom.github.davidmhewitt.clipped"; }' | ${rofi} -dmenu -display-columns 2 | cliphist decode | wl-copy''
|
|
"$mainMod, Y, exec, ${rofi-ykman}/bin/rofi-ykman"
|
|
"$mainMod, N, exec, ${./files/rofi-ssh.sh}"
|
|
|
|
"$mainMod, Escape, exec, ${rofi} -show power-menu -modi power-menu:${
|
|
./files/rofi-power-menu.sh
|
|
}"
|
|
|
|
",XF86MonBrightnessUp, exec, xbacklight -inc 10"
|
|
",XF86MonBrightnessDown, exec, xbacklight -dec 10"
|
|
",XF86AudioRaiseVolume, exec, ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 10%+ --limit 1.0"
|
|
",XF86AudioLowerVolume, exec, ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 10%-"
|
|
",XF86AudioMicMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
|
",mouse_right, exec, ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%+ --limit 1.0"
|
|
",mouse_left, exec, ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%-"
|
|
",XF86AudioMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
|
",XF86AudioNext, exec, ${playerctl} next"
|
|
",XF86AudioPrev, exec, ${playerctl} previous"
|
|
"$mainMod,XF86AudioMute, exec, ${playerctl} play-pause"
|
|
"$mainMod,XF86AudioRaiseVolume, exec, ${playerctl} next"
|
|
"$mainMod,XF86AudioLowerVolume, exec, ${playerctl} previous"
|
|
'', Print, exec, grim -g "$(slurp -d)" - | wl-copy''
|
|
|
|
"$mainMod, H, exec, ${./files/vim-hypr-nav.sh} l"
|
|
"$mainMod, L, exec, ${./files/vim-hypr-nav.sh} r"
|
|
"$mainMod, K, exec, ${./files/vim-hypr-nav.sh} u"
|
|
"$mainMod, J, exec, ${./files/vim-hypr-nav.sh} d"
|
|
"$mainMod CONTROL_L, H, swapwindow, l"
|
|
"$mainMod CONTROL_L, L, swapwindow, r"
|
|
"$mainMod CONTROL_L, K, swapwindow, u"
|
|
"$mainMod CONTROL_L, J, swapwindow, d"
|
|
"$mainMod SHIFT, H, movewindow, l"
|
|
"$mainMod SHIFT, L, movewindow, r"
|
|
"$mainMod SHIFT, K, movewindow, u"
|
|
"$mainMod SHIFT, J, movewindow, d"
|
|
"$mainMod ALT, L, resizeactive, 20 0"
|
|
"$mainMod ALT, H, resizeactive, -20 0"
|
|
"$mainMod ALT, K, resizeactive, 0 -20"
|
|
"$mainMod ALT, J, resizeactive, 0 20"
|
|
"$mainMod SHIFT, T, split-movetoworkspace, empty"
|
|
"$mainMod, T, split-workspace, empty"
|
|
"$mainMod, TAB, split-workspace, m+1"
|
|
"$mainMod SHIFT, TAB, split-workspace, m-1"
|
|
] ++ (
|
|
# workspaces
|
|
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
|
|
builtins.concatLists (builtins.genList (x:
|
|
let
|
|
ws = let c = (x + 1) / 10; in builtins.toString (x + 1 - (c * 10));
|
|
in [
|
|
"$mainMod, ${ws}, split-workspace, ${toString (x + 1)}"
|
|
"$mainMod SHIFT, ${ws}, split-movetoworkspace, ${toString (x + 1)}"
|
|
]) 10));
|
|
};
|
|
};
|
|
}
|