#+TITLE: General System Configurations #+PROPERTY: header-args :mkdirp yes #+STARTUP: overview * Git #+begin_src conf :tangle ~/.gitconfig [user] email = public@thanosapollo.com name = Thanos Apollo signingkey = 5F6B32E27F433AA9E42A530A0A50703D1CE7AE29 [commit] gpgsign = true [format] subjectPrefix = PATCH [sendemail] from = Thanos Apollo smtpserver = smtp.fastmail.com smtpuser = thanosapollo@fastmail.com smtpencryption = ssl smtpserverport = 465 annotate = yes [credential "smtp://smtp.fastmail.com"] helper = "!f() { echo username=thanosapollo@fastmail.com; echo \"password=$(pass show fastmail.com/thanosapollo@fastmail.com | sed -n '/smtp:/,+3p')\"; }; f" #+end_src * gnupgp #+begin_src conf :tangle ~/.gnupg/gpg-agent.conf default-cache-ttl 172800 max-cache-ttl 282800 pinentry-program /home/thanos/.stumpwm.d/modules/util/pinentry/stumpwm-pinentry #+end_src * Hyprland ** Config *** Keyboard & monitors #+begin_src conf :tangle ~/.config/hypr/hyprland.conf # See https://wiki.hyprland.org/Configuring/Monitors/ monitor=transform,preferred,auto,auto # See https://wiki.hyprland.org/Configuring/Keywords/ for more # Some default env vars. env = XCURSOR_SIZE,24 # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ input { kb_layout = us,gr,my-cyr kb_variant = kb_model = kb_options = ctrl:swapcaps, grp:alt_space_toggle, kb_rules = follow_mouse = 1 touchpad { natural_scroll = no } sensitivity = 0 # -1.0 - 1.0, 0 means no modification. } #+end_src *** Style #+begin_src conf :tangle ~/.config/hypr/hyprland.conf general { # See https://wiki.hyprland.org/Configuring/Variables/ for more gaps_in = 5 gaps_out = 10 border_size = 2 col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.inactive_border = rgba(595959aa) layout = master } decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more active_opacity = 0.99 inactive_opacity = 0.97 rounding = 10 blur = no blur_size = 3 blur_passes = 1 blur_new_optimizations = on drop_shadow = yes shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) } animations { enabled = yes # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% animation = border, 1, 10, default animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } dwindle { # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = yes # you probably want this } master { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more new_is_master = false mfact = 0.53 } gestures { # See https://wiki.hyprland.org/Configuring/Variables/ for more workspace_swipe = off } # Personal Configuration for Hyprland # Thanos Apollo 2023 # See https://wiki.hyprland.org/Configuring/ for more device:epic mouse V1 { sensitivity = -0.5 } #+end_src *** Keybindings #+begin_src conf :tangle ~/.config/hypr/hyprland.conf # See https://wiki.hyprland.org/Configuring/Keywords/ for more $mainMod = CTRL_ALT # Binds, see https://wiki.hyprland.org/Configuring/Binds/ for more bind = , F5, exec, "/home/$USER/Developer/scripts/keyboard-light-x220.sh" bind = , F1, exec, swaylock --screenshot --clock --effect-blur 10x9 --indicator bind = , F8, exec, brightnessctl set +5% bind = , F7, exec, brightnessctl set 5-% bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 bind = , XF86AudioLowerVolume, exec, pamixer -d 5 bind = , XF86AudioMute, exec, pamixer -t bind = $mainMod, Return, exec, emacsclient -c bind = $mainMod, W, exec, kitty bind = $mainMod, Q, killactive, bind = $mainMod SHIFT, Q, exit, bind = $mainMod, R, exec, rofi -show drun bind = $mainMod, E, exec, tessen --dmenu=rofi bind = $mainMod, V, togglefloating, bind = $mainMod, J, togglesplit, # dwindle bind = ALT, F12, exec, grim -g "$(slurp)" bind = ALT, F11, fullscreen # Move focus with mainMod + arrow keys bind = $mainMod, B, movefocus, l bind = $mainMod, F, movefocus, r bind = $mainMod, N, movefocus, d bind = $mainMod, P, movefocus, u bind = $mainMod SHIFT, P, movewindow, u bind = $mainMod SHIFT, N, movewindow, d bind = $mainMod SHIFT, F, movewindow, r bind = $mainMod SHIFT, B, movewindow, l # Switch workspaces with mainMod + [0-9] bind = $mainMod, 1, workspace, 1 bind = $mainMod, 2, workspace, 2 bind = $mainMod, 3, workspace, 3 bind = $mainMod, 4, workspace, 4 bind = $mainMod, 5, workspace, 5 bind = $mainMod, 6, workspace, 6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 8, workspace, 8 bind = $mainMod, 9, workspace, 9 bind = $mainMod, 0, workspace, 10 # Move active window to a workspace with mainMod + SHIFT + [0-9] bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Scroll through existing workspaces with mainMod + scroll bind = ALT, mouse_down, workspace, e+1 bind = ALT, mouse_up, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = ALT, mouse:272, movewindow bindm = ALT, mouse:273, resizewindow #+end_src *** Exec upon start #+begin_src conf :tangle ~/.config/hypr/hyprland.conf exec-once = waybar exec = hyprpaper exec-once = emacs --daemon exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = nm-applet #+end_src ** Hyprpaper #+begin_src conf :tangle ~/.config/hypr/hyprpaper.conf preload = ~/wallpapers/wallpaper-cyberpunk.jpg preload = ~/wallpapers/science-athlete.jpg preload = ~/wallpapers/robo-girl.jpg preload = ~/wallpapers/chalk-board-wallpapers.jpg wallpaper = DP-1, ~/wallpapers/chalk-board-wallpapers.jpg wallpaper = HDMI-A-1, ~/wallpapers/chalk-board-wallpapers.jpg wallpaper = LVDS-1, ~/wallpapers/science-athlete.jpg #+end_src * Waybar ** Configuration #+begin_src jsonc :tangle ~/.config/waybar/config.jsonc { "layer": "top", "position": "top", "mod": "dock", "exclusive": true, "passthrough": false, "gtk-layer-shell": true, "height": 0, "modules-left": [ "clock", "custom/weather" // "hyprland/window", ], "modules-center": ["wlr/workspaces"], "modules-right": [ "tray", "custom/updates", "custom/language", "battery", "backlight", "custom/volume" // "pulseaudio#microphone" ], "hyprland/window": { "format": "{}" }, "wlr/workspaces": { "disable-scroll": true, "all-outputs": true, "on-click": "activate", //"format": "{icon}", "persistent_workspaces": { "1": [], "2": [], "3": [], "4": [], "5": [], "6": [], "7": [], "8": [], "9": [], "10": [] } }, "custom/updates": { "exec": "(pacman -Qu ; paru -Qua) | wc -l", "interval": 7200, "format": " {}" }, "custom/weather" : { "tooltip" : true, "format" : "{}", "interval" : 30, "exec" : "~/Developer/scripts/waybar-wttr.py", "return-type" : "json" }, "tray": { "icon-size": 13, "spacing": 10 }, "clock": { "format": "{: %R  %d/%m}", "tooltip-format": "{:%Y %B}\n{calendar}" }, "backlight": { "device": "intel_backlight", "format": "{icon} {percent}%", "format-icons": ["", "", ""], "on-scroll-up": "brightnessctl set 1%+", "on-scroll-down": "brightnessctl set 1%-", "min-length": 6 }, "battery": { "states": { "good": 95, "warning": 30, "critical": 20 }, "format": "{icon} {capacity}%", "format-charging": " {capacity}%", "format-plugged": " {capacity}%", "format-alt": "{time} {icon}", "format-icons": ["", "", "", "", "", "", "", "", "", "", ""] }, "pulseaudio": { "format": "{icon} {volume}%", "tooltip": false, "format-muted": " Muted", "on-click": "pamixer -t", "on-scroll-up": "pamixer -i 5", "on-scroll-down": "pamixer -d 5", "scroll-step": 5, "format-icons": { "headphone": "", "hands-free": "", "headset": "", "phone": "", "portable": "", "car": "", "default": ["", "", ""] } }, "custom/volume": { "exec": "pamixer --get-volume", "interval": 1, "format": " {}%", "tooltip": true } // "custom/pipewire": { // "format": {}, // "exec": "awk -F"[][]" '/Left:/ { print $2 }' <(amixer sget Master)", // "interval": 10 // }, } #+end_src ** Style #+begin_src css :tangle ~/.config/waybar/style.css ,* { border: none; border-radius: 0; font-family: Jetbrains Mono, Cartograph CF Nerd Font, monospace; font-weight: bold; font-size: 14px; min-height: 0; } window#waybar { background: rgba(21, 18, 27, 0); color: #cdd6f4; } tooltip { background: #0d1017; border-radius: 10px; border-width: 2px; border-style: solid; border-color: #11111b; } #workspaces button { padding: 5px; color: #313244; margin-right: 5px; } #workspaces button.active { color: #39bae6; } #workspaces button.focused { color: #a6adc8; background: #eba0ac; border-radius: 10px; } #workspaces button.urgent { color: #11111b; background: #a6e3a1; border-radius: 10px; } #workspaces button:hover { background: #11111b; color: #cdd6f4; border-radius: 10px; } #custom-language, #custom-updates, #custom-caffeine, #custom-weather, #window, #clock, #battery, #pulseaudio, #custrom-volume, #network, #workspaces, #tray, #backlight { background: #0d1017; padding: 0px 10px; margin: 3px 0px; margin-top: 10px; border: 1px solid #181825; } #tray { border-radius: 10px; margin-right: 10px; } #workspaces { background: #0d1017; border-radius: 10px; margin-left: 10px; padding-right: 0px; padding-left: 5px; } #custom-caffeine { color: #89dceb; border-radius: 10px 0px 0px 10px; border-right: 0px; margin-left: 10px; } #custom-language { color: #f38ba8; border-left: 0px; border-right: 0px; } #custom-updates { color: #ff8f40; border-left: 0px; border-right: 0px; } #window { border-radius: 10px; margin-left: 20px; margin-right: 60px; } #clock { color: #39bae6; border-radius: 10px 0px 0px 10px; margin-left: 0px; border-right: 0px; } #network { color: #f9e2af; border-left: 0px; border-right: 0px; } #pulseaudio { color: #59c2ff; border-left: 5px; border-right: 5px; } #custom-volume { background: #0d1017; color: #59c2ff; padding: 8px; margin-top: 11px; margin-bottom: 3px; border-left: 0px; border-right: 0px; } #battery { color: #a6e3a1; border-radius: 0 10px 10px 0; margin-right: 10px; border-left: 0px; } #custom-weather { border-radius: 0px 10px 10px 0px; border-right: 0px; margin-left: 0px; } #+end_src * iSync #+begin_src conf :tangle ~/.mbsyncrc IMAPAccount fastmail Host imap.fastmail.com Port 993 User thanosapollo@fastmail.com PassCmd "emacsclient -e '(password-store-get-field \"fastmail.com/thanosapollo@fastmail.com\" \"smtp\")'" SSLType IMAPS SSLVersions TLSv1.2 CertificateFile /etc/ssl/certs/ca-certificates.crt IMAPStore fastmail-remote Account fastmail MaildirStore fastmail-local Path ~/Mail/ Inbox ~/Mail/Inbox Trash ~/Mail/Trash/ SubFolders Verbatim Channel fastmail Far :fastmail-remote: Near :fastmail-local: Patterns * Expunge None CopyArrivalDate yes Sync All Create Both SyncState * #+end_src * Starship #+begin_src conf :tangle ~/.config/starship.toml # Get editor completions based on the config schema "$schema" = 'https://starship.rs/config-schema.json' # Inserts a blank line between shell prompts add_newline = true # Replace the '❯' symbol in the prompt with '➜' [character] # The name of the module we are configuring is 'character' success_symbol = '[λ](red)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green' error_symbol = "[✖](bold red) " [battery] full_symbol = "🔋" charging_symbol = "🔌" discharging_symbol = "⚡" [[battery.display]] threshold = 30 style = "bold red" [cmd_duration] min_time = 10_000 # Show command duration over 10,000 milliseconds (=10 sec) format = " took [$duration]($style)" [directory] truncation_length = 5 format = "[$path](yellow)[$lock_symbol]($lock_style) " [git_branch] format = " [$symbol$branch]($style) " symbol = "[](bold green) " style = "blue bold" [git_commit] commit_hash_length = 8 style = "bold white" [git_state] format = '[\($state( $progress_current of $progress_total)\)]($style) ' [git_status] conflicted = "⚔️ " ahead = "🏎️ 💨 ×${count}" behind = "🐢 ×${count}" diverged = "🔱 🏎️ 💨 ×${ahead_count} 🐢 ×${behind_count}" untracked = "  ×${count}" stashed = "📦 " modified = " ×${count}" staged = "🗃️ ×${count}" renamed = "📛 ×${count}" deleted = "🗑️ ×${count}" style = "bright-white" format = "$all_status$ahead_behind" [hostname] ssh_only = false format = "<[$hostname]($style)>" trim_at = "-" style = "bold dimmed white" disabled = true [julia] format = "[$symbol$version]($style) " symbol = "ஃ " style = "bold green" [memory_usage] format = "$symbol[${ram}( | ${swap})]($style) " threshold = 70 style = "bold dimmed white" disabled = false [package] disabled = true [python] format = "[$symbol$version]($style) " style = "bold green" [rust] format = "[$symbol$version]($style) " style = "bold green" [time] time_format = "%T" format = "🕙 $time($style) " style = "bright-white" disabled = true [username] style_user = "bold dimmed blue" show_always = false [nodejs] format = "via [🤖 $version](bold green) " #+end_src * slock #+begin_src conf :tangle "/sudo::/etc/systemd/system/slock@.service" [Unit] Description=Lock X session using slock for user %i Before=sleep.target [Service] User=%i Environment=DISPLAY=:0 ExecStartPre=/usr/bin/xset dpms force suspend ExecStart=/usr/bin/slock [Install] WantedBy=sleep.target #+end_src * Keyboards ** Cyrillic #+begin_src fundamental :tangle "/sudo::/usr/share/X11/xkb/symbols/my-cyr" partial alphanumeric_keys xkb_symbols "phonetic" { name[Group1]= "Russian (phonetic)"; key { [ 1, exclam ] }; key { [ 2, at ] }; key { [ 3, Cyrillic_io ] }; key { [ 4, Cyrillic_IO ] }; key { [ 5, Cyrillic_hardsign ] }; key { [ 6, Cyrillic_HARDSIGN ] }; key { [ 7, ampersand ] }; key { [ 8, asterisk ] }; key { [ 9, parenleft ] }; key { [ 0, parenright ] }; key { [ minus, underscore ] }; key { [ period, greater ] }; key { [ slash, question ] }; key { [ comma, less ] }; key { [ semicolon, colon ] }; key { [ apostrophe, quotedbl ] }; key { [ bar, brokenbar ] }; key { [ Cyrillic_yu, Cyrillic_YU ] }; key { [ Cyrillic_ya, Cyrillic_YA ] }; key { [ Cyrillic_ze, Cyrillic_ZE ] }; key { [ Cyrillic_es, Cyrillic_ES ] }; key { [ Cyrillic_a, Cyrillic_A ] }; key { [ Cyrillic_ve, Cyrillic_VE ] }; key { [ Cyrillic_tse, Cyrillic_TSE ] }; key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; key { [ Cyrillic_de, Cyrillic_DE ] }; key { [ Cyrillic_ie, Cyrillic_IE ] }; key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; key { [ Cyrillic_ef, Cyrillic_EF ] }; key { [ Cyrillic_te, Cyrillic_TE ] }; key { [ Cyrillic_er, Cyrillic_ER ] }; key { [ Cyrillic_en, Cyrillic_EN ] }; key { [ Cyrillic_be, Cyrillic_BE ] }; key { [ Cyrillic_ha, Cyrillic_HA ] }; key { [ Cyrillic_ghe, Cyrillic_GHE ] }; key { [ Cyrillic_yeru, Cyrillic_YERU ] }; key { [ Cyrillic_em, Cyrillic_EM ] }; key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; key { [ Cyrillic_u, Cyrillic_U ] }; key { [ Cyrillic_ka, Cyrillic_KA ] }; key { [ Cyrillic_i, Cyrillic_I ] }; key { [ Cyrillic_o, Cyrillic_O ] }; key { [ Cyrillic_el, Cyrillic_EL ] }; key { [ Cyrillic_pe, Cyrillic_PE ] }; key { [ Cyrillic_sha, Cyrillic_SHA ] }; key { [ Cyrillic_che, Cyrillic_CHE ] }; key { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; key { [ Cyrillic_e, Cyrillic_E ] }; }; #+end_src #+begin_src fundamental :tangle "/sudo::/usr/share/X11/xkb/symbols/my-cyr2" partial alphanumeric_keys xkb_symbols "phonetic" { name[Group1]= "Russian (phonetic)"; key { [ 1, exclam ] }; key { [ 2, at ] }; key { [ 3, Cyrillic_io ] }; key { [ 4, Cyrillic_IO ] }; key { [ 5, Cyrillic_hardsign ] }; key { [ 6, Cyrillic_HARDSIGN ] }; key { [ 7, ampersand ] }; key { [ 8, asterisk ] }; key { [ 9, parenleft ] }; key { [ 0, parenright ] }; key { [ minus, underscore ] }; key { [ period, greater ] }; key { [ slash, question ] }; key { [ comma, less ] }; key { [ semicolon, colon ] }; key { [ apostrophe, quotedbl ] }; key { [ bar, brokenbar ] }; key { [ Cyrillic_yu, Cyrillic_YU ] }; key { [ Cyrillic_ya, Cyrillic_YA ] }; key { [ Cyrillic_ze, Cyrillic_ZE ] }; key { [ Cyrillic_es, Cyrillic_ES ] }; key { [ Cyrillic_a, Cyrillic_A ] }; key { [ Cyrillic_ve, Cyrillic_VE ] }; key { [ Cyrillic_tse, Cyrillic_TSE ] }; key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; key { [ Cyrillic_de, Cyrillic_DE ] }; key { [ Cyrillic_ie, Cyrillic_IE ] }; key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; key { [ Cyrillic_ef, Cyrillic_EF ] }; key { [ Cyrillic_te, Cyrillic_TE ] }; key { [ Cyrillic_er, Cyrillic_ER ] }; key { [ Cyrillic_en, Cyrillic_EN ] }; key { [ Cyrillic_be, Cyrillic_BE ] }; key { [ Cyrillic_ha, Cyrillic_HA ] }; key { [ Cyrillic_ghe, Cyrillic_GHE ] }; key { [ Cyrillic_yeru, Cyrillic_YERU ] }; key { [ Cyrillic_em, Cyrillic_EM ] }; key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; key { [ Cyrillic_u, Cyrillic_U ] }; key { [ Cyrillic_ka, Cyrillic_KA ] }; key { [ Cyrillic_i, Cyrillic_I ] }; key { [ Cyrillic_o, Cyrillic_O ] }; key { [ Cyrillic_el, Cyrillic_EL ] }; key { [ Cyrillic_pe, Cyrillic_PE ] }; key { [ Cyrillic_sha, Cyrillic_SHA ] }; key { [ Cyrillic_che, Cyrillic_CHE ] }; key { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; key { [ Cyrillic_e, Cyrillic_E ] }; }; #+end_src #+begin_src fundamental :tangle "/sudo::/usr/share/X11/xkb/symbols/my-bg" partial alphanumeric_keys xkb_symbols "phonetic" { name[Group1]= "Bulgarian (traditional phonetic)"; key {[ Cyrillic_che, Cyrillic_CHE ]}; key {[ 1, exclam ]}; key {[ 2, at ]}; key {[ 3, numerosign ]}; key {[ 4, dollar, EuroSign, EuroSign ]}; key {[ 5, percent ]}; key {[ 6, EuroSign ]}; key {[ 7, section ]}; key {[ 8, asterisk ]}; key {[ 9, parenleft, bracketleft, U2329 ]}; key {[ 0, parenright, bracketright, U232A ]}; key {[ minus, endash, U2011, U2011 ]}; key {[ equal, plus, emdash, dagger ]}; key {[ Cyrillic_ya, Cyrillic_YA, U0463, U0462 ]}; key {[ Cyrillic_ve, Cyrillic_VE ]}; key {[ Cyrillic_ie, Cyrillic_IE, Cyrillic_e, Cyrillic_E ]}; key {[ Cyrillic_er, Cyrillic_ER, registered, registered ]}; key {[ Cyrillic_te, Cyrillic_TE, trademark, trademark ]}; key {[ Cyrillic_hardsign, Cyrillic_HARDSIGN, U046B, U046A ]}; key {[ Cyrillic_u, Cyrillic_U ]}; key {[ Cyrillic_i, Cyrillic_I, U045D, U040D ]}; key {[ Cyrillic_o, Cyrillic_O ]}; key {[ Cyrillic_pe, Cyrillic_PE ]}; key {[ Cyrillic_sha, Cyrillic_SHA ]}; key {[ Cyrillic_shcha, Cyrillic_SHCHA ]}; key {[ Cyrillic_a, Cyrillic_A ]}; key {[ Cyrillic_es, Cyrillic_ES, copyright, copyright ]}; key {[ Cyrillic_de, Cyrillic_DE ]}; key {[ Cyrillic_ef, Cyrillic_EF ]}; key {[ Cyrillic_ghe, Cyrillic_GHE ]}; key {[ Cyrillic_ha, Cyrillic_HA ]}; key {[ Cyrillic_shorti, Cyrillic_SHORTI, U046D, U046C ]}; key {[ Cyrillic_ka, Cyrillic_KA ]}; key {[ Cyrillic_el, Cyrillic_EL ]}; key {[ semicolon, colon, ellipsis, ellipsis ]}; key {[ apostrophe, quotedbl, rightsinglequotemark, leftsinglequotemark ]}; key {[ Cyrillic_yu, Cyrillic_YU ]}; key {[ U045D, U040D ]}; key {[ Cyrillic_ze, Cyrillic_ZE ]}; key {[ Cyrillic_softsign, U045D, Cyrillic_yeru, Cyrillic_YERU ]}; key {[ Cyrillic_tse, Cyrillic_TSE, copyright, copyright ]}; key {[ Cyrillic_zhe, Cyrillic_ZHE ]}; key {[ Cyrillic_be, Cyrillic_BE ]}; key {[ Cyrillic_en, Cyrillic_EN ]}; key {[ Cyrillic_em, Cyrillic_EM ]}; key {[ comma, doublelowquotemark, guillemotleft, guillemotleft ]}; key {[ period, leftdoublequotemark, guillemotright, guillemotright ]}; key {[ slash, question, U0300, U0301 ]}; key {[ space, space, nobreakspace, nobreakspace ]}; key { type[Group1] = "KEYPAD", [ KP_Delete, KP_Separator ]}; }; #+end_src