{
config,
lib,
options,
pkgs,
...
}:
{
options.desktop.windowManager = lib.mkOption { type = with lib.types; nullOr (enum [ "swayfx" ]); };
config = {
home.packages = with pkgs; [
grim
slurp
];
programs = {
swaylock = {
enable = true;
settings = {
color = "000000";
no-unlock-indicator = true;
};
};
waybar = {
enable = lib.mkDefault (config.desktop.windowManager == "swayfx");
settings = {
main = {
modules-left = [
"sway/workspaces"
"tray"
];
modules-center = [ "clock" ];
modules-right = [
"backlight"
"battery"
"network"
"wireplumber"
"cpu"
"memory"
];
backlight = {
format = "{icon}";
format-icons = [ "" "" ];
tooltip-format = "{percent}%";
};
battery = {
format = "{icon}";
format-critical = "{icon} ({capacity}%)";
format-icons = [ "" "" "" "" ];
format-time = "{H}h{m}m";
format-warning = "{icon} ({capacity}%)";
states = {
critical = 15;
warning = 25;
};
tooltip-format = "{time} remaining, {health}% battery health";
tooltip-format-critical = "plug yo shit in NOW!!";
};
cpu.format = "{avg_frequency} GHz";
clock = {
format = "{:%A, %b %d %Y - %H:%M %Z}";
# i am the time god. fear me.
timezones = [
"America/Toronto"
"America/Vancouver"
"America/Edmonton"
"America/Regina"
"America/Toronto" # duplicated so it appears in the list too
"America/Halifax"
"America/St_Johns"
"America/Sao_Paulo"
"Etc/UTC"
"Australia/Perth"
];
tooltip-format = "{tz_list}";
};
memory = {
format = "{used}/{total} GiB";
states = {
critical = 90;
warning = 70;
};
tooltip-format = "{percentage}% used";
};
network = {
format-disabled = "";
format-disconnected = "";
format-ethernet = " {ipaddr}/{cidr}";
format-icons = [ "" "" "" "" ];
format-wifi = "{icon}";
interval = 1;
tooltip-format = "{ifname} tx: {bandwidthUpBytes} rx: {bandwidthDownBytes}";
tooltip-format-wifi = ''
Network: {essid}
{ifname}: {ipaddr}/{cidr}
tx: {bandwidthUpBytes}
rx: {bandwidthDownBytes}
'';
};
position = "bottom";
"sway/workspaces" = {
all-outputs = true;
disable-scroll = true;
format = "";
persistent-workspaces = {
"1" = [ "DP-1" "eDP-1" ];
"2" = [ "DP-2" "eDP-1" ];
"3" = [];
"4" = [];
"5" = [];
"6" = [];
"7" = [];
"8" = [];
"9" = [];
};
};
wireplumber = {
format = "{icon}";
format-icons = [ "" "" "" ];
format-muted = "";
on-click = "wpctl set-mute @DEFAULT_SINK@ toggle";
tooltip-format = "{node_name} - {volume}%";
};
};
};
style = builtins.readFile ./waybar.css;
};
};
wayland.windowManager.sway =
if (config.desktop.windowManager == "swayfx") then
{
enable = lib.mkForce true;
package = null; # use the nixos module
config = {
bars = [ ];
bindswitches = {
"lid:off" = {
action = "output eDP-1 power on";
locked = true;
};
"lid:on" = {
action = "output eDP-1 power off";
locked = true;
};
};
colors = # rose pine theme
let
gold = "#f6c177";
hl3 = "#524f67";
love = "#eb6f92";
muted = "#6e6a86";
nothing = "#00000000";
overlay = "#26233a";
rose = "#ebbcba";
subtle = "#908caa";
text = "#e0def4";
in
{
focused = {
background = "${rose}";
border = "${rose}";
childBorder = "${rose}";
indicator = "${gold}";
text = "${hl3}";
};
focusedInactive = {
background = "${muted}";
border = "${nothing}";
childBorder = "${nothing}";
indicator = "${nothing}";
text = "${text}";
};
unfocused = {
background = "${overlay}";
border = "${nothing}";
childBorder = "${nothing}";
indicator = "${nothing}";
text = "${subtle}";
};
urgent = {
background = "${love}";
border = "${love}";
childBorder = "${love}";
indicator = "${love}";
text = "${text}";
};
};
floating.titlebar = false;
focus.followMouse = false;
fonts = {
names = [ "Fira Code" ];
size = 8.0;
};
gaps = {
inner = 4;
outer = 8;
};
input = {
"*" = {
accel_profile = "flat";
};
"type:touchpad" = {
drag = "enabled";
dwt = "enabled";
natural_scroll = "enabled";
tap = "enabled";
};
};
keybindings =
let
mod = config.wayland.windowManager.sway.config.modifier;
in
{
"${mod}+Return" = "exec foot";
"${mod}+Q" = "kill";
"${mod}+Alt+Q" = "exit";
"${mod}+V" = "splitt";
"${mod}+H" = "focus left";
"${mod}+J" = "focus down";
"${mod}+K" = "focus up";
"${mod}+L" = "focus right";
"${mod}+Shift+H" = "move left";
"${mod}+Shift+J" = "move down";
"${mod}+Shift+K" = "move up";
"${mod}+Shift+L" = "move right";
"${mod}+Minus" = "resize shrink width 5";
"${mod}+Shift+Equal" = "resize grow height 5";
"${mod}+Shift+Minus" = "resize shrink height 5";
"${mod}+Equal" = "resize grow width 5";
"${mod}+1" = "workspace 1";
"${mod}+2" = "workspace 2";
"${mod}+3" = "workspace 3";
"${mod}+4" = "workspace 4";
"${mod}+5" = "workspace 5";
"${mod}+6" = "workspace 6";
"${mod}+7" = "workspace 7";
"${mod}+8" = "workspace 8";
"${mod}+9" = "workspace 9";
"${mod}+Shift+1" = "move workspace 1";
"${mod}+Shift+2" = "move workspace 2";
"${mod}+Shift+3" = "move workspace 3";
"${mod}+Shift+4" = "move workspace 4";
"${mod}+Shift+5" = "move workspace 5";
"${mod}+Shift+6" = "move workspace 6";
"${mod}+Shift+7" = "move workspace 7";
"${mod}+Shift+8" = "move workspace 8";
"${mod}+Shift+9" = "move workspace 9";
"${mod}+F" = "floating toggle";
"${mod}+G" = "layout toggle split tabbed";
"${mod}+R" = "exec fuzzel";
"${mod}+Shift+S" = "exec grim -g \"$(slurp)\" ~/Pictures/screenshot.png";
"${mod}+Alt+L" = "exec swaylock";
"XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_SINK@ 5%+ -l 1";
"XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_SINK@ 5%- -l 1";
"XF86AudioMute" = "exec wpctl set-mute @DEFAULT_SINK@ toggle";
"XF86MonBrightnessUp" = "exec brightnessctl --class=backlight s +10%";
"XF86MonBrightnessDown" = "exec brightnessctl --class=backlight s 10%-";
"Shift+XF86MonBrightnessUp" = "exec brightnessctl --device=chromeos::kbd_backlight s +10%";
"Shift+XF86MonBrightnessDown" = "exec brightnessctl --device=chromeos::kbd_backlight s 10%-";
"XF86RFKill" = "exec rfkill toggle 1";
};
modes = { };
modifier = "Mod4";
output = {
"eDP-1" = {
background = "~/Pictures/blossoms.jpg fill";
mode = "2256x1504@60Hz";
position = "0 0";
scale = "1.5";
};
"DP-1" = {
background = "~/Pictures/blossoms.jpg fill";
mode = "1920x1080@165Hz";
position = "0 0";
};
"DP-2" = {
background = "~/Pictures/blossoms.jpg fill";
mode = "1920x1080@75Hz";
position = "1920 0";
};
};
window.titlebar = false;
workspaceOutputAssign = [
{
output = [ "DP-1" "eDP-1" ];
workspace = "1";
}
{
output = "DP-2";
workspace = "2";
}
];
};
# inactive windows cast no shadow to avoid rendering shadows on top of
# the active window
extraConfig = ''
blur enable
blur_xray enable
corner_radius 10
shadows enable
shadow_inactive_color #00000000
exec waybar
'';
}
else
{ };
};
}