i3

Table of Contents

1. i3

1.1. sway + KDE

No le puedo meter KDE como tal
https://github.com/Alexays/Waybar
https://github.com/Alexays/Waybar/wiki -> explicacion
ydotool
No copia de neovim hacia afuera
No funciona el wifi porque no me abre el wallet
El scroll de touchpad va al reves no tengo touch click, no funciona AltGr espanol
El camino parece ser anadir los widgets de kde a waybar
https://github.com/ErikReider/SwayOSD

Sigue tardando mucho Ctrl+Alt+Y
https://sr.ht/~scoopta/wofi/ en vez de rofi

  • Si no tengo una barra de KDE con las aplicaciones no puedo hacer lo de mover una ventana de firefox a otra sin utilizar atajos de sway

echo $XDG_SESSION_TYPE -> Para distinguir entre wayland y x11

Lo mismo con Bismuth de KDE llega…
https://github.com/Bismuth-Forge/bismuth/
https://github.com/esjeon/krohnkite
https://github.com/zeroxoneafour/polonium (funciona en Wayland, aunque no muy bien porque se lía con las apps de GTK. En Nvidia me reinicia el servidor de Wayland si lo aplico a firefox)
Espanso en KDE Wayland no funciona. Te salen un montón de errores de que no selanza espanso porque intenta lanzarse y hay que quitarlo de systemctl

1.1.1. Repos que quizas lo tienen resuelto

https://github.com/sneexy-boi/el-dotfiles
https://github.com/hyprland-community/hypract
https://github.com/emrhnpla02/.dotfiles
https://github.com/stefonarch/LXQt-Wayland-files

Cuando haces click en cualquier parte de Waybar, parece que puedes lanzar cualquier script que se te ocurra. Uno de esos scripts puede ser simplemente lanzar lo que sea que se lanza cuando abres KDE
Tengo que ver como hacen ellos para lanzar KDE Plasma
https://github.com/KDE/plasma-workspace/blob/master/startkde/startplasma-wayland.cpp
systemctl start plasma-kwin_wayland.service –user
plasmashell parece que si que lo lanza, aunque no integra las apliaciones lanzadas en uno y en otro como en i3
Los atajos se podrian comunicar con qdbus:

bindsym XF86AudioRaiseVolume exec –no-startup-id qdbus org.kde.kglobalaccel /component/kmix invokeShortcut “increase_volume”
bindsym XF86AudioLowerVolume exec –no-startup-id qdbus org.kde.kglobalaccel /component/kmix invokeShortcut “decrease_volume”
bindsym XF86AudioMute exec –no-startup-id qdbus org.kde.kglobalaccel /component/kmix invokeShortcut “mute”
bindsym XF86AudioMicMute exec –no-startup-id qdbus org.kde.kglobalaccel /component/kmix invokeShortcut “mic_mute”

1.1.2. Requisitos que tiene que manejar

  • Conectarse a una nueva pantalla
  • Wifi/Ethernet/Bluetooth y configuracion avanzada
  • Teclado, cambiar de uno a otro
  • Perfiles de energia
  • Mostrar la hora
  • Audio con Pipewire, también cambiar cuando se conecta a hdmi
  • Lanzar lo de ~/.config/autostart
  • notificationes y poder pinearlas
  • Sacar captura de pantalla con flameshot
  • Actualizaciones de flatpaks y firmware
  • Gestión de portapapeles
  • Cuando se monta un nuevo disco, añadirlo
  • Tomar capturas de pantallas (ahora lo hace flameshot)

1.1.3. Lanzar plasmashell desde sway

Se puede lanzar una barra con:
export $(dbus-launch)
plasmashell

https://www.reddit.com/r/kde/comments/qhw08j/how_do_i_unlock_kwallet_when_logging_in_via/
The below solution is used to unlock kwallet when logging into a machine via ssh, but the same could be applied to logging in through a tty, as the original post asked for.

The solution:

Ensure your etc/ssh/sshd_config file contains the following atleast:

AuthenticationMethods publickey,password
PasswordAuthentication yes
PubkeyAuthentication yes
UsePAM yes

Enabling password authentication is what enables us to unlock PAM (which is the method we will use to unlock the keyrings in the next part). I add the publickey part just as a hint that you should probably use a publickey in addition to your password, it’s just safer

Next, make sure /etc/pam.d/sshd contains the following:

-auth optional pam_kwallet5.so

