560 lines
15 KiB
Nix
560 lines
15 KiB
Nix
{ pkgs, config, hostName, lib, ... }:
|
|
let
|
|
# execs
|
|
lock = "${pkgs.swaylock}/bin/swaylock --daemonize";
|
|
term = "${pkgs.foot}/bin/foot";
|
|
dmenu = "${pkgs.rofi-wayland}/bin/rofi -show drun";
|
|
|
|
# keybinds
|
|
key_mod = "Mod4";
|
|
key_left = "Left";
|
|
key_right = "Right";
|
|
key_up = "Up";
|
|
key_down = "Down";
|
|
|
|
# style
|
|
style_font = "Inconsolata";
|
|
style_font_sz = "12";
|
|
style_font_bold = "${style_font}-Bold";
|
|
color_blue_1 = "#99c1f1";
|
|
color_blue_2 = "#62a0ea";
|
|
color_blue_3 = "#3584e4";
|
|
color_blue_4 = "#1c71d8";
|
|
color_blue_5 = "#1a5fb4";
|
|
color_green_1 = "#8ff0a4";
|
|
color_green_2 = "#57e389";
|
|
color_green_3 = "#33d17a";
|
|
color_green_4 = "#2ec27e";
|
|
color_green_5 = "#26a269";
|
|
color_yellow_1 = "#f9f06b";
|
|
color_yellow_2 = "#f8e45c";
|
|
color_yellow_3 = "#f6d32d";
|
|
color_yellow_4 = "#f5c211";
|
|
color_yellow_5 = "#e5a50a";
|
|
color_orange_1 = "#ffbe6f";
|
|
color_orange_2 = "#ffa348";
|
|
color_orange_3 = "#ff7800";
|
|
color_orange_4 = "#e66100";
|
|
color_orange_5 = "#c64600";
|
|
color_red_1 = "#f66151";
|
|
color_red_2 = "#ed333b";
|
|
color_red_3 = "#e01b24";
|
|
color_red_4 = "#c01c28";
|
|
color_red_5 = "#a51d2d";
|
|
color_purple_1 = "#dc8add";
|
|
color_purple_2 = "#c061cb";
|
|
color_purple_3 = "#9141ac";
|
|
color_purple_4 = "#813d9c";
|
|
color_purple_5 = "#613583";
|
|
color_brown_1 = "#cdab8f";
|
|
color_brown_2 = "#b5835a";
|
|
color_brown_3 = "#986a44";
|
|
color_brown_4 = "#865e3c";
|
|
color_brown_5 = "#63452c";
|
|
color_light_1 = "#ffffff";
|
|
color_light_2 = "#f6f5f4";
|
|
color_light_3 = "#d8d8d8";
|
|
color_light_4 = "#c0c0c0";
|
|
color_light_5 = "#9b9b9b";
|
|
color_dark_1 = "#757575";
|
|
color_dark_2 = "#666666";
|
|
color_dark_3 = "#494949";
|
|
color_dark_4 = "#333333";
|
|
color_dark_5 = "#000000";
|
|
color_f_bg = color_dark_3;
|
|
color_f_text = color_light_1;
|
|
color_uf_bg = color_dark_4;
|
|
color_uf_text = color_light_4;
|
|
color_alert_bg = color_red_5;
|
|
color_alert_text = color_light_1;
|
|
color_inv_bg = color_light_4;
|
|
color_inv_text = color_dark_5;
|
|
|
|
# other
|
|
display = status: "swaymsg 'output * power ${status}'";
|
|
in
|
|
{
|
|
wayland.windowManager.sway = {
|
|
enable = true;
|
|
wrapperFeatures.gtk = true; # Fixes common issues with GTK 3 apps
|
|
config = {
|
|
modifier = "${key_mod}";
|
|
bars = [{
|
|
command = "${pkgs.waybar}/bin/waybar";
|
|
}];
|
|
fonts = {
|
|
names = ["${style_font}"];
|
|
size = style_font_sz;
|
|
};
|
|
input = {
|
|
"type:touchpad" = {
|
|
dwt = "enabled";
|
|
tap = "enabled";
|
|
natural_scroll = "disabled";
|
|
middle_emulation = "enabled";
|
|
click_method = "clickfinger";
|
|
clickfinger_button_map = "lrm";
|
|
};
|
|
"type:mouse" = {
|
|
natural_scroll = "disabled";
|
|
};
|
|
"*" = {
|
|
xkb_layout = "se";
|
|
};
|
|
}; # end input
|
|
keybindings = {
|
|
# Basic
|
|
"${key_mod}+Return" = "exec ${term}";
|
|
"${key_mod}+d" = "exec ${dmenu}";
|
|
"${key_mod}+Shift+q" = "kill";
|
|
"${key_mod}+L" = "exec ${lock}";
|
|
#Screenshot region
|
|
"${key_mod}+Shift+s" = ''
|
|
bash -c '\
|
|
${pkgs.slurp}/bin/slurp | \
|
|
${pkgs.grim}/bin/grim -g - \
|
|
~/Pictures/Screenshots_${hostName}/$(date +"%Y-%m-%d-%H%M%S.png") | \
|
|
${pkgs.wl-clipboard}/bin/wl-copy -t image/png \
|
|
'
|
|
'';
|
|
# Workspaces
|
|
"${key_mod}+Tab" = "workspace next";
|
|
"${key_mod}+Shift+Tab" = "workspace prev";
|
|
|
|
"${key_mod}+1" = "workspace number 1";
|
|
"${key_mod}+2" = "workspace number 2";
|
|
"${key_mod}+3" = "workspace number 3";
|
|
"${key_mod}+4" = "workspace number 4";
|
|
"${key_mod}+5" = "workspace number 5";
|
|
"${key_mod}+6" = "workspace number 6";
|
|
"${key_mod}+7" = "workspace number 7";
|
|
"${key_mod}+8" = "workspace number 8";
|
|
"${key_mod}+9" = "workspace number 9";
|
|
|
|
"${key_mod}+Shift+period" = "move container to workspace next; workspace next";
|
|
"${key_mod}+Shift+comma" = "move container to workspace prev; workspace prev";
|
|
|
|
"${key_mod}+Shift+1" = "move container to workspace number 1; workspace 1";
|
|
"${key_mod}+Shift+2" = "move container to workspace number 2; workspace 2";
|
|
"${key_mod}+Shift+3" = "move container to workspace number 3; workspace 3";
|
|
"${key_mod}+Shift+4" = "move container to workspace number 4; workspace 4";
|
|
"${key_mod}+Shift+5" = "move container to workspace number 5; workspace 5";
|
|
"${key_mod}+Shift+6" = "move container to workspace number 6; workspace 6";
|
|
"${key_mod}+Shift+7" = "move container to workspace number 7; workspace 7";
|
|
"${key_mod}+Shift+8" = "move container to workspace number 8; workspace 8";
|
|
"${key_mod}+Shift+9" = "move container to workspace number 9; workspace 9";
|
|
|
|
# Focus
|
|
"${key_mod}+${key_left}" = "focus left";
|
|
"${key_mod}+${key_down}" = "focus down";
|
|
"${key_mod}+${key_up}" = "focus up";
|
|
"${key_mod}+${key_right}" = "focus right";
|
|
|
|
"${key_mod}+Ctrl+${key_left}" = "move workspace to output left";
|
|
"${key_mod}+Ctrl+${key_down}" = "move workspace to output down";
|
|
"${key_mod}+Ctrl+${key_up}" = "move workspace to output up";
|
|
"${key_mod}+Ctrl+${key_right}" = "move workspace to output right";
|
|
|
|
"${key_mod}+Shift+${key_left}" = "move left";
|
|
"${key_mod}+Shift+${key_down}" = "move down";
|
|
"${key_mod}+Shift+${key_up}" = "move up";
|
|
"${key_mod}+Shift+${key_right}" = "move right";
|
|
|
|
# System
|
|
"XF86AudioRaiseVolume" = "exec 'pactl set-sink-volume @DEFAULT_SINK@ +1%'";
|
|
"XF86AudioLowerVolume" = "exec 'pactl set-sink-volume @DEFAULT_SINK@ -1%'";
|
|
"XF86AudioMute" = "exec 'pactl set-sink-mute @DEFAULT_SINK@ toggle'";
|
|
"XF86MonBrightnessUp" = "exec ${pkgs.light}/bin/light -A 10";
|
|
"XF86MonBrightnessDown" = "exec ${pkgs.light}/bin/light -U 10";
|
|
}; # end keybindings
|
|
window = {
|
|
titlebar = false;
|
|
};
|
|
colors = {
|
|
background = color_dark_5;
|
|
focused = {
|
|
border = color_f_bg;
|
|
background = color_f_bg;
|
|
text = color_light_1;
|
|
indicator = color_f_bg;
|
|
childBorder = color_f_bg;
|
|
};
|
|
focusedInactive = {
|
|
border = color_f_bg;
|
|
background = color_f_bg;
|
|
text = color_light_1;
|
|
indicator = color_f_bg;
|
|
childBorder = color_f_bg;
|
|
};
|
|
unfocused = {
|
|
border = color_uf_bg;
|
|
background = color_uf_bg;
|
|
text = color_uf_text;
|
|
indicator = color_uf_bg;
|
|
childBorder = color_uf_bg;
|
|
};
|
|
urgent = {
|
|
border = color_alert_bg;
|
|
background = color_alert_bg;
|
|
text = color_alert_text;
|
|
indicator = color_alert_bg;
|
|
childBorder = color_alert_bg;
|
|
};
|
|
placeholder = {
|
|
border = color_dark_3;
|
|
background = color_dark_3;
|
|
text = color_light_4;
|
|
indicator = color_dark_3;
|
|
childBorder = color_dark_3;
|
|
};
|
|
}; # end colors
|
|
};
|
|
};
|
|
services = {
|
|
swayidle = {
|
|
enable = true;
|
|
timeouts = [
|
|
{
|
|
timeout = 120;
|
|
command = "${pkgs.libnotify}/bin/notify-send 'Locking in 5 seconds' -t 5000";
|
|
}
|
|
{
|
|
timeout = 125;
|
|
command = lock;
|
|
}
|
|
{
|
|
timeout = 125;
|
|
command = display "off";
|
|
resumeCommand = display "on";
|
|
}
|
|
{
|
|
timeout = 600;
|
|
command = "${pkgs.systemd}/bin/systemctl suspend";
|
|
}
|
|
]; # end timeouts
|
|
events = [
|
|
{
|
|
event = "before-sleep";
|
|
command = (display "off") + "; " + lock;
|
|
}
|
|
{
|
|
event = "after-resume";
|
|
command = display "on";
|
|
}
|
|
{
|
|
event = "lock";
|
|
command = (display "off") + "; " + lock;
|
|
}
|
|
{
|
|
event = "unlock";
|
|
command = display "on";
|
|
}
|
|
]; # end events
|
|
}; # end swayidle
|
|
}; # end services
|
|
programs = {
|
|
rofi = {
|
|
enable = true;
|
|
font = "${style_font} ${style_font_sz}";
|
|
theme = let
|
|
inherit (config.lib.formats.rasi) mkLiteral;
|
|
in {
|
|
"*" = {
|
|
bg = mkLiteral color_uf_bg;
|
|
fg = mkLiteral color_f_text;
|
|
ac = mkLiteral color_f_bg;
|
|
background-color = mkLiteral "transparent";
|
|
};
|
|
|
|
"#window" = {
|
|
background-color = mkLiteral "@bg";
|
|
location = mkLiteral "center";
|
|
width = mkLiteral "30%";
|
|
};
|
|
|
|
"#prompt" = {
|
|
text-color = mkLiteral "@fg";
|
|
};
|
|
|
|
"#textbox-prompt-colon" = {
|
|
text-color = mkLiteral "@fg";
|
|
};
|
|
|
|
"#entry" = {
|
|
text-color = mkLiteral "@fg";
|
|
blink = mkLiteral "true";
|
|
};
|
|
|
|
"#inputbar" = {
|
|
children = mkLiteral "[ prompt, entry ]";
|
|
text-color = mkLiteral "@fg";
|
|
padding = mkLiteral "5px";
|
|
};
|
|
|
|
"#listview" = {
|
|
columns = mkLiteral "1";
|
|
lines = mkLiteral "6";
|
|
cycle = mkLiteral "true";
|
|
dynamic = mkLiteral "true";
|
|
};
|
|
|
|
"#mainbox" = {
|
|
border = mkLiteral "3px";
|
|
border-color = mkLiteral "@ac";
|
|
children = mkLiteral "[ inputbar, listview ]";
|
|
padding = mkLiteral "10px";
|
|
};
|
|
|
|
"#element" = {
|
|
text-color = mkLiteral "@fg";
|
|
padding = mkLiteral "5px";
|
|
};
|
|
|
|
"#element-icon" = {
|
|
text-color = mkLiteral "@fg";
|
|
size = mkLiteral "32px";
|
|
};
|
|
|
|
"#element-text" = {
|
|
text-color = mkLiteral "@fg";
|
|
padding = mkLiteral "5px";
|
|
};
|
|
|
|
"#element selected" = {
|
|
border = mkLiteral "3px";
|
|
border-color = mkLiteral "@ac";
|
|
text-color = mkLiteral "@fg";
|
|
background-color = mkLiteral "@ac";
|
|
};
|
|
}; # end theme
|
|
}; # end rofi
|
|
waybar = {
|
|
enable = true;
|
|
settings = {
|
|
mainBar = {
|
|
layer = "bottom";
|
|
position = "top";
|
|
height = 32;
|
|
spacing = 0;
|
|
modules-left = [
|
|
"sway/workspaces"
|
|
"sway/window"
|
|
];
|
|
modules-center = [
|
|
"clock"
|
|
];
|
|
modules-right = [
|
|
"network"
|
|
"pulseaudio"
|
|
"battery"
|
|
"tray"
|
|
];
|
|
"sway/workspaces" = {
|
|
on-click = "activate";
|
|
sort-by-number = true;
|
|
format = "{value}";
|
|
};
|
|
"sway/window" = {
|
|
max-length = 64;
|
|
};
|
|
"tray" = {
|
|
icon-size = 13;
|
|
spacing = 8;
|
|
};
|
|
"clock" = {
|
|
interval = 60;
|
|
tooltip = false;
|
|
format = "{:%R}";
|
|
format-alt = "{:%a, %Y-%m-%d}";
|
|
};
|
|
"battery" = {
|
|
states = {
|
|
critical = 10;
|
|
warning = 20;
|
|
good = 90;
|
|
full = 100;
|
|
over = 101;
|
|
};
|
|
interval = 30;
|
|
format = "Bat {capacity}%";
|
|
format-charging = "Bat {capacity}%";
|
|
format-plugged = "Bat {capacity}%";
|
|
};
|
|
"network" = {
|
|
format-wifi = "WiFi up";
|
|
format-ethernet = "eth up";
|
|
tooltip-format = "{ifname} = {ipaddr}/{cidr}";
|
|
format-linked = "{ifname} (no ip)";
|
|
format-disconnected = "No network";
|
|
format-alt = "{essid}: {ipaddr}";
|
|
interval = 10;
|
|
};
|
|
"pulseaudio" = {
|
|
# "scroll-step" = 1; # %; can be a float
|
|
format = "Sound: {volume}%";
|
|
format-muted = "Sound Muted";
|
|
};
|
|
}; # end mainbar
|
|
}; # end settings
|
|
style = ''
|
|
* {
|
|
font-family: ${style_font_bold};
|
|
font-size: ${style_font_sz}pt;
|
|
}
|
|
|
|
window#waybar {
|
|
color: ${color_f_text};
|
|
background-color: ${color_uf_bg};
|
|
transition-property: background-color;
|
|
transition-duration: .5s;
|
|
}
|
|
|
|
window#waybar.hidden {
|
|
opacity: 0.2;
|
|
}
|
|
|
|
/*
|
|
window#waybar.empty {
|
|
background-color: transparent;
|
|
}
|
|
window#waybar.solo {
|
|
background-color: ${color_purple_1};
|
|
}
|
|
*/
|
|
|
|
button {
|
|
box-shadow: inset 0 -8px transparent;
|
|
border: none;
|
|
border-radius: 0;
|
|
}
|
|
|
|
button:hover {
|
|
color: ${color_f_text};
|
|
background: ${color_f_bg};
|
|
}
|
|
|
|
#workspaces button {
|
|
color: ${color_uf_text};
|
|
background-color: ${color_uf_bg};
|
|
}
|
|
|
|
#workspaces button:hover {
|
|
color: ${color_f_text};
|
|
background: ${color_f_bg};
|
|
}
|
|
|
|
#workspaces button.focused {
|
|
color: ${color_inv_text};
|
|
background-color: ${color_inv_bg};
|
|
}
|
|
|
|
#workspaces button.urgent {
|
|
color: ${color_alert_text};
|
|
background-color: ${color_alert_bg};
|
|
}
|
|
|
|
#battery,
|
|
#clock,
|
|
#network,
|
|
#pulseaudio,
|
|
#tray,
|
|
|
|
#window,
|
|
#workspaces {
|
|
margin: 0 2px;
|
|
}
|
|
|
|
.modules-left > widget:first-child > #workspaces {
|
|
margin-left: 0;
|
|
}
|
|
|
|
.modules-right > widget:last-child > #workspaces {
|
|
margin-right: 0;
|
|
}
|
|
|
|
#battery {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
|
|
#battery.critical.discharging {
|
|
animation: blink 1s infinite;
|
|
color: ${color_red_2};
|
|
}
|
|
|
|
#battery.warning.discharging {
|
|
animation: blink 1s infinite;
|
|
color: ${color_orange_2};
|
|
}
|
|
|
|
#battery.good {
|
|
animation: none;
|
|
color: ${color_f_text};
|
|
}
|
|
|
|
#battery.full.charging {
|
|
color: ${color_green_2};
|
|
}
|
|
|
|
#battery.over.charging {
|
|
color: ${color_green_2};
|
|
}
|
|
|
|
#clock {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
|
|
label:focus {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
|
|
#network {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
|
|
#network.disconnected {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
|
|
#pulseaudio {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
|
|
#pulseaudio.muted {
|
|
color: ${color_f_text};
|
|
background-color: transparent;
|
|
}
|
|
#tray {
|
|
background-color: transparent;
|
|
border-bottom: 3px solid ${color_f_text};
|
|
}
|
|
|
|
#tray > .passive {
|
|
-gtk-icon-effect: dim;
|
|
}
|
|
|
|
#tray > .needs-attention {
|
|
-gtk-icon-effect: highlight;
|
|
background-color: transparent;
|
|
}
|
|
''; # end style
|
|
}; # end waybar
|
|
swaylock = {
|
|
enable = true;
|
|
settings = {
|
|
color = color_uf_bg;
|
|
font = style_font;
|
|
font-size = style_font_sz;
|
|
ignore-empty-password = true;
|
|
indicator-caps-lock = true;
|
|
indicator-radius = 50;
|
|
indicator-thickness = 10;
|
|
}; # end settings
|
|
}; # end swaylock
|
|
}; # end programs
|
|
} # end file
|