nixos-config/home/x/i3.nix

179 lines
4.9 KiB
Nix

{ config, lib, pkgs, ... }:
let
isEnabled = config.my.home.x.enable;
myTerminal =
# FIXME: fix when terminal is setup in home
# if config.my.home.terminal.program != null
if true
then "alacritty"
else "i3-sensible-terminal";
alt = "Mod1"; # `Alt` key
modifier = "Mod4"; # `Super` key
logoutMode = "[L]ogout, [S]uspend, [P]oweroff, [R]eboot";
# colors
colorBg = "#282828";
colorRed = "#cc241d";
colorGreen = "#98971a";
colorYellow = "#d79921";
colorBlue = "#458588";
colorPurple = "#b16286";
colorAqua = "#689d68";
colorGray = "#a89984";
colorDarkGray = "#1d2021";
colorWhite = "#ffffff";
in
{
config = lib.mkIf isEnabled {
my.home = {
flameshot.enable = true;
};
home.packages = with pkgs; [
betterlockscreen
];
xsession.windowManager.i3 = {
enable = true;
config = {
inherit modifier;
bars =
let
barConfigPath =
config.xdg.configFile."i3status-rust/config-top.toml".target;
in
[
{
statusCommand = "i3status-rs ${barConfigPath}";
position = "top";
fonts = [ "DejaVuSansMono" "FontAwesome5Free 9" ];
colors = {
background = colorBg;
statusline = colorYellow;
focusedWorkspace = {
border = colorAqua;
background = colorAqua;
text = colorDarkGray;
};
inactiveWorkspace = {
border = colorDarkGray;
background = colorDarkGray;
text = colorYellow;
};
activeWorkspace = {
border = colorAqua;
background = colorDarkGray;
text = colorYellow;
};
urgentWorkspace = {
border = colorRed;
background = colorRed;
text = colorBg;
};
separator = colorRed;
};
}
];
colors = {
focused = {
border = colorBlue;
background = colorBlue;
text = colorDarkGray;
indicator = colorPurple;
childBorder = colorDarkGray;
};
focusedInactive = {
border = colorDarkGray;
background = colorDarkGray;
text = colorYellow;
indicator = colorPurple;
childBorder = colorDarkGray;
};
unfocused = {
border = colorDarkGray;
background = colorDarkGray;
text = colorYellow;
indicator = colorPurple;
childBorder = colorDarkGray;
};
urgent = {
border = colorRed;
background = colorRed;
text = colorWhite;
indicator = colorRed;
childBorder = colorRed;
};
};
focus = {
followMouse = true;
mouseWarping = true;
};
fonts = [
"DejaVu Sans Mono 8"
];
keybindings = lib.mkOptionDefault {
"${modifier}+Shift+e" = ''mode "${logoutMode}"'';
"${modifier}+i" = "exec emacsclient -c";
# Volume handling
"XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%";
"XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%";
"XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle";
"XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle";
"${modifier}+l" = "exec --no-startup-id betterlockscreen --lock";
};
modes =
let
makeModeBindings = attrs: attrs // {
"Escape" = "mode default";
"Return" = "mode default";
};
in
lib.mkOptionDefault {
"${logoutMode}" = makeModeBindings {
"l" = "exec --no-startup-id i3-msg exit, mode default";
"s" = "exec --no-startup-id betterlockscreen --suspend, mode default";
"p" = "exec --no-startup-id systemctl poweroff, mode default";
"r" = "exec --no-startup-id systemctl reboot, mode default";
};
};
startup = [
# FIXME: make it conditional on "nvidia" being part of video drivers
{
command = "nvidia-settings -a '[gpu:0]/GPUPowerMizerMode=1'";
notification = false;
}
];
terminal = myTerminal;
assigns = {
"10" = [
{ class = "Slack"; }
];
};
};
# FIXME: integrate in config when it doesn't use deprecated new_window
extraConfig = ''
default_border pixel
'';
};
};
}