-session optional pam_kwallet5.so auto_start force_run

(The above can be done for unlocking gnome keyring. Just replace pam_kwallet5.so with pam_gnome_keyring.so)

In your ~/.bash_profile or ~/.zprofile, include the following lines

export QT_QPA_PLATFORM=offscreen
/usr/share/libpam-kwallet-common/pam_kwallet_bin

NOTE: The path for pam_kwallet_bin could be different on your system. (On Archlinux I found the file to be at /usr/lib/pam_kwallet_bin.) You can use the locate command from mlocate package to find the correct location

At this point, upon login, kwallet should be unlocked and you should be able to see that there is a socket created at $PAM_KWALLET5_LOGIN.

Try querying the default wallet (assuming it is called kdewallet, and you store wifi passwords using kde’s network manager):

kwallet-query –list-entries –folder ’Network Management’ kdewallet

The above should list all the encrypted entries for wifi keys known to kde’s network manager.

One thing I found ironic is that even after all this, kwalletcli will not read the wallet unless a graphical session is running.
Sources

[1] https://security.stackexchange.com/a/130116/36134

[2] https://wiki.gnome.org/Projects/GnomeKeyring/Pam

[3] https://github.com/KDE/kwallet-pam/blob/master/pam_kwallet.c

[4] https://raymii.org/s/articles/Expose_any_QT_program_via_VNC.html

[5] https://gist.github.com/benediktg/195f774073e3d85fc22597c094d21bae

1.3. Instalacion

sudo apt install i3 i3-wm i3status suckless-tools feh dmenu wmctrl xdotool
https://github.com/heckelson/i3-and-kde-plasma
Necesita que nvim esté en PATH (si haces chsh $(which zsh) no funciona)

1.4. Move to wayland?

1.4.1. First Look At Wlroots Wayland: Is It Usable? - YouTube (Using sway)

  • No global shortcuts breaks some things
  • Minute 2: Wayland has better compatibility with amdn than with nvidia, also you can use xwayland to execute X aplications in a wayland environment

1.4.2. Ubuntu 22.04 Defeats The Point Of AppImages - YouTube

AppImage uses fuser2, Ubuntu uses fuser3 all over the place, but fuser2 has been deprecated by Ubuntu as it hasn’t been updated since 2018
Trying to install fuser2 uninstalls fuser3 and all of its dependent packages ()

1.5. Config modal

1.5.1. https://github.com/guillaumecherel/i3-modal

  • Super gets you to “mode switch” mode from anywhere.
  • Returns execute the current mode “natural” action and returns to default mode.
  • Space move to the current mode’s natural alternate mode, that is a mode one may naturally switch to from this mode. For example, in the navigate mode, spaces switches to the move container mode and vice versa.
  • Escape goes to default mode.
1.5.1.1. shortcuts
  • Control+semicolon ($mode_switch)
    o
    rofi (search accross all open windows)
    (no term)
    SPC Launch desktop app with rofi
    RET
    launch terminal
    (no term)
    Execute, $mode_navigate
    First execute,then change to $mode_navigate
    hjkl
    focus ←↓↑→
    s
    switch to last workspace
    p,P
    focus parent,child
    Shift+1234…
    goto workspace, $mode_navigate (actually without shift)
    (no term)
    $mode_navigate (after pressing one of the above)
    hjkl
    focus ←↓↑→
    p,P
    focus parent,child
    s
    switch to last workspace
    Shift+1234…
    goto workspace, $mode_navigate (actually without shift)
    Shift+Space
    toggle tiling/floating
    a
    $mode_layout
    m
    $mode_move_container
    m
    $mode_move_container
    hjkl
    move ←↓↑→
    Shift+1234…
    move container to 1234 (actually without shift)
    Shift+hjkl
    move container to output right
    s
    move to last workspace
    k
    kill focused window
    Shift+Space
    toggle tiling/floating
    a
    $mode_layout
    h
    horizontal split
    v
    vertical split
    f
    toggle fullsreen
    Shift+Space
    toggle tiling/floating
    s
    layout stacking
    w
    layout tabbed
    p
    layout toggle split
    w
    $mode_move_workspace
    hjkl
    move ←↓↑→
    Shift+1234…
    move workspace to 1234 (actually without shift)
    Shift+hjkl
    move container to output right
    r
    $mode_window_resize
    hjkl
    shrink width,grow width,shrink height,grow height
    i
    $mode_i3_special
    h
    reload config
    l
    restart (preserves layout/session, used to upgrade i3)
    x
    exit (log out)
