{ config, lib, pkgs, ... }: let cfg = config.home-manager.users.mainUser.xsession.windowManager.i3; colorTheme = let theme = (import ../../../library/colorThemes.nix).solarized.light.hex; in theme // { foreground = theme.base3; background = theme.base03; }; in { home-manager.users.mainUser = { programs.i3status-rust = { enable = true; bars = { my = { icons = "awesome5"; theme = "solarized-light"; # https://github.com/greshake/i3status-rust/blob/v0.22.0/doc/blocks.md blocks = [ { block = "cpu"; interval = 1; } { block = "memory"; display_type = "memory"; format_mem = "{mem_used_percents}"; format_swap = "{swap_used_percents}"; } { block = "load"; interval = 1; format = "{1m}"; } { block = "battery"; interval = 10; format = "{percentage} {time}"; } { block = "uptime"; } { block = "time"; interval = 60; format = "%Y-%m-%d %R"; } ]; }; }; }; xsession.windowManager.i3 = { enable = true; config = { modifier = "Mod4"; startup = let height = config.configuration.desktop.height; width = config.configuration.desktop.width; in [ { command = "${pkgs.albert}/bin/albert"; always = true; } { command = "${pkgs.polygon-art.polygon-art}/bin/rings --height ${toString height} --width ${toString width} /dev/shm/background.png && ${pkgs.feh}/bin/feh --bg-scale /dev/shm/background.png"; always = true; } # { command = "systemctl --user restart polybar"; always = true; notification = false; } ]; bars = [{ mode = "hide"; hiddenState = "hide"; position = "bottom"; workspaceButtons = true; workspaceNumbers = true; statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${config.users.users.mainUser.home}/.config/i3status-rust/config-my.toml"; fonts = [ "Terminus" ]; trayOutput = "primary"; colors = { background = colorTheme.background; statusline = colorTheme.background; separator = colorTheme.background; focusedWorkspace = { border = colorTheme.foreground; background = colorTheme.foreground; text = colorTheme.background; }; activeWorkspace = { border = colorTheme.background; background = colorTheme.background; text = colorTheme.foreground; }; inactiveWorkspace = { border = colorTheme.background; background = colorTheme.background; text = colorTheme.foreground; }; urgentWorkspace = { border = colorTheme.red; background = colorTheme.background; text = colorTheme.foreground; }; bindingMode = { border = colorTheme.background; background = colorTheme.background; text = colorTheme.foreground; }; }; }]; keybindings = { "${cfg.config.modifier}+Return" = "exec ${cfg.config.terminal}"; "${cfg.config.modifier}+Shift+q" = "kill"; "${cfg.config.modifier}+Left" = "focus left"; "${cfg.config.modifier}+Down" = "focus down"; "${cfg.config.modifier}+Up" = "focus up"; "${cfg.config.modifier}+Right" = "focus right"; "${cfg.config.modifier}+j" = "focus next"; "${cfg.config.modifier}+k" = "focus prev"; "${cfg.config.modifier}+Shift+Left" = "move left"; "${cfg.config.modifier}+Shift+Down" = "move down"; "${cfg.config.modifier}+Shift+Up" = "move up"; "${cfg.config.modifier}+Shift+Right" = "move right"; "${cfg.config.modifier}+h" = "split h"; "${cfg.config.modifier}+v" = "split v"; "${cfg.config.modifier}+f" = "fullscreen toggle"; "${cfg.config.modifier}+s" = "layout stacking"; "${cfg.config.modifier}+w" = "layout tabbed"; "${cfg.config.modifier}+e" = "layout toggle split"; #"${cfg.config.modifier}+Shift+space" = "floating toggle"; #"${cfg.config.modifier}+space" = "focus mode_toggle"; "${cfg.config.modifier}+a" = "focus parent"; "${cfg.config.modifier}+Shift+minus" = "move scratchpad"; "${cfg.config.modifier}+minus" = "scratchpad show"; "${cfg.config.modifier}+1" = "workspace number 1"; "${cfg.config.modifier}+2" = "workspace number 2"; "${cfg.config.modifier}+3" = "workspace number 3"; "${cfg.config.modifier}+4" = "workspace number 4"; "${cfg.config.modifier}+5" = "workspace number 5"; "${cfg.config.modifier}+6" = "workspace number 6"; "${cfg.config.modifier}+7" = "workspace number 7"; "${cfg.config.modifier}+8" = "workspace number 8"; "${cfg.config.modifier}+9" = "workspace number 9"; "${cfg.config.modifier}+0" = "workspace number 10"; "${cfg.config.modifier}+Escape" = "workspace back_and_forth"; "${cfg.config.modifier}+Shift+1" = "move container to workspace number 1"; "${cfg.config.modifier}+Shift+2" = "move container to workspace number 2"; "${cfg.config.modifier}+Shift+3" = "move container to workspace number 3"; "${cfg.config.modifier}+Shift+4" = "move container to workspace number 4"; "${cfg.config.modifier}+Shift+5" = "move container to workspace number 5"; "${cfg.config.modifier}+Shift+6" = "move container to workspace number 6"; "${cfg.config.modifier}+Shift+7" = "move container to workspace number 7"; "${cfg.config.modifier}+Shift+8" = "move container to workspace number 8"; "${cfg.config.modifier}+Shift+9" = "move container to workspace number 9"; "${cfg.config.modifier}+Shift+0" = "move container to workspace number 10"; "${cfg.config.modifier}+Shift+c" = "reload"; "${cfg.config.modifier}+Shift+r" = "restart"; "${cfg.config.modifier}+Shift+e" = "exec i3-nagbar -t warning -m 'Do you want to exit i3?' -b 'Yes' 'i3-msg exit'"; "${cfg.config.modifier}+r" = "mode resize"; # hide and show polybar # enable-ipc = true; <-- is needed for this command #"${cfg.config.modifier}+grave" = "exec ${pkgs.polybar}/bin/polybar-msg cmd toggle"; #"${cfg.config.modifier}+equal" = "exec ${pkgs.polybar}/bin/polybar-msg cmd toggle"; }; }; }; # polybar services.polybar = { enable = false; #package = pkgs.polybar.override { # i3Support = true; # #alsaSupport = true; # iwSupport = true; # pulseSupport = true; # #githubSupport = true; #}; package = pkgs.polybarFull; config = { "bar/top" = { # needed for polybar-msg cmd toggle enable-ipc = true; width = "100%"; # Background ARGB color (e.g. #f00, #ff992a, #ddff1023) background = colorTheme.background; # Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023) foreground = colorTheme.foreground; radius = 0; overline-size = 0; overline-color = colorTheme.background; underline-size = 3; underline-color = colorTheme.background; border-size = 0; # Padding (number of spaces, pixels, or points) to add at the beginning/end of # the bar padding = 0; module-margin = 1; modules-center = "date battery"; modules-left = "i3"; tray-position = "right"; }; "module/i3" = { type = "internal/i3"; # Available tokens: # %mode% label-mode = "%mode%"; label-mode-background = colorTheme.red; label-mode-padding = 2; # Available tokens: # %name% # %icon% # %index% # %output% label-focused = "%index%"; label-focused-underline = colorTheme.red; label-focused-padding = 1; # Available tokens: # %name% # %icon% # %index% # %output% label-unfocused = "%index%"; label-unfocused-padding = 1; # Available tokens: # %name% # %icon% # %index% # %output% label-visible = "%index%"; label-visible-underline = colorTheme.yellow; label-visible-padding = 1; # Available tokens: # %name% # %icon% # %index% # %output% label-urgent = "%index%"; label-urgent-padding = 1; }; "module/date" = { type = "internal/date"; internal = 5; date = "%Y-%m-%d"; time = "%H:%M"; label = "%date% %time%"; }; "module/battery" = { type = "internal/battery"; # This is useful in case the battery never reports 100% charge # Default: 100 full-at = 99; # format-low once this charge percentage is reached # Default: 10 # New in version 3.6.0 low-at = 5; # Use the following command to list batteries and adapters: # $ ls -1 /sys/class/power_supply/ battery = "BAT0"; adapter = "AC"; # If an inotify event haven't been reported in this many # seconds, manually poll for new values. # # Needed as a fallback for systems that don't report events # on sysfs/procfs. # # Disable polling by setting the interval to 0. # # Default: 5 poll-interval = 5; }; }; script = '' polybar top & ''; }; }; }