diff options
Diffstat (limited to 'archive/.config/i3/config')
-rw-r--r-- | archive/.config/i3/config | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/archive/.config/i3/config b/archive/.config/i3/config new file mode 100644 index 00000000..ffb81c9b --- /dev/null +++ b/archive/.config/i3/config @@ -0,0 +1,382 @@ +# i3 config file (v4) +# +# Please see http://i3wm.org/docs/userguide.html for a complete reference! + +# ** not updated for, or tested with, papersway ** + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:Hack 10 + +# This font is widely installed, provides lots of unicode glyphs, right-to-left +# text rendering and scalability on retina/hidpi displays (thanks to pango). +#font pango:DejaVu Sans Mono 8 + +# Before i3 v4.8, we used to recommend this one as the default: +# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 +# The font above is very space-efficient, that is, it looks good, sharp and +# clear in small sizes. However, its unicode glyph coverage is limited, the old +# X core fonts rendering does not support right-to-left and this being a bitmap +# font, it doesn’t scale on retina/hidpi displays. + +# class border bground text indicator child_border +client.focused #000000 #B4EEB4 #000000 #B4EEB4 #000000 +client.focused_inactive #000000 #FFFFF6 #000000 #AA9E9F #AA9E9F +client.unfocused #000000 #E5E5E5 #000000 #AA9E9F #AA9E9F +client.urgent #000000 #702020 #FFFFF6 #AA9E9F #AA9E9F +client.placeholder #000000 #000000 #FFFFF6 #AA9E9F #AA9E9F + +client.background #FFFFF6 + +# Use Mouse+Mod4 to drag floating windows to their wanted position +floating_modifier Mod4 + +# default workspace layout +workspace_layout tabbed + +# this is so that C-i o will stay within the same output; I have convenient +# bindings to get to other outputs so no need for directional movement to +# permit moving between outputs (it would be even better if we could just +# toggle this setting around the execution of C-i o, however) +focus_wrapping workspace + +mouse_warping output + +# Key binding strategy: +# +# Use Ctrl+N and Mod1+Ctrl+N, which will never be bound in Emacs, for bindings +# I will often need to type more than once in a row. Otherwise put the +# bindings under the C-i prefix map, which will never be bound by Emacs +# because text terminals typically can't distinguish between C-i and TAB. +# If we need it, we can bind C-i Ctrl+N, C-i Mod1+Ctrl+N to pass the keys +# through, like C-\ \ in tmux. +# +# Previously we used Mod4 modifying a key on the right side of the keyboard +# instead of Ctrl+N and Mod1+Ctrl+N; there are enough of these that we can +# still avoid any one-handed chording with only a single Super key. However, +# this means using the weak little finger to hold down a modifier key for more +# than one keypress with the other hand, which is worth avoiding. + +mode "C-i-" { + # make a fresh Emacs frame -- typically this gets invoked only on + # empty workspaces, as otherwise I use commands under `C-x 5` to get + # more Emacs frames + bindsym e exec emacsclient -ncw15, mode "default" + + # override the script's usual logic to start a fresh, non-debug daemon + bindsym Ctrl+Mod1+e exec emacsclient -ncw8 --spw/installed, \ + mode "default" + + # special daemon instance for debugging primary instance & Gnus + bindsym r exec emacsclient -ncw8 -sgdbmacs, mode "default" + + # Fresh Emacs frame and get a shell in HOME. Without this it's + # C-i e M-& which is too many keys esp. compared to C-i DEL + bindsym Return exec emacsclient -ncw15 -e \ + "(let ((default-directory (expand-file-name "'"'~/'"'")) \ + (display-buffer-overriding-action \ + '(display-buffer-same-window \ + . ((inhibit-same-window . nil))))) \ + (transient-cycles-cmd-spw/eshell-jump-from-here))", \ + mode "default" + + # start a terminal emulator + bindsym BackSpace exec xfce4-terminal, mode "default" + + # make a fresh browser window + bindsym b exec firefox -new-window, mode "default" + + # lock screen -- relies on xss-lock + # note that this won't lock other VTs (lock-session*s* + # requires root password) + bindsym l exec loginctl lock-session \ + && sleep 0.5 && xset dpms force standby, \ + mode "default" + + # go to sleep -- xss-lock will lock screen + bindsym Ctrl+l exec systemctl suspend, mode "default" + + # kill focused window + # Unlike in sway config we don't send USR1 to i3status-wrapper because + # under i3bar that causes i3status-wrapper to exit 0 for some reason. + # For the time being there is no need to send the signal as + # expensive() does nothing useful under i3. + bindsym k kill, mode "default" + + # start dmenu (a program launcher) + bindsym Ctrl+p exec dmenu_run \ + -nf '#000000' -nb '#FFFFF6' -sb '#B4EEB4' -sf '#000000', \ + mode "default" + + # There also is the (new) i3-dmenu-desktop which only displays applications + # shipping a .desktop file. It is a wrapper around dmenu, so you need that + # installed. + bindsym p exec --no-startup-id i3-dmenu-desktop \ + --dmenu="dmenu -i -nf '#000000' -nb '#FFFFF6' -sb '#B4EEB4' -sf '#000000'", \ + mode "default" + + bindsym s exec ~/src/dotfiles/scripts/desktop/dmenu_ssh \ + -nf '#000000' -nb '#FFFFF6' -sb '#B4EEB4' -sf '#000000', \ + mode "default" + + # split in horizontal orientation + bindsym h split h, mode "default" + + # split in vertical orientation + bindsym v split v, mode "default" + + # enter fullscreen mode for the focused container + bindsym f fullscreen toggle, mode "default" + + # change container layout (stacked, tabbed, toggle split) + # bindsym s layout stacking, mode "default" + bindsym w layout tabbed, mode "default" + + # make a container independently tabbed + bindsym a split v, layout tabbed, mode "default" + + # toggle tiling / floating + bindsym t floating toggle, mode "default" + + # change focus between tiling / floating windows + bindsym Tab focus mode_toggle, mode "default" + + # focus the parent container + bindsym u focus parent, mode "default" + + # focus the child container + bindsym d focus child, mode "default" + + # when screen is divided into two containers where at least one has + # several tabs, as I usually have it on a small laptop screen, this + # works well to go back and forth + bindsym o focus parent, focus right, mode "default" + + # switch to workspace + bindsym 1 workspace 1, mode "default" + bindsym 2 workspace 2, mode "default" + bindsym 3 workspace 3, mode "default" + bindsym 4 workspace 4, mode "default" + bindsym 5 workspace 5, mode "default" + bindsym 6 workspace 6, mode "default" + bindsym 7 workspace 7, mode "default" + bindsym 8 workspace 8, mode "default" + bindsym 9 workspace 9, mode "default" + bindsym 0 workspace 10, mode "default" + bindsym F1 workspace 11:F1, mode "default" + bindsym F2 workspace 12:F2, mode "default" + bindsym F3 workspace 13:F3, mode "default" + bindsym F4 workspace 14:F4, mode "default" + bindsym F5 workspace 15:F5, mode "default" + bindsym F6 workspace 16:F6, mode "default" + bindsym F7 workspace 17:F7, mode "default" + bindsym F8 workspace 18:F8, mode "default" + bindsym F9 workspace 19:F9, mode "default" + bindsym F10 workspace 20:F10, mode "default" + bindsym F11 workspace 21:F11, mode "default" + bindsym F12 workspace 22:F12, mode "default" + bindsym semicolon workspace back_and_forth, mode "default" + + # move focused container to workspace + bindsym Mod1+1 move container to workspace 1, mode "default" + bindsym Mod1+2 move container to workspace 2, mode "default" + bindsym Mod1+3 move container to workspace 3, mode "default" + bindsym Mod1+4 move container to workspace 4, mode "default" + bindsym Mod1+5 move container to workspace 5, mode "default" + bindsym Mod1+6 move container to workspace 6, mode "default" + bindsym Mod1+7 move container to workspace 7, mode "default" + bindsym Mod1+8 move container to workspace 8, mode "default" + bindsym Mod1+9 move container to workspace 9, mode "default" + bindsym Mod1+0 move container to workspace 10, mode "default" + bindsym Mod1+F1 move container to workspace 11:F1, mode "default" + bindsym Mod1+F2 move container to workspace 12:F2, mode "default" + bindsym Mod1+F3 move container to workspace 13:F3, mode "default" + bindsym Mod1+F4 move container to workspace 14:F4, mode "default" + bindsym Mod1+F5 move container to workspace 15:F5, mode "default" + bindsym Mod1+F6 move container to workspace 16:F6, mode "default" + bindsym Mod1+F7 move container to workspace 17:F7, mode "default" + bindsym Mod1+F8 move container to workspace 18:F8, mode "default" + bindsym Mod1+F9 move container to workspace 19:F9, mode "default" + bindsym Mod1+F10 move container to workspace 20:F10, mode "default" + bindsym Mod1+F11 move container to workspace 21:F11, mode "default" + bindsym Mod1+F12 move container to workspace 22:F12, mode "default" + bindsym Mod1+semicolon move container to workspace back_and_forth, \ + mode "default" + bindsym Mod1+Ctrl+semicolon move container to workspace back_and_forth, \ + workspace back_and_forth, mode "default" + + # next unused workspace + bindsym j exec --no-startup-id \ + ~/src/dotfiles/scripts/desktop/fresh-workspace, \ + mode "default" + # sends window to next unused but doesn't change view + bindsym Mod1+j exec --no-startup-id \ + ~/src/dotfiles/scripts/desktop/fresh-workspace --send, \ + mode "default" + # sends window to next unused and changes view + bindsym Mod1+Ctrl+j exec --no-startup-id \ + ~/src/dotfiles/scripts/desktop/fresh-workspace --take, \ + mode "default" + + # go to windows for tasks without needing to know the workspace + # bindsym slash exec --no-startup-id rofi -show window, mode "default" + bindsym slash exec ~/src/dotfiles/scripts/desktop/dmenu_window \ + -nf '#000000' -nb '#FFFFF6' -sb '#B4EEB4' -sf '#000000', \ + mode "default" + + # reload the configuration file -- useful simply to reexecute + # startup scripts + bindsym Ctrl+Mod1+c reload; \ + exec --no-startup-id ~/src/dotfiles/scripts/desktop/i3-startup-always, \ + mode "default" + # restart i3 inplace (preserves your layout/session, can be + # used to upgrade i3) + bindsym Ctrl+Mod1+r restart, mode "default" + # exit i3 (logs you out of your X session) + bindsym Ctrl+Mod1+Shift+e exec "i3-nagbar -t warning \ + -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' \ + -b 'Yes, exit i3' 'i3-msg exit'", mode "default" + + bindsym g mode "C-i g-" + + bindsym n exec i3-msg '[title="\[mosh\] tmux default on athena"]' focus \ + || xfce4-terminal -x ssh-and-tmux athena.silentflame.com, mode "default" + + bindsym Ctrl+g mode "default" +} +bindsym Ctrl+i mode "C-i-" + +# change focus +bindsym Ctrl+7 focus left +bindsym Ctrl+0 focus right +bindsym Ctrl+8 focus down +bindsym Ctrl+9 focus up + +# move focused window +bindsym Mod1+Ctrl+7 move left +bindsym Mod1+Ctrl+0 move right +bindsym Mod1+Ctrl+8 move down +bindsym Mod1+Ctrl+9 move up + +bindsym Ctrl+5 kill +bindsym Ctrl+6 fullscreen toggle + +bindsym Ctrl+apostrophe layout toggle splith splitv tabbed + +# Cycle through all workspaces on monitor. +bindsym Ctrl+1 workspace prev_on_output +bindsym Ctrl+4 workspace next_on_output +bindsym Mod1+Ctrl+1 move container to workspace prev_on_output, \ + workspace prev_on_output +bindsym Mod1+Ctrl+4 move container to workspace next_on_output, \ + workspace next_on_output + +# # move focus between monitors -- if we have more than one monitor, we +# # probably have a numeric keypad available. +# # subtleties: <https://github.com/i3/i3/issues/2558> +# bindsym Mod4+Mod2+KP_4 focus output left +# bindsym Mod4+KP_Left focus output left +# bindsym Mod4+Mod2+KP_6 focus output right +# bindsym Mod4+KP_Right focus output right + +# # move focused workspace between monitors +# bindsym Mod4+Ctrl+Mod2+KP_Left move workspace to output left +# bindsym Mod4+Ctrl+KP_4 move workspace to output left +# bindsym Mod4+Ctrl+Mod2+KP_Right move workspace to output right +# bindsym Mod4+Ctrl+KP_6 move workspace to output right + +bindsym Ctrl+2 focus output left +bindsym Mod1+Ctrl+2 move workspace to output left +bindsym Ctrl+3 focus output right +bindsym Mod1+Ctrl+3 move workspace to output right + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + # i3status is designed to be highly performant so it continues + # to be refreshed when the system is under load; we're giving + # up some of that with i3status-wrapper, but let's see if it + # actually matters + status_command ~/src/dotfiles/scripts/desktop/i3status-wrapper + + # default behaviour is to cycle through workspaces when scroll + # wheel is used on the bar. However, don't think I've ever + # used this deliberately, and often I do it by mistake, so + # let's disable it + bindsym button4 nop + bindsym button5 nop + + colors { + background #FFFFF6 + statusline #000000 + separator #000000 + + focused_workspace #000000 #B4EEB4 #000000 + active_workspace #000000 #FFFFF6 #000000 + inactive_workspace #000000 #E5E5E5 #000000 + urgent_workspace #000000 #702020 #FFFFF6 + binding_mode #000000 #EECD82 #000000 + } + + position bottom + strip_workspace_numbers yes + + tray_output primary +} + +# single key launching +mode "C-i g-" { + # start a graphical file manager + bindsym g exec thunar , mode "default" + + # launch xrandr graphical config + bindsym x exec arandr , mode "default" + # bindsym x exec xfce4-display-settings , mode "default" + + # # get a new VT from lightdm + # bindsym g exec dm-tool switch-to-greeter , mode "default" + + # adjust volume + bindsym v exec xfce4-terminal -e alsamixer , mode "default" + + # work around bugs -- this fixes Emacs suddenly not accepting any + # keyboard input until a new frame is opened and then closed using + # emacsclient(1) + bindsym i exec ibus restart , mode "default" + + bindsym Ctrl+g mode "default" +} + +# audio +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle + +exec --no-startup-id emacsclient --spw/update-environment +exec --no-startup-id emacsclient \ + -sgdbmacs --spw/no-start --spw/update-environment +exec --no-startup-id xss-lock --transfer-sleep-lock -- \ + i3lock --nofork --ignore-empty-password --color=FFFFF6 + +exec --no-startup-id nm-applet +exec --no-startup-id caffeine-indicator + +# relies on existence of ~/.config/redshift.conf with latitude and longitude +exec --no-startup-id redshift-gtk + +# for brightness control +exec --no-startup-id xfce4-power-manager + +# idempotent settings and tweaks script +exec_always --no-startup-id ~/src/dotfiles/scripts/desktop/i3-startup-always + +popup_during_fullscreen leave_fullscreen + +# windows that should always float +for_window [title="^vokoscreen"] floating enable +for_window [title="vokoscreen webcam"] border pixel 1 +for_window [title="^Ediff"] floating enable + +# # i3 titlebars are not very useful for Emacs frames; let's have an extra line +# # of buffer text +# for_window [class="^Emacs"] border pixel 2 |