dotfiles/home/common/i3-sway.nix

277 lines
8.2 KiB
Nix

{ options, config, pkgs, lib, ... }:
let
modifier = "Mod4";
commonConfig = {
modifier = modifier;
bars = [{
mode = "dock";
hiddenState = "hide";
position = "bottom";
workspaceButtons = true;
workspaceNumbers = true;
statusCommand = "${pkgs.i3status}/bin/i3status";
fonts = {
names = [ "Noto Sans Mono" ];
size = 16.0;
};
trayOutput = "*";
colors = {
background = "#24101a";
statusline = "#ebdadd";
separator = "#6b4d52";
focusedWorkspace = {
border = "#782a2a";
background = "#782a2a";
text = "#ebdadd";
};
activeWorkspace = {
border = "#913131";
background = "#913131";
text = "#ebdadd";
};
inactiveWorkspace = {
border = "#472222";
background = "#4d2525";
text = "#8c8284";
};
urgentWorkspace = {
border = "#734545";
background = "#993d3d";
text = "#ebdadd";
};
bindingMode = {
border = "#734545";
background = "#993d3d";
text = "#ebdadd";
};
};
}];
startup = [
{ command = "~/scripts/initwm.sh"; }
];
colors = {
focused = {
background = "#913131";
border = "#913131";
childBorder = "#b35656";
indicator = "#b35656";
text = "#ebdadd";
};
focusedInactive = {
background = "#782a2a";
border = "#782a2a";
childBorder = "#b32d2d";
indicator = "#b32d2d";
text = "#ebdadd";
};
placeholder = {
background = "#24101a";
border = "#24101a";
childBorder = "#24101a";
indicator = "#000000";
text = "#ebdadd";
};
unfocused = {
background = "#4d2525";
border = "#472222";
childBorder = "#4d2525";
indicator = "#661a1a";
text = "#8c8284";
};
urgent = {
background = "#993d3d";
border = "#734545";
childBorder = "#993d3d";
indicator = "#993d3d";
text = "#ebdadd";
};
};
floating.titlebar = true;
fonts = {
names = [ "Noto Sans" "Noto Emoji" "FontAwesome5Free" ];
size = 16.0;
};
gaps = {
smartBorders = "on";
smartGaps = true;
inner = 10;
};
menu = "${pkgs.bemenu}/bin/bemenu-run --no-overlap --prompt '>' --tb '#24101a' --tf '#ebbe5f' --fb '#24101a' --nb '#24101a70' --ab '#24101a70' --nf '#ebdadd' --af '#ebdadd' --hb '#394893' --hf '#e66e6e' --list 30 --prefix '*' --scrollbar autohide --fn 'Noto Sans Mono' --line-height 23 --sb '#394893' --sf '#ebdadd' --scb '#6b4d52' --scf '#e66e6e'";
terminal = if config.useAlacritty then "${pkgs.alacritty}/bin/alacritty" else "${pkgs.urxvt}/bin/urxvt";
window.hideEdgeBorders = "smart";
workspaceAutoBackAndForth = true;
};
genKeybindings = (default_options: kb:
kb // {
"${modifier}+Shift+g" = "floating toggle";
"${modifier}+g" = "focus mode_toggle";
}
// (lib.attrsets.filterAttrs
(k: v:
!(builtins.elem
k
["${modifier}+space" "${modifier}+Shift+space"]))
(lib.lists.head
(lib.lists.head
default_options.config.type.getSubModules)
.imports)
.options.keybindings.default)
);
in
{
# TODO merge with colors in gui.nix
imports = [ ./options.nix ./gui.nix ];
home.sessionVariables = {
BEMENU_OPTS = "--no-overlap --prompt '>' --tb '#24101a' --tf '#ebbe5f' --fb '#24101a' --nb '#24101a70' --ab '#24101a70' --nf '#ebdadd' --af '#ebdadd' --hb '#394893' --hf '#e66e6e' --list 30 --prefix '*' --scrollbar autohide --fn 'Noto Sans Mono' --line-height 23 --sb '#394893' --sf '#ebdadd' --scb '#6b4d52' --scf '#e66e6e'";
_JAVA_AWT_WM_NONREPARENTING = "1";
GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
SDL_IM_MODULE = "fcitx";
XIM_SERVERS = "fcitx";
INPUT_METHOD = "fcitx";
};
xdg.configFile."xdg-desktop-portal-wlr/config".source = (pkgs.formats.ini {}).generate "xdg-desktop-portal-wlr.ini" {
screencast = {
max_fps = 60;
chooser_type = "simple";
chooser-cmd = "''${pkgs.slurp}/bin/slurp -f %o -or";
# exec_before
# exec_after
};
};
systemd.user.services = lib.mkIf config.wayland.windowManager.sway.enable {
gammastep.Unit.ConditionEnvironment = "WAYLAND_DISPLAY";
};
programs.mako = {
enable = lib.mkDefault config.wayland.windowManager.sway.enable;
# ms
defaultTimeout = 7500;
font = "Noto Sans Mono 12";
};
programs.alacritty = {
enable = lib.mkDefault config.useAlacritty;
settings = {
window.opacity = 0.75;
font.normal.family = "Noto Sans Mono";
font.size = 16;
colors.primary.background = "#24101a";
colors.primary.foreground = "#ebdadd";
colors.normal = {
black = "#523b3f";
red = "#e66e6e";
green = "#8cbf73";
yellow = "#ebbe5f";
blue = "#5968b3";
magenta = "#a64999";
cyan = "#77c7c2";
white = "#f0e4e6";
};
colors.bright = {
black = "#6b4d52";
red = "#e66e6e";
green = "#8cbf73";
yellow = "#ebbe5f";
blue = "#5968b3";
magenta = "#a64999";
cyan = "#77c7c2";
white = "#f7f0f1";
};
};
};
# i use this instead of alacritty on old laptops
programs.urxvt = {
enable = lib.mkDefault (!config.useAlacritty);
keybindings = {
"Control-Alt-C" = "builtin-string:";
"Control-Alt-V" = "builtin-string:";
};
extraConfig = {
depth = 32;
inheritPixmap = true;
};
scroll.bar.enable = false;
fonts = [ "xft:Noto Sans Mono:pixelsize=16" "xft:Symbols Nerd Font Mono:pixelsize=16" ];
};
xsession.windowManager.i3 = {
config = let i3Config = {
keybindings = genKeybindings options.xsession.windowManager.i3 {};
}; in i3Config // commonConfig // i3Config;
};
home.file.".xinitrc".text = ''
if test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval $(dbus-launch --exit-with-session --sh-syntax)
fi
systemctl --user import-environment DISPLAY XAUTHORITY
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
exec i3
'';
xsession.initExtra = ''
setxkbmap -layout jp,ru -option caps:swapescape,compose:menu,grp:win_space_toggle
'';
home.packages = with pkgs; if config.wayland.windowManager.sway.enable then [
wl-clipboard
xdg-desktop-portal
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
] else [];
wayland.windowManager.sway = {
wrapperFeatures.gtk = true;
config = let swayConfig = {
window.commands = [
{ command = "floating enable; move workspace current";
criteria = {
app_id = "^org.keepassxc.KeePassXC$";
title = "^KeePassXC - (?:Browser |)?(?:Access Request|)$";
}; }
];
assigns = {
"3" = [{ app_id = "org.keepassxc.KeePassXC"; }];
};
keybindings = genKeybindings options.wayland.windowManager.sway (with pkgs.sway-contrib; {
"${modifier}+Print" = "exec ${grimshot}/bin/grimshot copy area";
"${modifier}+Mod1+Print" = "exec ${grimshot}/bin/grimshot copy window";
});
startup = [
{
always = true;
command = "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP";
}
{
command = "~/scripts/initwm.sh";
}
{
always = true;
command = "${pkgs.wl-clipboard}/bin/wl-paste -t text --watch ${pkgs.clipman}/bin/clipman store --no-persist";
}
];
output = {
"*" = {
bg = "~/var/wallpaper.jpg fill";
# improved screen latency, apparently
max_render_time = "2";
};
};
input = {
"*" = {
xkb_layout = "jp,ru";
xkb_options = "caps:swapescape,compose:menu,grp:win_space_toggle";
};
};
}; in swayConfig // commonConfig // swayConfig;
extraSessionCommands = ''
export BEMENU_BACKEND=wayland
export SDL_VIDEODRIVER=wayland
export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
export QT_QPA_PLATFORMTHEME=gnome
export MOZ_ENABLE_WAYLAND=1
export GDK_BACKEND=wayland
export GTK_USE_PORTAL=1
export XDG_CURRENT_DESKTOP=sway
'';
};
}