1.5.1.2. Alternate modes
mode_paste
mode_launcher
mode_i3_special
mode_switch
mode_navigate
mode_move_container
mode_move_container
mode_navigate
mode_layout
mode_navigate
mode_move_workspace
mode_navigate
mode_window_resize
mode_navigate
1.5.1.3. DONE Desactivar todas las cosas que no se usen con nops/alarmas/volver a modo por defecto

Si no lo que pasa es que no sé que estoy en el modo. Mejor aun, que me muestre una alarma en vez de nop, o que vuelva a default. Así, salvo que vuelva a hacer Control+semicolon, no me deja ejecutar más cosas random

1.5.1.4. No funciona bien p/P

Se centra en los dos, no sólo en uno
Como workaround puedes hacer hl o movimientos parecidos que no hagan nada, kj, etc
Parece ser que es el comportamiento por defecto, para por ejemplo mover varias ventanas relaccionadas

1.5.1.5. Las notificaciones son otra ventana

se pueden matar con ctrl+semicolon m q, pero vuelven a aparecer si salta otra notif

1.5.1.6. CANCELLED Implmenetar 12345678 como modificadores

Conflicta moverse entre los workspaces, si lo hago estaría interesante que tuviese número de tab igual que en firefox

1.5.2. xprop sacar información de la ventana

1.5.3. Que hjkl sólo vaya entre el mismo workspace   someday_20230330

Es un poco incómodo a veces que cuando estás cambiado de ventana te salte a otro workspace, porque así tienes que ir siempre hacia el mismo lado para ir a una ventana
Sería mejor que diese la vuelta pero dentro de un mismo workspace
https://www.reddit.com/r/i3wm/comments/hg52tz/cycle_between_focused_windows_in_the_same/
Parece que no es tanto problema en cuanto empiezas a utilizar marks

1.5.4. Poner unas marks automáticamente cuando superas X número de ventanas   someday_20230330

Esto lo tiene ya easyfocus / wmfocus

  • Si tienes 4 ventanas, te pone marks en la primera y la última en A y F
    1 2 3 4
    a f
  • Cuando tienes 5 ventanas
    1 2 3 4 5
    a d f
  • Cuando tienes 6 ventanas
    1 2 3 4 5 6
    a s d f
  • Cuando tienes 7 ventanas
    1 2 3 4 5 6 7
    a s d f

1.5.5. Mejoras i3

Cómo lo utilizo normalmente?
Un poco como lo de alternate file de vim, normalmente cambio entre 2, a veces 3 ventanas
Cuando paso algo a la izq o derecha (split), quiero que me mueva o marcar la otra ventana como que quiero que esté al lado
Hacerlo jerárquico de alguna manera? Tengo grupos de 2, 3 entre los que cambio mucho, pero entre ellos cambio poco
Lo que quiero evitar es tener que hacer mucho h l, más de 2 veces es demasiado
Por ejemplo

  • firefox <-> emacs
  • firefox <-> nvim
  • dolphin <-> nvim
  • okular, ferdium, evolution, chromium para notebooks

Sacar de activitywatch qué es lo que más uso

1.5.6. Buscar los backlinks de marks_like_vim   someday_20230330

[vim_like_marks]

  • las marcas que empiezan con _ no se muestran en el título de la ventana, mostrarlas es configurable
  • se pueden matchear ventanas en base a marcas
  • se pueden swapear las posiciones de dos contenedores (ventanas) por marcas
  • se pueden mover contenedores (ventanas) a marcas

1.5.7. Investigar swapping containers   someday_20230330

1.5.8. Cuando se queda vacío un workspace porque estás moviendo cosas que la acción sobre el workspace vacío te lleve al workspace

1.5.9. Revisar que todos los modos sean accesibles desde cualquier sitio con un diagrama plantuml   someday_20230330

Que todos los modos sean accesibles desde cualquier modo posible, por ejemplo que m siempre se ponga en modo mover contenedor actual, a siempre cambiar layout…
Entonces pierdes un poco la gracia de la configuración modal ⇒ Realmente mejor, porque cuantos menos modos tengas, más fácil es de recordar
Si puedo cargarme algún modo que no haga falta, mejor, me ahorro un Control+semicolon
Lo de space y return para cambiar de modo también me lo cargo, servirán para lanzar aplicaciones/terminal

