Added literate config to i3

This commit is contained in:
Roger Gonzalez 2025-04-06 20:27:45 -03:00
parent 7d5c85633a
commit c62f760bc0
Signed by: rogs
GPG Key ID: C7ECE9C6C36EC2E6
2 changed files with 641 additions and 30 deletions

633
.config/i3/README.org Normal file
View File

@ -0,0 +1,633 @@
#+TITLE: i3 Window Manager Configuration
#+AUTHOR: Roger González
#+PROPERTY: header-args:conf :tangle config :mkdirp yes
#+STARTUP: overview
#+OPTIONS: toc:3 num:nil
#+auto_tangle: t
* i3 Configuration
:PROPERTIES:
:ID: ec9a7551-34d7-4172-86b1-379ce4e53a51
:END:
This is my personal configuration for the i3 window manager. It's written using Org Mode's literate
programming features, which allows embedding documentation directly alongside the code. This file is
configured to automatically "tangle" the code blocks into the actual i3 configuration file (named
=config= in the same directory) whenever this Org file is saved in Emacs (see the [[*Setting Up Auto-Tangle][Setting Up Auto-Tangle]]
section). This approach keeps the configuration well-documented and easier to manage.
** Header
:PROPERTIES:
:ID: 107a2e74-7d42-4455-bb71-7bfb6ab7f8cf
:END:
This is just a simple header block containing ASCII art with personal information, which will appear at
the top of the tangled =config= file.
#+begin_src conf
#
# ██████╗ ██████╗ ██████╗ ███████╗
# ██╔══██╗██╔═══██╗██╔════╝ ██╔════╝ Roger Gonzalez
# ██████╔╝██║ ██║██║ ███╗███████╗ https://rogs.me
# ██╔══██╗██║ ██║██║ ██║╚════██║
# ██║ ██║╚██████╔╝╚██████╔╝███████║
# ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝
#+end_src
** Basic Settings
:PROPERTIES:
:ID: c2a32a32-b383-45e3-83a6-7d3f710f908b
:END:
Here, we define some fundamental settings for i3.
- =$mod=: Sets the primary modifier key. =Mod4= is typically the Super key (Windows key).
- =$aux=: Sets an auxiliary modifier key. =Mod1= is usually the Alt key. Using an auxiliary modifier
allows for more keybinding combinations without conflicts.
- =font=: Specifies the font used for window titles and, by default, the i3bar. =pango:DejaVu Sans Mono=
enables Pango for text rendering, which provides better support for Unicode glyphs (like icons),
right-to-left text, and improved scaling on high-resolution displays.
#+begin_src conf
set $mod Mod4
set $aux Mod1
font pango:DejaVu Sans Mono
#+end_src
** System Management
:PROPERTIES:
:ID: e980bd11-e95c-4cff-8e22-387d238d1862
:END:
This section configures integration with system services and utilities.
- =xss-lock=: Automatically locks the screen using a specified script
(=~/.config/i3/scripts/i3lock_script.sh=) before the system suspends. It uses `logind` to manage sleep
inhibitors. You can manually lock the screen using =loginctl lock-session=.
- =nm-applet=: Starts the NetworkManager applet, providing a system tray icon for managing network
connections (especially useful for Wi-Fi).
- =autorandr=: Manages display configurations. =exec_always= ensures it runs on startup and i3 restart.
The =sleep 2= might be necessary to wait for monitors to be fully detected. A keybinding
(=$mod+Shift+x=) is also set to manually trigger a display profile change.
#+begin_src conf
exec --no-startup-id xss-lock --transfer-sleep-lock ~/.config/i3/scripts/i3lock_script.sh
exec --no-startup-id nm-applet
# Screen resolution
exec_always --no-startup-id sleep 2; autorandr --change
bindsym $mod+Shift+x exec autorandr --change
#+end_src
** Audio Controls
:PROPERTIES:
:ID: 8cce53d6-97d3-48e4-86c8-23d81cb671de
:END:
Keybindings for controlling audio volume and media playback.
- Volume control uses =pactl= (PulseAudio Control) to adjust the volume and mute status of the default
audio sink (output) and source (input/microphone).
- =$refresh_i3status=: This variable defines a command to send the =SIGUSR1= signal to the =i3status=
process. This is commonly used to tell status bars (like i3bar or Polybar when using the i3status
module) to refresh their display immediately after a change (like volume).
- Media keys (Next, Previous, Play/Pause) are bound to =playerctl=, a command-line utility to control
MPRIS-compatible media players (like Spotify, VLC, etc.).
#+begin_src conf
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86AudioPlay exec playerctl play-pause
#+end_src
** Brightness Controls
:PROPERTIES:
:ID: 5f791fdf-fa93-4355-be0b-9b03f5e0313b
:END:
Bindings for adjusting screen brightness using the dedicated function keys found on many laptops. It uses
the =xbacklight= utility.
#+begin_src conf
bindsym XF86MonBrightnessUp exec xbacklight -inc 20
bindsym XF86MonBrightnessDown exec xbacklight -dec 20
#+end_src
** Window Appearance
:PROPERTIES:
:ID: ae204653-b553-499d-8c81-67385acb56fa
:END:
Settings related to how windows look and are arranged.
- =for_window [class=".*"] border pixel 2=: This rule applies to all windows (matched by the regex =.*=)
and sets their border style to =pixel= with a thickness of 2 pixels. This effectively hides the default
title bars, saving screen space.
- =gaps inner 4= / =gaps outer 4=: Configures gaps (empty space) between windows (inner) and between
windows and screen edges (outer).
- The =smart_gaps on= line (commented out) would automatically remove outer gaps if there's only one
window on the workspace.
- Keybindings are provided to dynamically adjust or reset inner and outer gaps during the session.
#+begin_src conf
# Disable titlebars
for_window [class=".*"] border pixel 2
# Use gaps
# smart_gaps on
gaps inner 4
gaps outer 4
bindsym $mod+Shift+t gaps inner current set 4; gaps outer current set 4
bindsym $mod+s gaps inner current plus 5
bindsym $mod+Shift+s gaps inner current minus 5
bindsym $mod+Shift+d gaps inner current set 0; gaps outer current set 0
bindsym $mod+z gaps outer current plus 5
bindsym $mod+Shift+z gaps outer current minus 5
#+end_src
** Window Management
:PROPERTIES:
:ID: 27e3cc34-781f-474b-b34a-6072eb9e4bfb
:END:
Core bindings for managing windows.
- =floating_modifier $mod=: Allows dragging floating windows by holding the =$mod= key (Super) and
clicking/dragging with the mouse.
- =$terminal= / =$auxTerminal=: Defines variables for the preferred terminal emulator (=alacritty=) and
an auxiliary one (=ghostty=).
- =$mod+Return=: Opens a new instance of the default terminal (=$terminal=).
- =$mod+Shift+q=: Kills the currently focused window.
- =$mod+d=: Launches =rofi= in =combi= mode, allowing searching for and launching applications (=drun=)
or switching to open windows (=window=).
#+begin_src conf
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
set $terminal alacritty
set $auxTerminal ghostty
bindsym $mod+Return exec $terminal
# kill focused window
bindsym $mod+Shift+q kill
# start rofi (a program launcher)
bindsym $mod+d exec --no-startup-id "rofi -combi-modi window,drun -show combi"
#+end_src
** Navigation
:PROPERTIES:
:ID: aab86286-395c-40f2-b7c5-051d31fcda2c
:END:
Keybindings for changing focus between windows and moving windows around.
- Focus changes can be done using Vim-style keys (h, j, k, l) or the standard arrow keys, combined with
the =$mod= key.
- Moving windows uses the same keys but adds the =Shift= modifier (e.g., =$mod+Shift+h= moves the focused
window left).
- A dedicated "Resize" mode is defined, activated by =$mod+r=. While in this mode, the h, j, k, l keys
resize the focused window. Pressing =Return= or =Escape= exits the resize mode and returns to the
default keybinding set.
#+begin_src conf
# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move windows:
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
bindsym $mod+r mode "Resize"
mode "Resize" {
bindsym h resize shrink width 10 px or 10 ppt
bindsym j resize grow height 10 px or 10 ppt
bindsym k resize shrink height 10 px or 10 ppt
bindsym l resize grow width 10 px or 10 ppt
bindsym Return mode "default"
bindsym Escape mode "default"
}
#+end_src
** Layout Management
:PROPERTIES:
:ID: dece85d5-2fd5-45f4-9999-6e7966081443
:END:
Bindings for controlling the layout of window containers.
- =$mod+t=: Toggles the split orientation (horizontal/vertical) for the current container. New windows
will be placed accordingly.
- =$mod+f=: Toggles fullscreen mode for the focused window or container.
- =$mod+w= / =$mod+e=: Change the layout mode of the current container. =tabbed= shows windows like tabs
in a browser. =toggle split= switches between the default split layout and stacked layout (titles shown
vertically).
- =$mod+Shift+space=: Toggles the focused window between tiling (managed by i3's layout) and floating
(can be moved/resized freely).
- =$mod+space=: Switches focus between tiling and floating windows on the current workspace.
- =$mod+a=: Moves focus to the parent container, useful for applying layout changes or moving multiple
windows together.
#+begin_src conf
# toggle split orientation
bindsym $mod+t split toggle
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
#+end_src
** Workspaces
:PROPERTIES:
:ID: 5f06548f-e0c6-43de-8313-efdced5931a9
:END:
Configuration related to i3 workspaces (virtual desktops).
- Workspace names are defined using variables (=$ws1=, =$ws2=, etc.). This makes it easy to change names
later. Icons (like , ) are used, requiring a Nerd Font or similar for proper display in the status
bar.
- Keybindings =$mod+[1-0]= switch to the corresponding workspace. =$mod+$aux+0= switches to workspace 11.
- Keybindings =$mod+Shift+[1-0]= move the focused container to the corresponding workspace.
=$mod+$aux+Shift+0= moves to workspace 11.
- Workspaces are explicitly assigned to specific monitor outputs (`primary`, `DP-2-1`, `DP-2-2`). This
ensures a consistent workspace layout across multiple monitors. Odd-numbered workspaces appear on the
primary monitor, even-numbered on the second, and workspace 11 on the third.
#+begin_src conf
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1: "
set $ws2 "2: "
set $ws3 "3: "
set $ws4 "4: "
set $ws5 "5: "
set $ws6 "6: "
set $ws7 "7: "
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
set $ws11 "11: "
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
bindsym $mod+$aux+0 workspace number $ws11
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
bindsym $mod+$aux+Shift+0 move container to workspace number $ws11
workspace $ws1 output primary
workspace $ws3 output primary
workspace $ws5 output primary
workspace $ws7 output primary
workspace $ws9 output primary
workspace $ws2 output DP-2-1
workspace $ws4 output DP-2-1
workspace $ws6 output DP-2-1
workspace $ws8 output DP-2-1
workspace $ws10 output DP-2-1
workspace $ws11 output DP-2-2
#+end_src
** System Commands
:PROPERTIES:
:ID: cdedb31b-0b53-4504-8531-1a4164ae7c23
:END:
Bindings for managing the i3 session and the system itself.
- =$mod+Shift+c=: Reloads the i3 configuration file (~/.config/i3/config). Useful after making changes.
- =$mod+Shift+r=: Restarts i3 in place. This preserves the current layout and session, useful for
applying changes that require a restart or upgrading i3.
- =$Locker=: Defines a variable for the screen locking command, using the same script as =xss-lock=.
- A "System" mode (similar to the "Resize" mode) is defined for power management actions. Activated by
=$mod+Shift+e=, it provides single-key shortcuts for locking (l), logging out (e), suspending (s),
hibernating (h), rebooting (r), and shutting down (Shift+s). Pressing =Return= or =Escape= exits this
mode.
#+begin_src conf
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# lock the screen
set $Locker exec "~/.config/i3/scripts/i3lock_script.sh"
set $mode_power System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
mode "$mode_power" {
bindsym l exec --no-startup-id $Locker, mode "default"
bindsym e exec --no-startup-id i3-msg exit, mode "default"
bindsym s exec --no-startup-id systemctl suspend, mode "default"
bindsym h exec --no-startup-id systemctl hibernate, mode "default"
bindsym r exec --no-startup-id systemctl reboot, mode "default"
bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+Shift+e mode "$mode_power"
#+end_src
** Status Bar
:PROPERTIES:
:ID: f71c0252-1c0c-484a-9454-a6fa11389b60
:END:
This section handles the status bar. Instead of using the default i3bar with i3status, this configuration
uses Polybar.
- =exec_always --no-startup-id .config/polybar/launch.sh=: Executes a script located at
=.config/polybar/launch.sh= on i3 startup and restart. This script is responsible for launching and
configuring the Polybar instances. The actual appearance and content of the bar are defined in the
Polybar configuration files, not here.
#+begin_src conf
# Start Polybar
exec_always --no-startup-id .config/polybar/launch.sh
#+end_src
** Program Shortcuts
:PROPERTIES:
:ID: 74cae34a-66d8-42e6-b161-bd0552369f65
:END:
Custom keybindings to launch frequently used applications and perform specific actions.
- =$aux+f=: Opens Thunar file manager.
- =$aux+c=: Opens an image viewer (`xviewer`) showing a Vim cheatsheet.
- =$aux+a=: Opens `lxappearance` for changing GTK themes, icons, and fonts.
- =$mod+Shift+b=: Opens the auxiliary terminal (=$auxTerminal=, ghostty) running a script named `bmenu`.
- Language Switching: =$aux+Shift+e= sets the keyboard layout to Spanish (es), =$aux+Shift+u= sets it to
US English (us) using =setxkbmap=.
- Screenshots: Various bindings using =scrot= and =flameshot= for capturing the full screen, a selected
area (saving to file or clipboard), or launching the Flameshot GUI. The =--release= flag triggers the
action when the key is released.
- Do Not Disturb: =$mod+m= toggles a Do Not Disturb mode via a custom script.
- Custom Shortcuts: Bindings using =$aux= to open specific LibreOffice Calc spreadsheets (=loffice=) and
the Feishin music player.
#+begin_src conf
# Hotkeys for opening programs
bindsym $aux+f exec /usr/bin/thunar
bindsym $aux+c exec xviewer ~/.vim-cheatsheet.gif
bindsym $aux+a exec /usr/bin/lxappearance
bindsym $mod+Shift+b exec $auxTerminal -e 'bmenu'
# Languages
bindsym $aux+Shift+e exec setxkbmap es
bindsym $aux+Shift+u exec setxkbmap us
# Screenshots
bindsym Print exec scrot ~/Pictures/%Y-%m-%d-%H%M%S.png
bindsym --release Shift+F12 exec scrot -s -f ~/Pictures/%Y-%m-%d-%H%M%S.png
bindsym --release Ctrl+Shift+F12 exec scrot -s -f -o "/tmp/image.png" && xclip -selection clipboard -t image/png -i /tmp/image.png
bindsym --release Ctrl+Shift+F11 exec flameshot gui
# Do not disturb
bindsym $mod+m exec "~/.config/i3/scripts/toggle_dnd.sh"
# Shortcuts
bindsym $aux+g exec loffice ~/Documents/Gastos/Gastos\ USD.ods
bindsym $aux+b exec loffice ~/Documents/Gastos/BTC.ods
bindsym $aux+l exec feishin
#+end_src
** Focus Behavior
:PROPERTIES:
:ID: 28c668ac-c174-4c7f-a152-2434d377579c
:END:
Configures how window focus changes in relation to the mouse cursor.
- =focus_follows_mouse no=: Disables focus follows mouse. This means a window only gains focus when
explicitly clicked on, not just when the mouse cursor moves over it. This can prevent accidental focus
changes.
#+begin_src conf
# Disable focus follows
focus_follows_mouse no
#+end_src
** Workspace Assignments
:PROPERTIES:
:ID: 1632a49b-ec39-4b59-b457-0024c5c01265
:END:
Rules to automatically assign specific applications to predefined workspaces when they are opened. This
helps maintain an organized workflow. Assignments are based on the window class (obtained using tools
like `xprop`).
- Browsers (LibreWolf, Firefox, etc.) go to $ws1 (Workspace 1). Brave goes to $ws10.
- Development tools (Emacs, Postman, DBeaver) go to $ws2. Note the use of `for_window ... move` for
DBeaver, which might be necessary if `assign` doesn't work reliably for that specific application.
- Terminals (Alacritty, ghostty) go to $ws3.
- Communication apps (Slack, Telegram, Signal, etc.) go to $ws4.
- Mail/Calendar apps (Evolution, Thunderbird, Mailspring) go to $ws5.
- Music players (Spotify, Lollypop, Feishin, etc.) go to $ws6.
- File managers (Thunar, Pcmanfm) go to $ws7.
- Miscellaneous utilities (KeePassXC, Bitwarden, Joplin, KDE Connect, Liferea, NewsFlash) are assigned to
$ws8 and $ws9.
- Floating Rules: Specific windows (like file transfer dialogs, Galculator, GParted, Nitrogen) are set to
open in floating mode automatically.
- Urgent Focus: =for_window [urgent=latest] focus= automatically switches focus to a workspace containing
a window that has set its "urgent" hint (e.g., a new chat message notification).
#+begin_src conf
# Workspace Assignments
# 1: Browsers
assign [class="Brave"] $ws10
assign [class="LibreWolf"] $ws1
assign [class="firefox"] $ws1
assign [class="zen"] $ws1
assign [class="qutebrowser"] $ws1
# 2: Development
assign [class="Emacs"] $ws2
assign [class="Postman"] $ws2
for_window [class="DBeaver"] move to workspace $ws2
# 3: Terminal
assign [class="Alacritty"] $ws3
assign [class="ghostty"] $ws3
# 4: Communication
assign [class="Slack"] $ws4
assign [class="Telegram"] $ws4
assign [class="Keybase"] $ws4
assign [class="Ferdi"] $ws4
assign [class="Signal"] $ws4
assign [class="Element"] $ws4
# 5: Mail/Calendar
assign [class="Evolution"] $ws5
assign [class="thunderbird"] $ws5
assign [class="Mailspring"] $ws5
# 6: Music
for_window [class = "Spotify"] move to workspace $ws6
assign [class="Lollypop"] $ws6
assign [class="feishin"] $ws6
assign [class="Clementine"] $ws6
assign [class="Sublime-music"] $ws6
# 7: File managers
assign [class="Thunar"] $ws7
assign [class="Pcmanfm"] $ws7
# 8: Misc
assign [class="KeePassXC"] $ws8
assign [class="Bitwarden"] $ws8
assign [class="Joplin"] $ws9
assign [class="kdeconnect.app"] $ws9
assign [class="Liferea"] $ws9
assign [class="NewsFlash"] $ws9
# Open specific applications in floating mode
for_window [title="File Transfer*"] floating enable
for_window [class="(Galculator|GParted|Nitrogen|Wireguard)"] floating enable border normal
# switch to workspace with urgent window automatically
for_window [urgent=latest] focus
#+end_src
** Autostart Applications
:PROPERTIES:
:ID: 7087b33c-9793-40e1-aa78-5ae49d6bf991
:END:
Applications and services launched automatically when i3 starts. The =--no-startup-id= flag prevents i3
from showing a "busy" cursor while these applications load. =sleep= commands are used to stagger the
startup of some applications, potentially reducing initial resource load or waiting for dependencies
(like network or system tray) to become ready.
- Core applications like Thunderbird (mail), Emacs (editor), Zen Browser, and a terminal instance are
started with delays.
- =nitrogen --restore=: Restores the previously set wallpaper.
- =blueman-applet=: System tray applet for Bluetooth management.
- =polkit-gnome-authentication-agent-1=: Handles PolicyKit authentication requests (e.g., for
administrative tasks).
- =gnome-keyring-daemon=: Manages passwords and secrets.
- =unclutter=: Hides the mouse cursor when idle.
- =xfce4-power-manager=: Handles power management events (like laptop lid close, battery levels).
- =pamac-tray=: Provides notifications for package updates (on Arch-based systems using Pamac).
- =picom=: A compositor, responsible for visual effects like transparency, shadows, and fading.
=exec_always= ensures it restarts if it crashes.
- =xfce4-notifyd=: A notification daemon to display desktop notifications.
- =autotiling=: A script that automatically adjusts the split direction (horizontal/vertical) based on
window dimensions, aiming for a more balanced layout.
- =xinput set-prop 14 345 1=: Likely a specific command to configure a touchpad or mouse setting (device
ID 14, property 345 set to 1). This is hardware-specific.
- =play-with-mpv=: Likely related to a browser extension that allows opening videos in the MPV player.
- =~/.config/i3/connect-speakers.sh=: A custom script, probably for setting up audio outputs.
- =kdeconnect-app=: Starts the KDE Connect application for integrating phone notifications and file
sharing.
- =dbus-update-activation-environment=: Ensures important environment variables (like =DISPLAY=) are
available to D-Bus activated services, which is crucial for proper integration of many modern desktop
applications.
#+begin_src conf
# Autostarts
exec --no-startup-id sleep 20; exec /usr/bin/thunderbird
exec --no-startup-id sleep 10; exec emacsclient -c -a emacs
exec --no-startup-id sleep 20; exec /usr/bin/zen-browser
exec --no-startup-id sleep 5; exec $terminal
exec --no-startup-id sleep 10; exec nitrogen --restore
exec --no-startup-id blueman-applet
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh
exec --no-startup-id /usr/bin/unclutter
exec --no-startup-id xfce4-power-manager
exec --no-startup-id pamac-tray
exec_always --no-startup-id sleep 5; exec picom
exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd
exec_always --no-startup-id autotiling
exec --no-startup-id xinput set-prop 14 345 1
exec --no-startup-id exec /usr/bin/play-with-mpv
exec --no-startup-id exec "~/.config/i3/connect-speakers.sh"
exec --no-startup-id sleep 5; exec /usr/bin/kdeconnect-app
exec dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY &
#+end_src
** Scripts
:PROPERTIES:
:ID: 126b52b7-5aad-4f45-a296-b425503d6043
:END:
Execution of custom scripts and miscellaneous bindings.
- =internet_check.sh= (commented out) and =weather_notify.sh= are custom scripts launched at startup
(likely for status bar information or notifications).
- =$aux+p=: A keybinding that generates a 50-character random password using =/dev/urandom= and =tr=,
copies it to the clipboard using =xclip=, and sends a notification.
#+begin_src conf
# Small scripts
# exec --no-startup-id ~/.config/i3/scripts/internet_check.sh &
exec --no-startup-id ~/.config/i3/scripts/weather_notify.sh &
# Random scripts
## Generate a random password and copy it to the clipboard
bindsym $aux+p exec --no-startup-id "tr -dc 'A-Za-z0-9!#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 50 | xclip -selection clipboard && notify-send 'Copied a random password to the clipboard' -i password"
#+end_src
** Appearance
:PROPERTIES:
:ID: df9bc8c5-3bc4-4644-aa5c-f78b99b220eb
:END:
Defines the colors used for window borders and title bars (though title bars are effectively hidden by
the `border pixel` setting earlier, these colors still define the border appearance). Colors are
specified for different window states: focused, inactive focused, unfocused, urgent, and placeholder.
Each line defines colors for the border, background, text, indicator (used in tabbed/stacked layouts),
and child border.
#+begin_src conf
# Window colors
# class border backgr. text indicator child_border
client.focused #75D85A #75D85A #424242 #75D85A #75D85A
client.focused_inactive #3B4B58 #3B4B58 #ffffff #3B4B58 #3B4B58
client.unfocused #202932 #202932 #7A7A7A #202932 #202932
client.urgent #990000 #990000 #ffffff #990000 #990000
client.placeholder #0c0c0c #0c0c0c #ffffff #000000 #0c0c0c
#+end_src
* Setting Up Auto-Tangle
:PROPERTIES:
:ID: 1b2cd201-99aa-43a3-a5bd-3679716d279d
:END:
This final section provides instructions for users of Emacs on how to enable the automatic tangling
feature used by this configuration file. It involves adding a small piece of Emacs Lisp code to the
user's Emacs configuration (=~/.emacs.d/init.el= or similar). This code defines a function
=org-babel-auto-tangle= that checks if an Org file being saved has the =#+auto_tangle: t= property set.
If it does, it automatically runs =org-babel-tangle=, extracting the code blocks into the target file
specified by the =:tangle= header argument (in this case, the =config= file). This function is then added
to the =after-save-hook=, ensuring it runs every time an Org file is saved.
#+begin_src emacs-lisp :tangle no
;; Auto-tangle configuration files
(use-package org
:config
(defun org-babel-auto-tangle ()
"Automatically tangle org files when saved."
(when (eq major-mode 'org-mode)
(let ((auto-tangle (cdr (assoc "auto_tangle" (org-collect-keywords '("PROPERTY"))))))
(when (and auto-tangle (string= auto-tangle "t"))
(org-babel-tangle)))))
(add-hook 'after-save-hook #'org-babel-auto-tangle))
#+end_src

View File

@ -1,45 +1,24 @@
# #
# | '__/ _ \ / _` / __| Roger González # ██████╗ ██████╗ ██████╗ ███████╗
# | | | (_) | (_| \__ \ https://rogs.me # ██╔══██╗██╔═══██╗██╔════╝ ██╔════╝ Roger Gonzalez
# |_| \___/ \__, |___/ https://git.rogs.me # ██████╔╝██║ ██║██║ ███╗███████╗ https://rogs.me
# |___/ # ██╔══██╗██║ ██║██║ ██║╚════██║
# This file has been auto-generated by i3-config-wizard(1). # ██║ ██║╚██████╔╝╚██████╔╝███████║
# It will not be overwritten, so edit it as you like. # ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
set $mod Mod4 set $mod Mod4
set $aux Mod1 set $aux Mod1
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
# 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 font pango:DejaVu Sans Mono
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock ~/.config/i3/scripts/i3lock_script.sh exec --no-startup-id xss-lock --transfer-sleep-lock ~/.config/i3/scripts/i3lock_script.sh
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet exec --no-startup-id nm-applet
# Screen resolution # Screen resolution
exec_always --no-startup-id sleep 2; autorandr --change exec_always --no-startup-id sleep 2; autorandr --change
bindsym $mod+Shift+x exec autorandr --change bindsym $mod+Shift+x exec autorandr --change
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
@ -50,9 +29,8 @@ bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous bindsym XF86AudioPrev exec playerctl previous
bindsym XF86AudioPlay exec playerctl play-pause bindsym XF86AudioPlay exec playerctl play-pause
# Sreen brightness controls bindsym XF86MonBrightnessUp exec xbacklight -inc 20
bindsym XF86MonBrightnessUp exec xbacklight -inc 20 # increase screen brightness bindsym XF86MonBrightnessDown exec xbacklight -dec 20
bindsym XF86MonBrightnessDown exec xbacklight -dec 20 # decrease screen brightness
# Disable titlebars # Disable titlebars
for_window [class=".*"] border pixel 2 for_window [class=".*"] border pixel 2