{ pkgs, config, hostName, lib, ... }: let # execs lock = "${pkgs.swaylock}/bin/swaylock --daemonize"; term = "${pkgs.foot}/bin/foot"; dmenu = "${pkgs.rofi}/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 mako = { enable = true; settings = { "actionable=true" = { anchor = "top-left"; }; actions = true; anchor = "top-right"; background-color = color_f_bg; border-color = color_f_bg; border-radius = 0; default-timeout = 0; font = "${style_font} ${style_font_sz}"; height = 100; width = 300; icons = true; ignore-timeout = false; layer = "top"; margin = 10; markup = true; }; #end settings }; # end mako }; # 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