grep -E -e "bindsym.*mode" -e "mode.*{" ~/.config/i3/config | grep -v Unrecognized | sed -Ez 's/mode "([^"]+)"/\1/g'
1.5.9.1. Lista de comandos de i3
bindsym space exec $rofi -location 2 -width 100 -show drun; mode "default"
bindsym Return exec "$terminal" ; mode "default"
bindsym o exec $rofi -location 2 -width 100 -show window; mode default
bindsym v mode "$mode_move_container"
bindsym a mode "$mode_layout"
bindsym w mode "$mode_move_workspace"
bindsym r mode "$mode_window_resize"
bindsym i mode "$mode_i3_special"
1.5.9.2. Modos que NO quiero que tengan esto
  • mode_i3_special
  • mode_move_container desde mode_layout
  • mode_move_workspace desde mode_layout
  • mode_move_workspace

1.5.11. Investigar cómo utilizar las jerarquías de ventanas   someday_20230330

Para qué sirven las jerarquías?

  • Para cuando te pones con un tema y vas sacando terminal tras terminal de todo lo que tiene que ver con eso
  • Para cuando tienes un servicio corriendo en una terminal que te sirve como carpeta para agrupar todas las cosas
  • Interesante también cómo se complementan con marks_like_vim, porque le puedes dar nombre a los contenedores y enviar contenedores y ventanas a un contenedor
  • Stardock Groupy: Tabs for Windows te permite agrupar distintas ventanas con Drag ’n’ Drop en Windows
    Para hacer los mismo en i3, primero me tengo que hacer un split horizontal o vertical con las ventanas que quiero añadir, y luego lo puedo cambiar a layout tabbed o stacked con esas ventanas

korreman/sway-overfocus: “Better” focus navigation for sway and i3
https://github.com/korreman/sway-overfocus
gestión avanzada de parent en i3, soluciona los problemas de arriba

1.5.12. Investigar cómo integrar i3 y emacs   someday_20230330

Lo suyo sería que se correspondiesen los nombres de las ventanas con las ventanas en emacs de alguna manera
Idealmente un emacs por cada una de las ventanas de i3 (el mismo cliente)

1.5.13. Persistencia de configuraciones de ventanas

Poder volver a lanzarlas después de cerrarlas, y que sea fácil de guardar una configuración de ventanas

1.5.14. Coger el nombre de los workspaces

1.5.15. A little post about how I organize workspaces. tl;dr One workspace for one context/task : i3wm

1.5.15.1. Poner en i3 marks a tabs dentro de una aplicación   someday_20230330

Marks a nivel de archivo los soporta firefox con vimium, emacs con evil, y neovim
Si no se puede hacer a nivel de i3 (pendiente de que me responda), se pueden hacer combinando i3 con las marcas de la propia aplicación.
Por ejemplo algo estilo:

  1. Escribo ’af o lo que sea para disparar la marca a de i3 y la marca f de lo que sea que está en la marca a de i3 (jerárquico)
  2. i3 salta a la marca a
  3. Una vez en la marca a (que tiene que ser una aplicación de estas que soporta marcas), se escriben los caracteres ’f que justo hacen que se vaya a la marca f


Otro tipo de cosas que se me ocurren para esto son:

  • Clusterizar de algún tipo las marcas. Por ejemplo puedo tener aa, as, ad, af donde a es la aplicación y asdf es la marca dentro de la aplicación, y luego tener otras marcas estilo sa ss sd sf donde s es la aplicación y asdf tienen el mismo tema que las asdf de la otra aplicación
  • Ver de una manera más gráfica (autocompletado con fzf idealmente) qué marcas tengo y su contexto. Esto si i3 soporta marcas dentro de aplicaciones es muy sencillo, si no habría que hacer algún tipo de cambio

1.6. Abrir firefox en el workspace actual

[Linux] [Firefox] Open link in browser, which is in current workspace
Otra opción es mover firefox al workspace actual, aunque hay veces que quiero abrir links en el workspace actual. Podría ser un toggle

1.7. https://github.com/glacambre/nwin

An experimental Neovim UI that creates a new OS window for each Neovim window, all backed by the same neovim server. This enables performing window management using i3/sway’s regular window-management features.

1.8. Poner un fondo de pantalla (feh) y bloqueo de pantalla (i3lock) que rote

