nix-da/home/sway/default.nix

221 lines
9 KiB
Nix

# vim:fileencoding=utf-8:foldmethod=marker
{
pkgs,
config,
lib,
osConfig,
...
}:
lib.mkIf osConfig.programs.sway.enable {
services.swayidle.enable = true;
programs.hyprlock.enable = true;
wayland.windowManager.sway =
let
term = "${pkgs.foot}/bin/foot";
filemanager = "${pkgs.nautilus}/bin/nautilus";
colors = {
lavender = "#babbf1";
black = "#000000";
};
inputs = {
kb = {
builtin = "1:1:AT_Translated_Set_2_keyboard";
keychron = "1452:591:Keychron_K4_Keychron_K4";
keychron_bt = "1452:591:Keychron_K4";
};
};
mkRegexList = list: "^(${(lib.strings.concatStringsSep "|" list)})$";
in
{
enable = true;
xwayland = true;
wrapperFeatures.gtk = true;
extraConfigEarly = ''
exec systemctl --user import-environment PATH && systemctl --user restart xdg-desktop-portal.service
'';
extraConfig = ''
titlebar_padding 1
floating_modifier Mod4 normal
bindgesture {
swipe:right workspace prev
swipe:left workspace next
swipe:up focus up
swipe:down focus down
}
workspace 1
font pango:monospace 0.001
'';
config = {
modifier = "Mod4";
bars = [ ];
#: Keybindings {{{
keybindings =
let
mod = config.wayland.windowManager.sway.config.modifier;
in
lib.mkOptionDefault {
"${mod}+p" = "exec ${pkgs.hyprlock}/bin/hyprlock";
"${mod}+Shift+p" = "exec rofi -show p -modi p:${pkgs.rofi-power-menu}/bin/rofi-power-menu";
# Reload the config file
"${mod}+Shift+c" = "reload";
# Kill the focused window
"${mod}+Shift+q" = "kill";
# Make focused window fullscreen
"${mod}+f" = "fullscreen";
# Start launcher
#"${mod}+d" = "exec rofi -config ${homeDirectory}/.config/rofi/config.rasi -show combi -automatic-save-to-history | xargs swaymsg exec --";
"${mod}+d" = "exec ${pkgs.fuzzel}/bin/fuzzel";
"${mod}+s" = "exec rofi -show clipboard -show-icons";
# Toggle the current focus between tiling and floating mode
"${mod}+Shift+space" = "floating toggle";
"${mod}+Return" = "exec ${term}";
"${mod}+e" = "exec ${filemanager}";
"${mod}+x" = "layout toggle tabbed split";
"${mod}+Control+Left" = "workspace prev";
"${mod}+Control+Right" = "workspace next";
"${mod}+n" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -t";
"--locked XF86MonBrightnessUp" = "exec --no-startup-id ${pkgs.brightnessctl}/bin/brightnessctl s +10%";
"--locked XF86MonBrightnessDown" = "exec --no-startup-id ${pkgs.brightnessctl}/bin/brightnessctl s 10%-";
"--locked XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5";
"--locked XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5";
"--locked XF86AudioMicMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer --default-source -m";
"--locked XF86AudioMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t";
"--locked XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"--locked XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"--locked XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"--locked XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"Print" = "exec ${pkgs.hyprshot}/bin/hyprshot -m region";
"${mod}+u" = "exec ${pkgs.hyprshot}/bin/hyprshot -m region";
"${mod}+Shift+u" = "exec ${pkgs.hyprshot}/bin/hyprshot --raw -m region | ${pkgs.satty}/bin/satty -f - --fullscreen";
#: Workspace movement {{{
"--input-device=${inputs.kb.builtin} ${mod}+ampersand" = "workspace number 1";
"--input-device=${inputs.kb.builtin} ${mod}+eacute" = "workspace number 2";
"--input-device=${inputs.kb.builtin} ${mod}+quotedbl" = "workspace number 3";
"--input-device=${inputs.kb.builtin} ${mod}+apostrophe" = "workspace number 4";
"--input-device=${inputs.kb.builtin} ${mod}+parenleft" = "workspace number 5";
"--input-device=${inputs.kb.builtin} ${mod}+minus" = "workspace number 6";
"--input-device=${inputs.kb.builtin} ${mod}+egrave" = "workspace number 7";
"--input-device=${inputs.kb.builtin} ${mod}+underscore" = "workspace number 8";
"--input-device=${inputs.kb.builtin} ${mod}+ccedilla" = "workspace number 9";
"--input-device=${inputs.kb.builtin} ${mod}+agrave" = "workspace number 10";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+ampersand" = "move container to workspace number 1";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+eacute" = "move container to workspace number 2";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+quotedbl" = "move container to workspace number 3";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+apostrophe" = "move container to workspace number 4";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+parenleft" = "move container to workspace number 5";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+minus" = "move container to workspace number 6";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+egrave" = "move container to workspace number 7";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+underscore" = "move container to workspace number 8";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+ccedilla" = "move container to workspace number 9";
"--input-device=${inputs.kb.builtin} ${mod}+Shift+agrave" = "move container to workspace number 10";
#: }}}
};
#: }}}
#: Startup {{{
startup = [
{ command = "${pkgs.nextcloud-client}/bin/nextcloud --background"; }
{ command = "${config.services.kdeconnect.package}/bin/kdeconnect-indicator"; }
{ command = "${pkgs.protonmail-bridge-gui}/bin/protonmail-bridge-gui --no-window"; }
];
#: }}}
assigns = {
"2" = [ { app_id = "firefox"; } ];
"3" = [ { app_id = "obsidian"; } ];
"4" = [
{ class = "discord"; }
{ app_id = "com.discordapp.Discord"; }
];
"5" = [ { app_id = "lollypop"; } ];
};
seat = {
"*" = {
xcursor_theme = "${config.home.pointerCursor.name} ${toString config.home.pointerCursor.size}";
keyboard_grouping = "none";
};
};
window = {
border = 3;
commands = [
{
command = "inhibit_idle fullscreen";
criteria = {
class = "^.*$";
app_id = "^.*$";
};
}
{
command = "floating enable";
criteria.app_id = mkRegexList [
"org.keepassxc.KeePassXC"
"xdg-desktop-portal-gtk"
"org.kde.polkit-kde-authentication-agent-1"
"com.nextcloud.desktopclient.nextcloud"
"org.kde.kdeconnect.daemon"
];
}
{
# Make it clear which window runs using xwayland
command = ''title_format "[XWayland] %title"'';
criteria.shell = "xwayland";
}
{
# Nextcloud closes when its not focused, thus moving the mouse over any other window will close it
command = "move position mouse";
criteria.app_id = "com.nextcloud.desktopclient.nextcloud";
}
];
};
terminal = "${term}";
colors = with colors; {
focused = {
border = lavender;
background = lavender;
text = black;
indicator = "#00d4ff";
childBorder = lavender;
};
};
gaps = {
inner = 5;
};
#: Input {{{
input = {
"*" = {
xkb_layout = "fr,us";
xkb_options = "grp:alt_shift_toggle,compose:caps";
};
"${inputs.kb.builtin}" = {
xkb_layout = "fr";
};
"${inputs.kb.keychron}" = {
xkb_layout = "us";
xkb_numlock = "enabled";
};
"${inputs.kb.keychron_bt}" = {
xkb_layout = "us";
xkb_numlock = "enabled";
};
"type:touchpad" = {
tap = "enabled";
natural_scroll = "enabled";
click_method = "clickfinger";
};
};
#: }}}
#: Output {{{
output = {
eDP-1 = {
scale = "2";
pos = "0 0";
res = "3840x2400";
adaptive_sync = "on";
};
};
#: }}}
};
};
}