diff --git a/modules/gui/sway.nix b/modules/gui/sway.nix index a109bb1f..d3a91a9e 100644 --- a/modules/gui/sway.nix +++ b/modules/gui/sway.nix @@ -1,9 +1,77 @@ -{ pkgs, lib, config, ... }: +{ config, lib, pkgs, sane-lib, ... }: # docs: https://nixos.wiki/wiki/Sway with lib; let cfg = config.sane.gui.sway; + # docs: https://github.com/Alexays/Waybar/wiki/Configuration + # format specifiers: https://fmt.dev/latest/syntax.html#syntax + waybar-config = [ + { # TOP BAR + layer = "top"; + height = 40; + modules-left = ["sway/workspaces" "sway/mode"]; + modules-center = ["sway/window"]; + modules-right = ["custom/mediaplayer" "clock" "battery" "cpu" "network"]; + "sway/window" = { + max-length = 50; + }; + # include song artist/title. source: https://www.reddit.com/r/swaywm/comments/ni0vso/waybar_spotify_tracktitle/ + "custom/mediaplayer" = { + exec = pkgs.writeShellScript "waybar-mediaplayer" '' + player_status=$(${pkgs.playerctl}/bin/playerctl status 2> /dev/null) + if [ "$player_status" = "Playing" ]; then + echo "$(${pkgs.playerctl}/bin/playerctl metadata artist) - $(${pkgs.playerctl}/bin/playerctl metadata title)" + elif [ "$player_status" = "Paused" ]; then + echo " $(${pkgs.playerctl}/bin/playerctl metadata artist) - $(${pkgs.playerctl}/bin/playerctl metadata title)" + fi + ''; + interval = 2; + format = "{} "; + # return-type = "json"; + on-click = "${pkgs.playerctl}/bin/playerctl play-pause"; + on-scroll-up = "${pkgs.playerctl}/bin/playerctl next"; + on-scroll-down = "${pkgs.playerctl}/bin/playerctl previous"; + }; + network = { + # docs: https://github.com/Alexays/Waybar/blob/master/man/waybar-network.5.scd + interval = 2; + max-length = 40; + # custom :> format specifier explained here: https://github.com/Alexays/Waybar/pull/472 + format-ethernet = " {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; + tooltip-format-ethernet = "{ifname} {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; + + format-wifi = "{ifname} ({signalStrength}%) {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; + tooltip-format-wifi = "{essid} ({signalStrength}%) {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; + + format-disconnected = ""; + }; + cpu = { + format = " {usage:2}%"; + tooltip = false; + }; + battery = { + states = { + good = 95; + warning = 30; + critical = 10; + }; + format = "{icon} {capacity}%"; + format-icons = [ + "" + "" + "" + "" + "" + ]; + }; + clock = { + format-alt = "{:%a, %d. %b %H:%M}"; + }; + } + ]; + # waybar-config-text = lib.generators.toJSON {} waybar-config; + waybar-config-text = (pkgs.formats.json {}).generate "waybar-config.json" waybar-config; in { options = { @@ -16,18 +84,13 @@ in launch sway via a greeter (like greetd's gtkgreet). sway is usable without a greeter, but skipping the greeter means no PAM session. ''; - default = true; + default = false; type = types.bool; }; }; config = mkIf cfg.enable { sane.gui.enable = true; - programs.sway = { - # we configure sway with home-manager, but this enable gets us e.g. opengl and fonts - enable = true; - }; - # instead of using `services.greetd`, can instead use SDDM by swapping in these lines. # services.xserver.displayManager.sddm.enable = true; # services.xserver.enable = true; @@ -36,6 +99,9 @@ in # `-l` activates layer-shell mode. exec "${pkgs.greetd.gtkgreet}/bin/gtkgreet -l -c sway" ''; + sway-launcher = pkgs.writeShellScript "sway-launcher" '' + ${pkgs.sway}/bin/sway --debug > /home/colin/.sway.log 2>&1 + ''; default_session = { "01" = { # greeter session config @@ -47,7 +113,7 @@ in }; "0" = { # no greeter - command = "${pkgs.sway}/bin/sway"; + command = sway-launcher; user = "colin"; }; }; @@ -90,14 +156,18 @@ in # a system service can't depend on a user service, so just launch it at graphical-session systemd.user.services."pipewire".wantedBy = [ "graphical-session.target" ]; - sane.home-manager.windowManager.sway = { + programs.sway = { enable = true; wrapperFeatures.gtk = true; - config = let + }; + sane.fs."/home/colin/.config/sway/config" = + let fuzzel = "${pkgs.fuzzel}/bin/fuzzel"; sed = "${pkgs.gnused}/bin/sed"; wtype = "${pkgs.wtype}/bin/wtype"; kitty = "${pkgs.kitty}/bin/kitty"; + launcher-cmd = fuzzel; + terminal-cmd = kitty; lock-cmd = "${pkgs.swaylock}/bin/swaylock --indicator-idle-visible --indicator-radius 100 --indicator-thickness 30"; vol-up-cmd = "${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5"; vol-down-cmd = "${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5"; @@ -114,525 +184,436 @@ in snip-cmd = "${wtype} $(${list-snips} | ${fuzzel} -d -i -w 60 | ${strip-comments})"; # TODO: next splatmoji release should allow `-s none` to disable skin tones emoji-cmd = "${pkgs.splatmoji}/bin/splatmoji -s medium-light type"; - in rec { - terminal = kitty; - window = { - border = 3; # pixel boundary between windows - hideEdgeBorders = "smart"; # don't show border if only window on workspace - }; - output = { - ### DESKTOP - "Samsung Electric Company S22C300 0x00007F35" = { pos = "0,0"; res = "1920x1080"; }; - "Goldstar Company Ltd LG ULTRAWIDE 0x00004E94" = { pos = "1920,0"; res = "3440x1440"; }; + in sane-lib.fs.wantedText '' + ### default font + font pango:monospace 8 - ### LAPTOP - # shen TV - "Pioneer Electronic Corporation VSX-524 0x00000101" = { pos = "0,0"; res = "1920x1080"; }; - # internal display - "Unknown 0x0637 0x00000000" = { pos = "1920,0"; res = "1920x1080"; }; - }; + ### pixel boundary between windows + default_border pixel 3 + default_floating_border pixel 2 + hide_edge_borders smart - # defaults; required for keybindings decl. - modifier = "Mod1"; - # list of launchers: https://www.reddit.com/r/swaywm/comments/v39hxa/your_favorite_launcher/ - # menu = "${pkgs.dmenu}/bin/dmenu_path"; - menu = fuzzel; - # menu = "${pkgs.albert}/bin/albert"; - left = "h"; - down = "j"; - up = "k"; - right = "l"; - # XKB key names: https://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap - keybindings = { - "${modifier}+Return" = "exec ${terminal}"; - "${modifier}+Shift+q" = "kill"; - "${modifier}+d" = "exec ${menu}"; - "${modifier}+s" = "exec ${snip-cmd}"; - "${modifier}+l" = "exec ${lock-cmd}"; - "${modifier}+slash" = "exec ${emoji-cmd}"; + ### defaults + focus_wrapping no + focus_follows_mouse yes + focus_on_window_activation smart + mouse_warping output + workspace_layout default + workspace_auto_back_and_forth no - # "${modifier}+${left}" = "focus left"; - # "${modifier}+${down}" = "focus down"; - # "${modifier}+${up}" = "focus up"; - # "${modifier}+${right}" = "focus right"; + ### default colors (#border #background #text #indicator #childBorder) + client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 + client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a + client.unfocused #333333 #222222 #888888 #292d2e #222222 + client.urgent #2f343a #900000 #ffffff #900000 #900000 + client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c + client.background #ffffff - "${modifier}+Left" = "focus left"; - "${modifier}+Down" = "focus down"; - "${modifier}+Up" = "focus up"; - "${modifier}+Right" = "focus right"; + ### key bindings + floating_modifier Mod1 + ## media keys + bindsym XF86AudioRaiseVolume exec ${vol-up-cmd} + bindsym XF86AudioLowerVolume exec ${vol-down-cmd} + bindsym Mod1+Page_Up exec ${vol-up-cmd} + bindsym Mod1+Page_Down exec ${vol-down-cmd} + bindsym XF86AudioMute exec ${mute-cmd} + bindsym XF86MonBrightnessUp exec ${brightness-up-cmd} + bindsym XF86MonBrightnessDown exec ${brightness-down-cmd} + ## special functions + bindsym Mod1+Print exec ${screenshot-cmd} + bindsym Mod1+l exec ${lock-cmd} + bindsym Mod1+s exec ${snip-cmd} + bindsym Mod1+slash exec ${emoji-cmd} + bindsym Mod1+d exec ${launcher-cmd} + bindsym Mod1+Return exec ${terminal-cmd} + bindsym Mod1+Shift+q kill + bindsym Mod1+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' + bindsym Mod1+Shift+c reload + ## layout + bindsym Mod1+b splith + bindsym Mod1+v splitv + bindsym Mod1+f fullscreen toggle + bindsym Mod1+a focus parent + bindsym Mod1+w layout tabbed + bindsym Mod1+e layout toggle split + bindsym Mod1+Shift+space floating toggle + bindsym Mod1+space focus mode_toggle + bindsym Mod1+r mode resize + ## movement + bindsym Mod1+Up focus up + bindsym Mod1+Down focus down + bindsym Mod1+Left focus left + bindsym Mod1+Right focus right + bindsym Mod1+Shift+Up move up + bindsym Mod1+Shift+Down move down + bindsym Mod1+Shift+Left move left + bindsym Mod1+Shift+Right move right + ## workspaces + bindsym Mod1+1 workspace number 1 + bindsym Mod1+2 workspace number 2 + bindsym Mod1+3 workspace number 3 + bindsym Mod1+4 workspace number 4 + bindsym Mod1+5 workspace number 5 + bindsym Mod1+6 workspace number 6 + bindsym Mod1+7 workspace number 7 + bindsym Mod1+8 workspace number 8 + bindsym Mod1+9 workspace number 9 + bindsym Mod1+Shift+1 move container to workspace number 1 + bindsym Mod1+Shift+2 move container to workspace number 2 + bindsym Mod1+Shift+3 move container to workspace number 3 + bindsym Mod1+Shift+4 move container to workspace number 4 + bindsym Mod1+Shift+5 move container to workspace number 5 + bindsym Mod1+Shift+6 move container to workspace number 6 + bindsym Mod1+Shift+7 move container to workspace number 7 + bindsym Mod1+Shift+8 move container to workspace number 8 + bindsym Mod1+Shift+9 move container to workspace number 9 + ## "scratchpad" = ?? + bindsym Mod1+Shift+minus move scratchpad + bindsym Mod1+minus scratchpad show - # "${modifier}+Shift+${left}" = "move left"; - # "${modifier}+Shift+${down}" = "move down"; - # "${modifier}+Shift+${up}" = "move up"; - # "${modifier}+Shift+${right}" = "move right"; - - "${modifier}+Shift+Left" = "move left"; - "${modifier}+Shift+Down" = "move down"; - "${modifier}+Shift+Up" = "move up"; - "${modifier}+Shift+Right" = "move right"; - - "${modifier}+b" = "splith"; - "${modifier}+v" = "splitv"; - "${modifier}+f" = "fullscreen toggle"; - "${modifier}+a" = "focus parent"; - - # "${modifier}+s" = "layout stacking"; - "${modifier}+w" = "layout tabbed"; - "${modifier}+e" = "layout toggle split"; - - "${modifier}+Shift+space" = "floating toggle"; - "${modifier}+space" = "focus mode_toggle"; - - "${modifier}+1" = "workspace number 1"; - "${modifier}+2" = "workspace number 2"; - "${modifier}+3" = "workspace number 3"; - "${modifier}+4" = "workspace number 4"; - "${modifier}+5" = "workspace number 5"; - "${modifier}+6" = "workspace number 6"; - "${modifier}+7" = "workspace number 7"; - "${modifier}+8" = "workspace number 8"; - "${modifier}+9" = "workspace number 9"; - - "${modifier}+Shift+1" = - "move container to workspace number 1"; - "${modifier}+Shift+2" = - "move container to workspace number 2"; - "${modifier}+Shift+3" = - "move container to workspace number 3"; - "${modifier}+Shift+4" = - "move container to workspace number 4"; - "${modifier}+Shift+5" = - "move container to workspace number 5"; - "${modifier}+Shift+6" = - "move container to workspace number 6"; - "${modifier}+Shift+7" = - "move container to workspace number 7"; - "${modifier}+Shift+8" = - "move container to workspace number 8"; - "${modifier}+Shift+9" = - "move container to workspace number 9"; - - "${modifier}+Shift+minus" = "move scratchpad"; - "${modifier}+minus" = "scratchpad show"; - - "${modifier}+Shift+c" = "reload"; - "${modifier}+Shift+e" = - "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'"; - - "${modifier}+r" = "mode resize"; - - # media keys - XF86MonBrightnessDown = "exec ${brightness-down-cmd}"; - XF86MonBrightnessUp = "exec ${brightness-up-cmd}"; - - # TODO: hook into a visual prompt to display volume? - XF86AudioRaiseVolume = "exec ${vol-up-cmd}"; - XF86AudioLowerVolume = "exec ${vol-down-cmd}"; - XF86AudioMute = "exec ${mute-cmd}"; - - "${modifier}+Page_Up" = "exec ${vol-up-cmd}"; - "${modifier}+Page_Down" = "exec ${vol-down-cmd}"; - - "${modifier}+Print" = "exec ${screenshot-cmd}"; - }; - - # mostly defaults: - bars = [{ - mode = "dock"; - hiddenState = "hide"; - position = "top"; - command = "${pkgs.waybar}/bin/waybar"; - workspaceButtons = true; - workspaceNumbers = true; - statusCommand = "${pkgs.i3status}/bin/i3status"; - fonts = { - # names = [ "monospace" "Noto Color Emoji" ]; - # size = 8.0; - # names = [ "Font Awesome 6 Free" "DejaVu Sans" "Hack" ]; - # names = with config.fonts.fontconfig.defaultFonts; (emoji ++ monospace ++ serif ++ sansSerif); - names = with config.fonts.fontconfig.defaultFonts; (monospace ++ emoji); - size = 24.0; - }; - trayOutput = "primary"; - colors = { - background = "#000000"; - statusline = "#ffffff"; - separator = "#666666"; - focusedWorkspace = { - border = "#4c7899"; - background = "#285577"; - text = "#ffffff"; - }; - activeWorkspace = { - border = "#333333"; - background = "#5f676a"; - text = "#ffffff"; - }; - inactiveWorkspace = { - border = "#333333"; - background = "#222222"; - text = "#888888"; - }; - urgentWorkspace = { - border = "#2f343a"; - background = "#900000"; - text = "#ffffff"; - }; - bindingMode = { - border = "#2f343a"; - background = "#900000"; - text = "#ffffff"; - }; - }; - }]; - }; - }; - - sane.home-manager.programs.waybar = { - enable = true; - # docs: https://github.com/Alexays/Waybar/wiki/Configuration - # format specifiers: https://fmt.dev/latest/syntax.html#syntax - settings = { - mainBar = { - layer = "top"; - height = 40; - modules-left = ["sway/workspaces" "sway/mode"]; - modules-center = ["sway/window"]; - modules-right = ["custom/mediaplayer" "clock" "battery" "cpu" "network"]; - "sway/window" = { - max-length = 50; - }; - # include song artist/title. source: https://www.reddit.com/r/swaywm/comments/ni0vso/waybar_spotify_tracktitle/ - "custom/mediaplayer" = { - exec = pkgs.writeShellScript "waybar-mediaplayer" '' - player_status=$(${pkgs.playerctl}/bin/playerctl status 2> /dev/null) - if [ "$player_status" = "Playing" ]; then - echo "$(${pkgs.playerctl}/bin/playerctl metadata artist) - $(${pkgs.playerctl}/bin/playerctl metadata title)" - elif [ "$player_status" = "Paused" ]; then - echo " $(${pkgs.playerctl}/bin/playerctl metadata artist) - $(${pkgs.playerctl}/bin/playerctl metadata title)" - fi - ''; - interval = 2; - format = "{} "; - # return-type = "json"; - on-click = "${pkgs.playerctl}/bin/playerctl play-pause"; - on-scroll-up = "${pkgs.playerctl}/bin/playerctl next"; - on-scroll-down = "${pkgs.playerctl}/bin/playerctl previous"; - }; - network = { - # docs: https://github.com/Alexays/Waybar/blob/master/man/waybar-network.5.scd - interval = 2; - max-length = 40; - # custom :> format specifier explained here: https://github.com/Alexays/Waybar/pull/472 - format-ethernet = " {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; - tooltip-format-ethernet = "{ifname} {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; - - format-wifi = "{ifname} ({signalStrength}%) {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; - tooltip-format-wifi = "{essid} ({signalStrength}%) {bandwidthUpBits:>}▲ {bandwidthDownBits:>}▼"; - - format-disconnected = ""; - }; - cpu = { - format = " {usage:2}%"; - tooltip = false; - }; - battery = { - states = { - good = 95; - warning = 30; - critical = 10; - }; - format = "{icon} {capacity}%"; - format-icons = [ - "" - "" - "" - "" - "" - ]; - }; - clock = { - format-alt = "{:%a, %d. %b %H:%M}"; - }; - }; - }; - # style docs: https://github.com/Alexays/Waybar/wiki/Styling - style = '' - * { - font-family: monospace; + ### defaults + mode "resize" { + bindsym Down resize grow height 10 px + bindsym Escape mode default + bindsym Left resize shrink width 10 px + bindsym Return mode default + bindsym Right resize grow width 10 px + bindsym Up resize shrink height 10 px + bindsym h resize shrink width 10 px + bindsym j resize grow height 10 px + bindsym k resize shrink height 10 px + bindsym l resize grow width 10 px } - /* defaults below: https://github.com/Alexays/Waybar/blob/master/resources/style.css */ - window#waybar { - background-color: rgba(43, 48, 59, 0.5); - border-bottom: 3px solid rgba(100, 114, 125, 0.5); - color: #ffffff; - transition-property: background-color; - transition-duration: .5s; + ### lightly modified bars + bar { + # TODO: fonts was: + # config.fonts.fontconfig.defaultFonts; (monospace ++ emoji) + font pango:Hack, Font Awesome 6 Free, Twitter Color Emoji 24.000000 + mode dock + hidden_state hide + position top + status_command ${pkgs.i3status}/bin/i3status + swaybar_command ${pkgs.waybar}/bin/waybar + workspace_buttons yes + strip_workspace_numbers no + tray_output primary + colors { + background #000000 + statusline #ffffff + separator #666666 + # #border #background #text + focused_workspace #4c7899 #285577 #ffffff + active_workspace #333333 #5f676a #ffffff + inactive_workspace #333333 #222222 #888888 + urgent_workspace #2f343a #900000 #ffffff + binding_mode #2f343a #900000 #ffffff + } } - window#waybar.hidden { - opacity: 0.2; + ### displays + ## DESKTOP + output "Samsung Electric Company S22C300 0x00007F35" { + pos 0,0 + res 1920x1080 + } + output "Goldstar Company Ltd LG ULTRAWIDE 0x00004E94" { + pos 1920,0 + res 3440x1440 } - /* - window#waybar.empty { - background-color: transparent; + ## LAPTOP + # sh/en TV + output "Pioneer Electronic Corporation VSX-524 0x00000101" { + pos 0,0 + res 1920x1080 } - window#waybar.solo { - background-color: #FFFFFF; + # internal display + output "Unknown 0x0637 0x00000000" { + pos 1920,0 + res 1920x1080 } - */ + ''; - window#waybar.termite { - background-color: #3F3F3F; - } + sane.fs."/home/colin/.config/waybar/config" = sane-lib.fs.wantedSymlinkTo waybar-config-text; - window#waybar.chromium { - background-color: #000000; - border: none; - } + # style docs: https://github.com/Alexays/Waybar/wiki/Styling + sane.fs."/home/colin/.config/waybar/style.css" = sane-lib.fs.wantedText '' + * { + font-family: monospace; + } - #workspaces button { - padding: 0 5px; - background-color: transparent; - color: #ffffff; - /* Use box-shadow instead of border so the text isn't offset */ - box-shadow: inset 0 -3px transparent; - /* Avoid rounded borders under each workspace name */ - border: none; - border-radius: 0; - } + /* defaults below: https://github.com/Alexays/Waybar/blob/master/resources/style.css */ + window#waybar { + background-color: rgba(43, 48, 59, 0.5); + border-bottom: 3px solid rgba(100, 114, 125, 0.5); + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; + } - /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ - #workspaces button:hover { - background: rgba(0, 0, 0, 0.2); - box-shadow: inset 0 -3px #ffffff; - } + window#waybar.hidden { + opacity: 0.2; + } - #workspaces button.focused { - background-color: #64727D; - box-shadow: inset 0 -3px #ffffff; - } + /* + window#waybar.empty { + background-color: transparent; + } + window#waybar.solo { + background-color: #FFFFFF; + } + */ - #workspaces button.urgent { - background-color: #eb4d4b; - } + window#waybar.termite { + background-color: #3F3F3F; + } - #mode { - background-color: #64727D; - border-bottom: 3px solid #ffffff; - } + window#waybar.chromium { + background-color: #000000; + border: none; + } - #clock, - #battery, - #cpu, - #memory, - #disk, - #temperature, - #backlight, - #network, - #pulseaudio, - #custom-media, - #tray, - #mode, - #idle_inhibitor, - #mpd { - padding: 0 10px; - color: #ffffff; - } + #workspaces button { + padding: 0 5px; + background-color: transparent; + color: #ffffff; + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each workspace name */ + border: none; + border-radius: 0; + } - #window, - #workspaces { - margin: 0 4px; - } + /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ + #workspaces button:hover { + background: rgba(0, 0, 0, 0.2); + box-shadow: inset 0 -3px #ffffff; + } - /* If workspaces is the leftmost module, omit left margin */ - .modules-left > widget:first-child > #workspaces { - margin-left: 0; - } + #workspaces button.focused { + background-color: #64727D; + box-shadow: inset 0 -3px #ffffff; + } - /* If workspaces is the rightmost module, omit right margin */ - .modules-right > widget:last-child > #workspaces { - margin-right: 0; - } + #workspaces button.urgent { + background-color: #eb4d4b; + } - #clock { - background-color: #64727D; - } + #mode { + background-color: #64727D; + border-bottom: 3px solid #ffffff; + } - #battery { + #clock, + #battery, + #cpu, + #memory, + #disk, + #temperature, + #backlight, + #network, + #pulseaudio, + #custom-media, + #tray, + #mode, + #idle_inhibitor, + #mpd { + padding: 0 10px; + color: #ffffff; + } + + #window, + #workspaces { + margin: 0 4px; + } + + /* If workspaces is the leftmost module, omit left margin */ + .modules-left > widget:first-child > #workspaces { + margin-left: 0; + } + + /* If workspaces is the rightmost module, omit right margin */ + .modules-right > widget:last-child > #workspaces { + margin-right: 0; + } + + #clock { + background-color: #64727D; + } + + #battery { + background-color: #ffffff; + color: #000000; + } + + #battery.charging, #battery.plugged { + color: #ffffff; + background-color: #26A65B; + } + + @keyframes blink { + to { background-color: #ffffff; color: #000000; } + } - #battery.charging, #battery.plugged { - color: #ffffff; - background-color: #26A65B; - } + #battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } - @keyframes blink { - to { - background-color: #ffffff; - color: #000000; - } - } + label:focus { + background-color: #000000; + } - #battery.critical:not(.charging) { - background-color: #f53c3c; - color: #ffffff; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: linear; - animation-iteration-count: infinite; - animation-direction: alternate; - } + #cpu { + background-color: #2ecc71; + color: #000000; + } - label:focus { - background-color: #000000; - } + #memory { + background-color: #9b59b6; + } - #cpu { - background-color: #2ecc71; - color: #000000; - } + #disk { + background-color: #964B00; + } - #memory { - background-color: #9b59b6; - } + #backlight { + background-color: #90b1b1; + } - #disk { - background-color: #964B00; - } + #network { + background-color: #2980b9; + } - #backlight { - background-color: #90b1b1; - } + #network.disconnected { + background-color: #f53c3c; + } - #network { - background-color: #2980b9; - } + #pulseaudio { + background-color: #f1c40f; + color: #000000; + } - #network.disconnected { - background-color: #f53c3c; - } + #pulseaudio.muted { + background-color: #90b1b1; + color: #2a5c45; + } - #pulseaudio { - background-color: #f1c40f; - color: #000000; - } + #custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; + } - #pulseaudio.muted { - background-color: #90b1b1; - color: #2a5c45; - } + #custom-media.custom-spotify { + background-color: #66cc99; + } - #custom-media { - background-color: #66cc99; - color: #2a5c45; - min-width: 100px; - } + #custom-media.custom-vlc { + background-color: #ffa000; + } - #custom-media.custom-spotify { - background-color: #66cc99; - } + #temperature { + background-color: #f0932b; + } - #custom-media.custom-vlc { - background-color: #ffa000; - } + #temperature.critical { + background-color: #eb4d4b; + } - #temperature { - background-color: #f0932b; - } + #tray { + background-color: #2980b9; + } - #temperature.critical { - background-color: #eb4d4b; - } + #tray > .passive { + -gtk-icon-effect: dim; + } - #tray { - background-color: #2980b9; - } + #tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; + } - #tray > .passive { - -gtk-icon-effect: dim; - } + #idle_inhibitor { + background-color: #2d3436; + } - #tray > .needs-attention { - -gtk-icon-effect: highlight; - background-color: #eb4d4b; - } + #idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; + } - #idle_inhibitor { - background-color: #2d3436; - } + #mpd { + background-color: #66cc99; + color: #2a5c45; + } - #idle_inhibitor.activated { - background-color: #ecf0f1; - color: #2d3436; - } + #mpd.disconnected { + background-color: #f53c3c; + } - #mpd { - background-color: #66cc99; - color: #2a5c45; - } + #mpd.stopped { + background-color: #90b1b1; + } - #mpd.disconnected { - background-color: #f53c3c; - } + #mpd.paused { + background-color: #51a37a; + } - #mpd.stopped { - background-color: #90b1b1; - } + #language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; + } - #mpd.paused { - background-color: #51a37a; - } + #keyboard-state { + background: #97e1ad; + color: #000000; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; + } - #language { - background: #00b093; - color: #740864; - padding: 0 5px; - margin: 0 5px; - min-width: 16px; - } + #keyboard-state > label { + padding: 0 5px; + } - #keyboard-state { - background: #97e1ad; - color: #000000; - padding: 0 0px; - margin: 0 5px; - min-width: 16px; - } + #keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); + } + ''; + # style = '' + # * { + # border: none; + # border-radius: 0; + # font-family: Source Code Pro; + # } + # window#waybar { + # background: #16191C; + # color: #AAB2BF; + # } + # #workspaces button { + # padding: 0 5px; + # } + # .custom-spotify { + # padding: 0 10px; + # margin: 0 4px; + # background-color: #1DB954; + # color: black; + # } + # ''; - #keyboard-state > label { - padding: 0 5px; - } - - #keyboard-state > label.locked { - background: rgba(0, 0, 0, 0.2); - } - ''; - # style = '' - # * { - # border: none; - # border-radius: 0; - # font-family: Source Code Pro; - # } - # window#waybar { - # background: #16191C; - # color: #AAB2BF; - # } - # #workspaces button { - # padding: 0 5px; - # } - # .custom-spotify { - # padding: 0 10px; - # margin: 0 4px; - # background-color: #1DB954; - # color: black; - # } - # ''; - }; sane.packages.extraUserPkgs = with pkgs; [ swaylock swayidle # (unused) diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index f6fe4179..e3e41c32 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -23,12 +23,6 @@ in default = {}; type = types.attrs; }; - - # extra attributes to include in home-manager's `programs` option - sane.home-manager.programs = mkOption { - default = {}; - type = types.attrs; - }; }; config = lib.mkIf cfg.enable { @@ -49,13 +43,10 @@ in home.username = "colin"; home.homeDirectory = "/home/colin"; - programs = lib.mkMerge [ - { - # XXX: unsure what this does? - home-manager.enable = true; - } - cfg.programs - ]; + programs = { + # XXX: unsure what this does? + home-manager.enable = true; + }; }; }; }