179 lines
4.9 KiB
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
|
|
'';
|
|
};
|
|
};
|
|
}
|