https://www.reddit.com/r/i3wm/comments/7xan8g/experimenting_with_i3_can_i_setup_like_a/
crontab

SCREEN_RESOLUTION="$(xdpyinfo | grep dimensions | cut -d' ' -f7)"; BGCOLOR="#000000"; images=($(ls /usr/share/wallpapers/*/contents/images/2560x1600*.png; ls /usr/share/wallpapers/*/contents/images/3840x2160*.png; ls /usr/share/wallpapers/*/contents/images/5120x2880*.png; ls /usr/share/wallpapers/*/contents/images/3200x2000*.png)); convert "${images[ $RANDOM % ${#images[@]} ]}" -gravity Center -background $BGCOLOR -extent "$SCREEN_RESOLUTION" RGB:- | i3lock --raw "$SCREEN_RESOLUTION":rgb -c $BGCOLOR -i /dev/stdin;

1.11. Includes en archivo de config (v4.20)

Ahora puedes incluir otros archivos de config

1.12. https://www.google.com/search?hl=en&q=i3%20hud%20menu

Investigar si hay un hud que te busca en los menús como el de mac

1.13. Launchers

1.13.2. Rofi fuzzy finder

No funciona muy bien
https://github.com/davatorium/rofi/issues/810
Estoy usando 1.5.4 de los repos, ya van por la 1.6.1, será por eso?

1.13.3. ~zethra/poki-launcher - sourcehut git

KRunner con más cosas

1.13.4. fzf launcher

1.13.4.1. fzf-nova – FZF as Rofi Dmenu Replacement Launcher - Linux CLI GUI - YouTube

greenclip+fzf ⇒ que esté ordenado también para que siga funcionando C-M-n, C-M-p. → Más sencillo que
fzf lanzador de apps, cambiar de ventana (que no lo estoy usando…)

1.13.4.2. https://github.com/spikegrobstein/fzf-menu → simplemente lanzar fzf en una nueva terminal

1.13.5. Arreglar rofi no pilla los escritorios bien   someday_20230330

1.14. Errores con KDE

1.14.1. Notificaciones (conflicto con dunst)

ls /usr/share/dbus-1/services | grep dunst
sudo apt purge dunst
sudo mv /usr/share/dbus-1/services/org.knopwob.dunst.service /usr/share/dbus-1/services/org.knopwob.dunst.service.disabled

Si sólo quieres desactivarlo, puedes copiar los contenidos de:

❯ cat /usr/share/dbus-1/services/org.kde.plasma.Notifications.service
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/plasma_waitforname org.freedesktop.Notifications

Al principio de sudo vim /usr/share/dbus-1/services/org.knopwob.dunst.service y te lanza el servicio de KDE

1.14.2. DONE Cuando cierro firefox con múltiples pestañas, RET no lo cierra → probar a salir

Como está en modo Ctrl+;, si pulso ESC ya interpreta RET pasándoselo a firefox y funciona

1.14.3. DONE i3 popups stealing focus

Si estoy en la pantalla 2 se me va a la principal, se me mueve el ratón
Puedo cerrarlas con Ctrl+; q (las cierra pero no las elimina de las notificaciones recientes)
Parece que es cosa de KDE también, pero con config de i3 ya se arregla

1.15. Emuladores de terminal



1.15.1. Setup para Dev y para Ops

  • kitty para Dev (porque soporta ligaduras) pero no para Ops (porque no soporta tmux)
  • alacritty para Ops (porque soporta tmux)
  • quizás incluso alacritty a secas, sin vim, para conectarse a servidores remotos porque si tengo un split copia mal en vim

1.16. Hacer una terminal que sea scratch buffer   someday_20230330

Para cálculos y todo lo que sea rápido
https://i3wm.org/docs/userguide.html#_sticky_floating_windows también puede estar interesante

1.16.1. Scratch buffer que se conecte un kernel de ipython

había una extensión por ahí de vim para scratchpad terminal

1.17. Pillar con Ctrl+; o (rofi window) los renombramientos de las ventanas   someday_20230330

Si renombro una ventana, me sigue saliendo el nombre que tenía inicialmente en vez de el que renombro
Si utilizo fzf como launcher entonces tengo más libertad para elegir qué quiero mostrar en el selector de ventanas

1.18. Getting a consistent set of keybindings between i3 and Emacs

1.19. i3 en windows

Author: Julian Lopez Carballal

Created: 2024-09-16 Mon 05:28