From a87505b0aaa93976bdc821db8802f4b9df9773a5 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Mon, 12 Jul 2021 09:41:14 +0200 Subject: [PATCH 01/48] Fixed open terminal --- emacs/.config/doom/config.el | 7 ++----- emacs/.config/doom/init.el | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/emacs/.config/doom/config.el b/emacs/.config/doom/config.el index 19bb44f..affd5a5 100644 --- a/emacs/.config/doom/config.el +++ b/emacs/.config/doom/config.el @@ -56,7 +56,7 @@ ;; Open external terminal ;; (map! :map doom-leader-open-map :desc "Open" "t" (cmd! (call-process-shell-command "terminal&" nil 0))) -(map! :leader :desc "Open external terminal" "o t" (cmd! (call-process-shell-command "terminal&" nil 0))) +(map! :leader :desc "Open external terminal" "o t" (cmd! (call-process-shell-command "xfce4-terminal&" nil 0))) ;; Remap font scaling keybindings to make more sense (map! :desc "Increase font size" :n "C-+" #'text-scale-increase) @@ -118,10 +118,7 @@ (after! org (setq org-agenda-files (expand-file-name "org-agenda-files" doom-private-dir))) -(map! :map cdlatex-mode-map - :i "TAB" #'cdlatex-tab) - -(map! :desc "Open external terminal" :nv "g C" #'toggle-word-case) +(map! :desc "Toggle case of word" :nv "g C" #'toggle-word-case) (defun toggle-word-case () "Toggle the case of current word or text selection." diff --git a/emacs/.config/doom/init.el b/emacs/.config/doom/init.el index 284764c..49f9d98 100644 --- a/emacs/.config/doom/init.el +++ b/emacs/.config/doom/init.el @@ -139,7 +139,7 @@ ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) ;; julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) - (latex +cdlatex) ; writing papers in Emacs has never been so fun + latex ; writing papers in Emacs has never been so fun ;;lean ; for folks with too much to prove ;;ledger ; be audit you can be ;;lua ; one-based indices? one-based indices From 555b932518f89a1032610bc62fcc05e2a150356e Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 25 Jul 2021 14:37:59 +0200 Subject: [PATCH 02/48] i3: Set scripts folder as variable --- i3/.config/i3/config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index 9a4f199..768f90d 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -10,6 +10,7 @@ # Please see https://i3wm.org/docs/userguide.html for a complete reference! set $mod Mod4 +set $scripts ~/.config/i3/scripts # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. @@ -260,7 +261,7 @@ bindsym $mod+c exec xfce4-terminal --role floating --hide-scrollbar --title Calc bindsym $mod+p exec xwacomcalibrate bindsym $mod+t exec thunar bindsym $mod+m exec xfce4-terminal -x mc -bindsym $mod+Shift+c exec jupyter-calculator +bindsym $mod+Shift+c exec $scripts/jupyter-calculator bindsym $mod+b exec firefox bindsym $mod+s exec pavucontrol From b79f8672a98523171e4660c627fa6342855243b3 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 15 Jul 2021 12:05:51 +0200 Subject: [PATCH 03/48] i3: removed title bar from windows --- i3/.config/i3/config | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index 768f90d..e8a4eed 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -267,8 +267,7 @@ bindsym $mod+s exec pavucontrol workspace_auto_back_and_forth yes -########## Window settings ########## -default_border normal +default_border pixel default_floating_border normal assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1 From 4293fc90a760c882296b7faf97a7c317af7c38a5 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 15 Jul 2021 12:32:53 +0200 Subject: [PATCH 04/48] emacs: Increased font size --- emacs/.config/doom/config.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emacs/.config/doom/config.el b/emacs/.config/doom/config.el index affd5a5..99df48a 100644 --- a/emacs/.config/doom/config.el +++ b/emacs/.config/doom/config.el @@ -21,7 +21,7 @@ ;; font string. You generally only need these two: ;; (setq doom-font (font-spec :family "monospace" :size 13 :weight 'semi-light) ;; doom-variable-pitch-font (font-spec :family "sans" :size 13)) -(setq doom-font (font-spec :family "Source Code Pro" :size 13)) +(setq doom-font (font-spec :family "Source Code Pro" :size 14)) ;; There are two ways to load a theme. Both assume the theme is installed and ;; available. You can either set `doom-theme' or manually load a theme with the From 69b3f3745600d3ad7f7099809bc66198605939ec Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 15 Jul 2021 12:44:13 +0200 Subject: [PATCH 05/48] emacs: Deleted custom.el --- emacs/.config/doom/custom.el | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 emacs/.config/doom/custom.el diff --git a/emacs/.config/doom/custom.el b/emacs/.config/doom/custom.el deleted file mode 100644 index 15eebbf..0000000 --- a/emacs/.config/doom/custom.el +++ /dev/null @@ -1,13 +0,0 @@ -(custom-set-variables - ;; custom-set-variables was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - '(org-agenda-files '("~/org-tests.org")) - '(package-selected-packages '(matlab-mode))) -(custom-set-faces - ;; custom-set-faces was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - ) From 1126eb7a6a584ff02097d2d9fa525e3cb7c4a402 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 15 Jul 2021 20:55:38 +0200 Subject: [PATCH 06/48] i3: added shortcut for pamac-manager --- i3/.config/i3/config | 1 + 1 file changed, 1 insertion(+) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index e8a4eed..5ae015b 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -264,6 +264,7 @@ bindsym $mod+m exec xfce4-terminal -x mc bindsym $mod+Shift+c exec $scripts/jupyter-calculator bindsym $mod+b exec firefox bindsym $mod+s exec pavucontrol +bindsym $mod+u exec pamac-manager workspace_auto_back_and_forth yes From 0794bc7b358321b578ec20f76c7b61226a30459e Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Fri, 16 Jul 2021 09:57:05 +0200 Subject: [PATCH 07/48] Added README --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..64df3ea --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# My dotfiles +Welcome! + +## Dependencies +All neccessary dependencies I could think of are listed in the *dependencies* file. + +## Link configs +```sh +cd .dotfiles +stow i3 mc emacs vim +``` From 44afe6a7e1ab23d09a550070b0e721b8597733bd Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Wed, 21 Jul 2021 08:35:06 +0200 Subject: [PATCH 08/48] manjaro: Added default files to .dotfiles --- manjaro/.config/mimeapps.list | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 manjaro/.config/mimeapps.list diff --git a/manjaro/.config/mimeapps.list b/manjaro/.config/mimeapps.list new file mode 100644 index 0000000..6b5e405 --- /dev/null +++ b/manjaro/.config/mimeapps.list @@ -0,0 +1,58 @@ +[Default Applications] +application/octet-stream=mousepad.desktop +application/pdf=FoxitReader.desktop +application/pdf=org.gnome.Evince.desktop +application/x-gettext-translation=mousepad.desktop +application/xml=mousepad.desktop +application/x-wine-extension-ini=mousepad.desktop +image/gif=viewnior.desktop;gimp.desktop +image/gif=viewnior.desktop;gimp.desktop +image/jpeg=viewnior.desktop;gimp.desktop +image/png=viewnior.desktop;gimp.desktop +text/plain=mousepad.desktop +video/mp4=vlc.desktop +video/ogg=vlc.desktop +video/x-flv=vlc.desktop +video/x-ms-wmv=vlc.desktop +video/x-ogm+ogg=vlc.desktop +video/x-theora+ogg=vlc.desktop +application/ppdf=FoxitReader.desktop +application/xfdf=FoxitReader.desktop +application/fdf=FoxitReader.desktop +x-scheme-handler/tg=userapp-Telegram Desktop-DQX5U0.desktop +application/x-compressed-tar=engrampa.desktop +application/x-tar=engrampa.desktop +application/zip=engrampa.desktop +text/html=firefox.desktop +x-scheme-handler/http=firefox.desktop +x-scheme-handler/https=firefox.desktop +x-scheme-handler/about=firefox.desktop +x-scheme-handler/unknown=firefox.desktop +text/x-csrc=code-oss.desktop +x-scheme-handler/eclipse+installer=_home_julian_Downloads_eclipse-installer_.desktop +x-scheme-handler/eclipse+command x-scheme-handler/eclipse+mpc=_home_julian_eclipse_cpp-2021-03_eclipse_.desktop +text/x-c++src=mousepad.desktop +inode/directory=/usr/share/applications/thunar.desktop + +[Added Associations] +text/plain=wolfram-mathematica12.desktop;code-oss.desktop;libreoffice-writer.desktop;code-oss-url-handler.desktop;mousepad.desktop; +application/pdf=qpdfview.desktop;com.github.xournalpp.xournalpp.desktop;code-oss.desktop;org.gnome.Evince.desktop;firefox.desktop;FoxitReader.desktop;libreoffice-draw.desktop; +application/x-qw=libreoffice-startcenter.desktop; +text/csv=libreoffice-calc.desktop;mousepad.desktop; +application/zip=org.gnome.FileRoller.desktop; +application/x-ms-dos-executable=wine.desktop;engrampa.desktop; +image/png=gimp.desktop; +image/jpeg=gimp.desktop; +application/x-shellscript=mousepad.desktop; +text/x-python=code-oss.desktop; +application/x-perl=code-oss.desktop; +font/ttf=org.gnome.font-viewer.desktop; +application/vnd.appimage=unity-editor.desktop; +x-scheme-handler/tg=userapp-Telegram Desktop-DQX5U0.desktop; +text/x-tex=texstudio.desktop; +application/x-compressed-tar=engrampa.desktop; +application/x-tar=engrampa.desktop; +text/x-c++src=nvim.desktop;mousepad.desktop; +text/x-java=nvim.desktop;vim.desktop; +text/x-csrc=code-oss.desktop; +application/x-7z-compressed=mplayer.desktop; From e46cade6b63bfa524028cc0234c3b3ed16a028f1 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 22 Jul 2021 16:03:47 +0200 Subject: [PATCH 09/48] i3: Fixed signal to volume i3blocklet --- i3/.config/i3/config | 11 ++++++----- i3/.config/i3blocks/config | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index 5ae015b..009fa02 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -32,11 +32,12 @@ exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork # exec --no-startup-id nm-applet # Use pactl to adjust volume in PulseAudio. -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 +# set $refresh_i3status killall -SIGUSR1 i3status +set $refresh_i3blocks pkill -RTMIN+1 i3blocks +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3blocks +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3blocks +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3blocks +bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3blocks # Use Mouse+$mod to drag floating windows to their wanted position floating_modifier $mod diff --git a/i3/.config/i3blocks/config b/i3/.config/i3blocks/config index c05e382..e64e8ec 100644 --- a/i3/.config/i3blocks/config +++ b/i3/.config/i3blocks/config @@ -22,7 +22,7 @@ LABEL= command=./volume LABEL= interval=10 -signal=10 +signal=1 [calendar] command=./calendar From 013ab7f6690669582afcaa089ecd7cc62272ab23 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 22 Jul 2021 16:08:51 +0200 Subject: [PATCH 10/48] i3: Added dunst to i3blocks --- i3/.config/i3blocks/config | 6 ++++ i3/.config/i3blocks/dunst | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100755 i3/.config/i3blocks/dunst diff --git a/i3/.config/i3blocks/config b/i3/.config/i3blocks/config index e64e8ec..d46c16d 100644 --- a/i3/.config/i3blocks/config +++ b/i3/.config/i3blocks/config @@ -18,6 +18,12 @@ command=./activity interval=10 LABEL= +[dunst] +command=./dunst +markup=pango +interval=once +format=json + [volume] command=./volume LABEL= diff --git a/i3/.config/i3blocks/dunst b/i3/.config/i3blocks/dunst new file mode 100755 index 0000000..4a5c4e0 --- /dev/null +++ b/i3/.config/i3blocks/dunst @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +""" +A do-not-disturb button for muting Dunst notifications in i3 using i3blocks +Mute is handled by passing 'DUNST_COMMAND_PAUSE' and 'DUNST_COMMAND_RESUME' to +the notify-send script and the 'DUNST_MUTE' environment variable is set to keep +track of the toggle. +""" + +__author__ = "Jessey White-Cinis " +__copyright__ = "Copyright (c) 2019 Jessey White-Cinis" +__license__ = "MIT" +__version__ = "1.1.0" + +import os +import subprocess +import json + +def mute_on(): + '''Turns off dunst notifications''' + subprocess.run(["dunstctl", "set-paused", "true"], check=True) + return { + "full_text":"\uf1f6", + "DUNST_MUTE":"on" + } + +def mute_off(): + '''Turns back on dunst notifications''' + subprocess.run(["dunstctl", "set-paused", "false"], check=True) + return { + "full_text":"\uf0f3", + "DUNST_MUTE":"off" + } + +def clicked(): + '''Returns True if the button was clicked''' + button = "BLOCK_BUTTON" in os.environ and os.environ["BLOCK_BUTTON"] + return bool(button) + +def muted(): + '''Returns True if Dunst is muted''' + cmd = ['dunstctl', 'is-paused'] + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) + output = proc.communicate()[0] + return u'true' == output.strip().decode("UTF-8") + +if clicked(): + # toggle button click to turn mute on and off + if muted(): + RTN = mute_off() + else: + RTN = mute_on() + +else: + # Set default state using 'DUNST_MUTE' environment variable + if muted(): + RTN = mute_on() + else: + RTN = mute_off() + +print(json.dumps(RTN)) From 1ebd0a2d3032887ad13145910bfe8c8cbce4f27b Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 22 Jul 2021 16:38:50 +0200 Subject: [PATCH 11/48] i3: Modified dunst to use different Mouse bindings --- i3/.config/dunst/dunstrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/i3/.config/dunst/dunstrc b/i3/.config/dunst/dunstrc index 43fb6dd..55fe55d 100644 --- a/i3/.config/dunst/dunstrc +++ b/i3/.config/dunst/dunstrc @@ -254,8 +254,8 @@ # These values can be strung together for each mouse event, and # will be executed in sequence. mouse_left_click = do_action, close_current - mouse_middle_click = do_action, close_current - mouse_right_click = close_all + mouse_middle_click = close_all + mouse_right_click = close_current # Experimental features that may or may not work correctly. Do not expect them # to have a consistent behaviour across releases. From f5b78714ce0a898a34d09255a7c7a5195ba98858 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 25 Jul 2021 14:44:26 +0200 Subject: [PATCH 12/48] i3: Cleaned up i3blocks scripts --- i3/.config/i3blocks/battery-plus | 793 ------------------------------ i3/.config/i3blocks/calendar.test | 35 -- 2 files changed, 828 deletions(-) delete mode 100755 i3/.config/i3blocks/battery-plus delete mode 100644 i3/.config/i3blocks/calendar.test diff --git a/i3/.config/i3blocks/battery-plus b/i3/.config/i3blocks/battery-plus deleted file mode 100755 index 7cf8588..0000000 --- a/i3/.config/i3blocks/battery-plus +++ /dev/null @@ -1,793 +0,0 @@ -#!/usr/bin/env bash -# -# battery-plus -# -# An enhanced battery status indicator for i3blocks. -# -# Requires: -# awk (POSIX compatible) -# bc -# upower -# -# Recommended: -# fonts-font-awesome or fonts-hack -# -# Optional: -# notify-send or dunstify -- for notifications -# zenity -- for dialogs -# -# Copyright (c) 2018 Beau Hastings. All rights reserved. -# License: GNU General Public License v2 -# -# Author: Beau Hastings -# URL: https://github.com/hastinbe/i3blocks-battery-plus - -_PERCENT="%" - -# Hide the battery status if fully-charged, -_HIDE_IF_CHARGED=${_HIDE_IF_CHARGED:-false} - -# Color the battery symbol using gradient. -_USE_BATT_GRADIENT=${_USE_BATT_GRADIENT:-false} - -# Only show symbols. -_SYMBOLS_ONLY=${_SYMBOLS_ONLY:-false} - -# Hide the battery percentage -_HIDE_PERCENTAGE=${_HIDE_PERCENTAGE:-false} - -# Hide the battery time remaining -_HIDE_TIME_REMAINING=${_HIDE_TIME_REMAINING:-true} - -# Hide the time to charge the battery to full -_HIDE_TIME_TO_FULL=${_HIDE_TIME_TO_FULL:-true} - -# Show the direction of change for the battery's percentage -_SHOW_CHARGE_DIRECTION=${_SHOW_CHARGE_DIRECTION:-true} - -# Show an alert symbol when the battery capacity drops to the given percent (0=disable). -_CAPACITY_ALERT=${_CAPACITY_ALERT:-75} - -# Action to take when the battery level reaches critical. -_CRITICAL_ACTION=${_CRITICAL_ACTION:-"notify"} - -# Action to take when the battery level reaches low. -_LOW_ACTION=${_LOW_ACTION:-"notify"} - -# Method to use for notifications -_NOTIFY_PROGRAM=${_NOTIFY_PROGRAM:-"notify-send"} - -# The duration, in milliseconds, for the notification to appear on screen. -_NOTIFY_EXPIRES="1500" - -# Minimum time in seconds between notifications to prevent spam. -_NOTIFY_THROTTLE=${_NOTIFY_THROTTLE:-120} - -# Colors -_COLOR_FULLY_CHARGED=${_COLOR_FULLY_CHARGED:-""} -_COLOR_CHARGING=${_COLOR_CHARGING:-"yellow"} -_COLOR_DISCHARGING=${_COLOR_CHARGING:-"yellow"} -_COLOR_PENDING=${_COLOR_PENDING:-"blue"} -_COLOR_ERROR=${_COLOR_ERROR:-"red"} -_COLOR_BATTERY=${_COLOR_BATTERY:-"white"} -_COLOR_ALERT=${_COLOR_ALERT:-"orange"} -_COLOR_DIRECTIONAL_UP=${_COLOR_DIRECTIONAL_UP:-"green"} -_COLOR_DIRECTIONAL_DOWN=${_COLOR_DIRECTIONAL_DOWN:-"red"} -_COLOR_GRADIENT_START=${_COLOR_GRADIENT_START:-"#FF0000"} -_COLOR_GRADIENT_END=${_COLOR_GRADIENT_END:-"#00FF00"} - -# Symbols -_SYMBOL_FULLY_CHARGED=${_SYMBOL_FULLY_CHARGED:-""} -_SYMBOL_CHARGING=${_SYMBOL_CHARGING:-""} -_SYMBOL_DISCHARGING=${_SYMBOL_DISCHARGING:-""} -_SYMBOL_UNKNOWN=${_SYMBOL_UNKNOWN:-""} -_SYMBOL_PENDING=${_SYMBOL_PENDING:-""} -_SYMBOL_ERROR=${_SYMBOL_ERROR:-""} -_SYMBOL_ALERT=${_SYMBOL_ALERT:-""} -_SYMBOL_BATT_100=${_SYMBOL_BATT_100:-""} -_SYMBOL_BATT_75=${_SYMBOL_BATT_75:-""} -_SYMBOL_BATT_50=${_SYMBOL_BATT_50:-""} -_SYMBOL_BATT_25=${_SYMBOL_BATT_25:-""} -_SYMBOL_BATT_0=${_SYMBOL_BATT_0:-""} -_SYMBOL_DIRECTION_UP=${_SYMBOL_DIRECTION_UP:-"↑"} -_SYMBOL_DIRECTION_DOWN=${_SYMBOL_DIRECTION_DOWN:-"↓"} - -# Get a the system's temporary files directory. -# -# Notes: -# Executes a dry-run so we don't create a file. -# Linux doesn't require the template option, but MacOSX does. -# -# Returns: -# The path to the temporary directory. -get_temp_dir() { - echo $(dirname $(mktemp -ut "battery-plus.XXX")) -} - -# Output text wrapped in a span element -# -# Options: -# -c To specify a text color -# -# Arguments: -# $1 or $3 - String to encapsulate within a span -span() { - local -A attribs - local text="$*" - - if [ -n "$FONT" ]; then attribs[font]="$FONT"; fi - - if [ "$1" = "-c" ]; then - attribs[color]="$2" - text="${*:3}" - fi - - echo "$text" -} - -# Builds html element attributes -# -# Arguments: -# $1 - An associative array of attribute-value pairs -build_attribs() { - local -n array=$1 - for k in "${!array[@]}"; do - echo -n " $k='${array[$k]}'" - done - echo -} - -# Interpolate between 2 RGB colors -# -# Arguments: -# $1 - Color to interpolate from, as a hex triplet prefixed with # -# $2 - Color to interpolate to, as a hex triplet prefixed with # -# $3 - Amount of steps needed to get from start to end color -interpolate_rgb() { - local -i steps=$3 - local -a colors - local color1=$1 - local color2=$2 - local reversed=false - - if (( 0x${color1:1:5} > 0x${color2:1:5} )); then - color1=$2 - color2=$1 - reversed=true - fi - - printf -v startR "%d" 0x${color1:1:2} - printf -v startG "%d" 0x${color1:3:2} - printf -v startB "%d" 0x${color1:5:2} - printf -v endR "%d" 0x${color2:1:2} - printf -v endG "%d" 0x${color2:3:2} - printf -v endB "%d" 0x${color2:5:2} - - stepR=$(( ($endR - $startR) / $steps )) - stepG=$(( ($endG - $startG) / $steps )) - stepB=$(( ($endB - $startB) / $steps )) - - for i in $(seq 0 $steps); do - local -i R=$(( $startR + ($stepR * $i) )) - local -i G=$(( $startG + ($stepG * $i) )) - local -i B=$(( $startB + ($stepB * $i) )) - - colors+=( "$(printf "#%02x%02x%02x\n" $R $G $B)" ) - done - colors+=( "$(printf "#%02x%02x%02x\n" $endR $endG $endB)" ) - - if $reversed; then - reverse colors colors_reversed - echo "${colors_reversed[@]}" - else - echo "${colors[@]}" - fi -} - -# Reverse an array -# -# Arguments: -# $1 - Array to reverse -# $2 - Destination array -reverse() { - local -n arr="$1" rev="$2" - for i in "${arr[@]}" - do - rev=("$i" "${rev[@]}") - done -} - -min() { - echo "if ($1 < $2) $1 else $2" | bc -} - -max() { - echo "if ($1 > $2) $1 else $2" | bc -} - -clamp() { - echo $(min $(max $1 $2) $3) -} - -# Retrieve an item from the provided lookup table based on the percentage of a number -# -# Arguments: -# $1 - A number -# $2 - Number to get a percentage of -# $3 - An array of potential values -plookup() { - if [ -z "$2" -o -z "$3" ]; then - return - fi - - local table=( ${@:3} ) - local number2=${2%.*} - local number1=$(min ${1%.*} $number2) - local percent_max=$(( $number1 * $number2 / 100 )) - local index=$(( $percent_max * ${#table[@]} / 100 )) - - index=$(clamp $index 0 $(( ${#table[@]} - 1 )) ) - - echo ${table[$index]} -} - -# Get battery status. -# -# Returns: -# The battery's status or state. -get_battery_status() { - echo "$__UPOWER_INFO" | awk -W posix '$1 == "state:" {print $2}' -} - -# Get battery warning level. -# -# Returns: -# The battery's warning level. -get_battery_warning_level() { - echo "$__UPOWER_INFO" | awk -W posix '$1 == "warning-level:" {print $2}' -} - -# Get battery percentage. -# -# Returns: -# The battery's percentage, without the %. -get_battery_percent() { - echo "$__UPOWER_INFO" | awk -W posix '$1 == "percentage:" { gsub("%","",$2); print $2}' -} - -# Get battery capacity. -# -# Returns: -# The battery's capcity, without the %. -get_battery_capacity() { - echo "$__UPOWER_INFO" | awk -W posix '$1 == "capacity:" { gsub("%","",$2); print $2}' -} - -# Get battery time left. -# -# Returns: -# The battery's time left. -get_time_to_empty() { - echo "$__UPOWER_INFO" | awk -W posix -F':' '/time to empty:/{print $2}' | xargs -} - -# Get the time remaining until the battery is fully charged. -# -# Returns: -# The time remaining until battery is fully charged. -get_time_to_full() { - echo "$__UPOWER_INFO" | awk -W posix -F':' '/time to full:/{print $2}' | xargs -} - -# Get symbol for the given battery percentage. -# -# Arguments: -# $percent (int) Battery percentage. -# -# Returns: -# The battery symbol. -get_battery_charge_symbol() { - local percent="$1" - local symbol - - if [ "$battery_percentage" -ge 90 ]; then symbol="$_SYMBOL_BATT_100" - elif [ "$battery_percentage" -ge 70 ]; then symbol="$_SYMBOL_BATT_75" - elif [ "$battery_percentage" -ge 40 ]; then symbol="$_SYMBOL_BATT_50" - elif [ "$battery_percentage" -ge 20 ]; then symbol="$_SYMBOL_BATT_25" - else symbol="$_SYMBOL_BATT_0" - fi - - echo "$symbol" -} - -# Get battery status symbol. -# -# Returns: -# An symbol name, following the Symbol Naming Specification -get_battery_status_symbol() { - echo "$__UPOWER_INFO" | awk -W posix '$1 == "symbol-name:" {print $2}' -} - -# Get color for the given battery percentage. -# -# Arguments: -# $percent (int) Battery percentage. -# -# Returns: -# The color to use for the given battery percentage. -get_percentage_color() { - local colors=( $(interpolate_rgb "$_COLOR_GRADIENT_START" "$_COLOR_GRADIENT_END" 8) ) - echo $(plookup $1 100 ${colors[@]}) -} - -# Determines whether or not we can send a notification. -# -# Returns: -# 0 on false, 1 on true. -can_notify() { - local -i now=$(date +"%s") - local -i last=$(get_last_notify_time) - - if [ -z "$last" ]; then return 0; fi - - local -i diff=$(($now - $last)) - - [ $diff -gt $_NOTIFY_THROTTLE ] -} - -# Get the last time we sent a notification. -# -# Returns: -# Time in seconds since the Epoch. -get_last_notify_time() { - if [ -f "$TMP_NOTIFY" ]; then - echo $(stat -c '%Y' "$TMP_NOTIFY") - fi -} - -# Save the last time we sent a notification. -save_last_notify_time() { - touch -m "$TMP_NOTIFY" -} - -# Display the charging indicator. -# -# Returns: -# The charging indicator. -display_batt_charging() { - if [ -n "$_SYMBOL_CHARGING" ]; then - echo -n "$(span -c "${_COLOR_CHARGING}" "$_SYMBOL_CHARGING") " - fi - - echo "$colored_battery_symbol" -} - -# Display the discharging indicator. -# -# Returns: -# The discharging indicator. -display_batt_discharging() { - if [ -n "$_SYMBOL_DISCHARGING" ]; then - echo -n "$(span -c "${_COLOR_DISCHARGING}" "$_SYMBOL_DISCHARGING") " - fi - - echo "$battery_charge_symbol" -} - -# Display the pending charge indicator. -# -# Returns: -# The pending charge indicator. -display_batt_pending_charge() { - if [ -n "$_SYMBOL_PENDING" ]; then - echo -n "$(span -c "${_COLOR_PENDING}" "$_SYMBOL_PENDING") " - fi - - if [ -n "$_SYMBOL_CHARGING" ]; then - echo -n "$(span -c "${_COLOR_CHARGING}" "$_SYMBOL_CHARGING") " - fi - - echo "${battery_charge_symbol}" -} - -# Display the pending discharge indicator. -# -# Returns: -# The pending discharge indicator. -display_batt_pending_discharge() { - if [ -n "$_SYMBOL_PENDING" ]; then - echo -n "$(span -c "${_COLOR_PENDING}" "$_SYMBOL_PENDING") " - fi - - if [ -n "$_SYMBOL_DISCHARGING" ]; then - echo -n "$(span -c "${_COLOR_DISCHARGING}" "$_SYMBOL_DISCHARGING") " - fi - - echo "$colored_battery_symbol" -} - -# Display the empty battery indicator. -# -# Returns: -# The empty battery indicator. -display_batt_empty() { - echo "$battery_charge_symbol" -} - -# Display the fully charged indicator. -# -# Returns: -# The fully-charged indicator. -display_batt_fully_charged() { - if [ -n "$_SYMBOL_FULLY_CHARGED" ]; then - echo -n "$(span -c "${_COLOR_FULLY_CHARGED}" "$_SYMBOL_FULLY_CHARGED") " - fi - - echo "$battery_charge_symbol" -} - -# Display the unknown battery indicator. -# -# Returns: -# The unknonw battery indicator. -display_batt_unknown() { - if [ -n "$_SYMBOL_UNKNOWN" ]; then - echo -n "$(span "$_SYMBOL_UNKNOWN") " - fi - - echo "$(get_battery_charge_symbol 0)" -} - -# Display the battery error indicator. -# -# Returns: -# The battery error indicator. -display_batt_error() { - echo "$(span -c "${_COLOR_ERROR}" "$_SYMBOL_ERROR" "$_SYMBOL_BATT_0")" -} - -# Display the battery percentage. -# -# Returns: -# The battery percentage, or nothing if disabled. -display_percentage() { - if ! [ $_SYMBOLS_ONLY = true -o $_HIDE_PERCENTAGE = true ]; then - echo -n " $(span -c "${percentage_color}" "${battery_percentage:---}${_PERCENT}")" - - if [ "$status" = "charging" ] && $_SHOW_CHARGE_DIRECTION; then - echo -n "$(span -c "${_COLOR_DIRECTIONAL_UP}" "${_SYMBOL_DIRECTION_UP}")" - elif [ "$status" = "discharging" ] && $_SHOW_CHARGE_DIRECTION; then - echo -n "$(span -c "${_COLOR_DIRECTIONAL_DOWN}" "${_SYMBOL_DIRECTION_DOWN}")" - fi - - echo - fi -} - -# Display the battery time remaining. -# -# Arguments: -# $force (bool) Force display. -# -# Returns: -# The time remaining, or nothing if disabled. -display_time_remaining() { - local force=${1:-false} - - if [ $force = true ] || ! [ $_SYMBOLS_ONLY = true -o $_HIDE_TIME_REMAINING = true ]; then - time_to_empty=$(get_time_to_empty "$battery_info") - if [ -n "$time_to_empty" ]; then - echo "$time_to_empty" - fi - fi -} - -# Display the battery time to fully charge. -# -# Arguments: -# $force (bool) Force display. -# -# Returns: -# The time to fully charge, or nothing if disabled. -display_time_to_full() { - local force=${1:-false} - - if [ $force = true ] || ! [ $_SYMBOLS_ONLY = true -o $_HIDE_TIME_TO_FULL = true ]; then - time_to_full=$(get_time_to_full "$battery_info") - if [ -n "$time_to_full" ]; then - echo "$time_to_full" - fi - fi -} - -# Displays an array of segments. -# -# Arguments: -# $segments (array) The an array of segments. -# -# Returns: -# Each segment after another, followed by a newline. -display_segments() { - local -a segments="$@" - - for segment in "${segments[@]}"; do - if [ -n "$segment" ]; then - echo -n "$segment" - fi - done - - echo -} - -# Colors text using either the first or second color -# -# Arguments: -# $1 - Text -# $2 - Color to use if toggle is false -# $3 - Color to use if toggle is true -# $4 - A boolean used to toggle between colors -# -# Returns: -# The colored text -multicolor() { - local color="$2" - local toggle=$4 - - if $toggle && [ -n "$3" ]; then - color="$3" - fi - - if [ -n "$color" ]; then - echo "$(span -c "$color" "$1")" - else - echo "$(span "$1")" - fi -} - - -# Display a notification. -# -# Arguments: -# $text (string) The notification text. -# $symbol (string) Name of an symbol. -# $type (string) The type of notification. -# $force (string) Force the notification, ignoring any throttle. -# $rest (string) Any additional options to pass to the command. -notify() { - local text="$1" - local symbol="$2" - local type="$3" - local force="$4" - local rest="${@:5}" - local command - - if [ -z "$text" ] || ! $force && ! $(can_notify); then return; fi - - if [ "$_NOTIFY_PROGRAM" = "dunstify" ]; then - command="dunstify -r 1001" - elif [ "$_NOTIFY_PROGRAM" = "notify-send" ]; then - command="notify-send" - fi - - if [ -n "$_NOTIFY_EXPIRES" ]; then command="$command -t $_NOTIFY_EXPIRES"; fi - if [ -n "$symbol" ]; then command="$command -i $symbol"; fi - if [ -n "$type" ]; then command="$command -u $type"; fi - - command="$command $rest \"$text\"" - if eval $command; then - save_last_notify_time - fi -} - -# Display a dialog. -# -# Arguments: -# $text (string) The dialog text. -# $symbol (string) Name of an symbol. -# $type (string) The type of dialog. -# $rest (string) Any additional options to pass to the command. -dialog() { - local text="$1" - local symbol="$2" - local type="$3" - local rest="${@:4}" - - if [ -z "$text" ]; then - return - fi - - command="zenity" - - if [ -n "$symbol" ]; then command="$command --symbol-name=\"$symbol\""; fi - if [ -n "$type" ]; then command="$command --${type}"; fi - - command="$command --text=\"$text\" $rest" - eval $command -} - -# Display program usage. -usage() { - echo -e "Usage: $0 [options] -Display the battery status using upower for i3blocks.\n -Options: - -a \taction to take when battery is low - -A \t\tcolor of the alert symbol - -B \t\tcolor of the battery symbol - -c \t\tset battery capacity alert percentage (0=disable) - -C \t\tcolor of the charging symbol - -d\t\t\tshow the direction of change for the battery's percentage - -D \t\tcolor of the discharging symbol - -e \texpiration time of notifications (Ubuntu's Notify OSD and GNOME Shell both ignore this parameter.) - -E \t\tcolor of the battery error symbol - -f \t\tfont for text and symbols - -F \t\tcolor of the fully-charged symbol - -G\t\t\tcolor the battery symbol according to battery percentage - -h\t\t\tdisplay this help and exit - -H\t\t\tsuppress displaying if battery is fully-charged - -i \t\tcolor gradient start color - -I\t\t\tonly display symbols - -j \t\tcolor gradient end color - -J \t\tsymbol for a battery 100% charged - -k\t\t\thide the battery percentage - -K \t\tsymbol for a battery 75% charged - -l \taction to take when the battery level reaches critical - -L \t\tsymbol to indicate there is an alert - -M \t\tsymbol for a battery 50% charged - -n \t\ta libnotify compatible notification program - -N \t\tcolor of the battery charge decreasing indicator - -O \t\tsymbol for a battery with no/low charge - -p \t\tsymbol to use for the percent sign - -P \t\tcolor of the pending charge symbol - -Q \t\tsymbol for a battery 25% charged - -r\t\t\thide the battery time remaining - -R \t\tsymbol to indicate the battery state is undefined - -S \t\tsymbol to indicate battery is fully charged - -t \t\tminimum time in seconds between notifications to prevent spam - -T \t\tsymbol to indicate the battery is charging - -u\t\t\thide the time to charge the battery to full - -U \t\tcolor of the battery charge increasing indicator - -V \t\tsymbol to indicate the battery state is unknown - -W \t\tsymbol to indicate battery charge is increasing - -X \t\tsymbol to indicate the battery state is pending - -Y \t\tsymbol to indicate the battery is discharging - -Z \t\tsymbol to indicate battery charge is decreasing -" 1>&2 - exit 1 -} - -############################################################################### - -declare -a long_segments -declare -a short_segments - -__UPOWER_INFO=$(upower --show-info "/org/freedesktop/UPower/devices/battery_${BLOCK_INSTANCE:-BAT0}") -TMP_NOTIFY="$(get_temp_dir)/battery-plus.last_notify" - -while getopts "a:A:B:c:C:dD:e:E:F:GhHi:Ij:J:kK:l:L:M:n:N:O:p:P:Q:rR:S:t:T:uU:V:W:X:Y:Z:" o; do - case "$o" in - a) _LOW_ACTION="${OPTARG}" ;; - A) _COLOR_ALERT="${OPTARG}" ;; - B) _COLOR_BATTERY="${OPTARG}" ;; - c) _CAPACITY_ALERT="${OPTARG}" ;; - C) _COLOR_CHARGING="${OPTARG}" ;; - d) _SHOW_CHARGE_DIRECTION=true ;; - D) _COLOR_DISCHARGING="${OPTARG}" ;; - e) _NOTIFY_EXPIRES="${OPTARG}" ;; - E) _COLOR_ERROR="${OPTARG}" ;; - F) _COLOR_FULLY_CHARGED="${OPTARG}" ;; - G) _USE_BATT_GRADIENT=true ;; - h | *) usage ;; - H) _HIDE_IF_CHARGED=true ;; - i) _COLOR_GRADIENT_START="${OPTARG}" ;; - I) _SYMBOLS_ONLY=true ;; - j) _COLOR_GRADIENT_END="${OPTARG}" ;; - J) _SYMBOL_BATT_100="${OPTARG}" ;; - k) _HIDE_PERCENTAGE=true ;; - K) _SYMBOL_BATT_75="${OPTARG}" ;; - l) _CRITICAL_ACTION="${OPTARG}" ;; - L) _SYMBOL_ALERT="${OPTARG}" ;; - M) _SYMBOL_BATT_50="${OPTARG}" ;; - n) _NOTIFY_PROGRAM="${OPTARG}" ;; - N) _COLOR_DIRECTIONAL_DOWN="${OPTARG}" ;; - O) _SYMBOL_BATT_0="${OPTARG}" ;; - p) _PERCENT="${OPTARG}" ;; - P) _COLOR_PENDING="${OPTARG}" ;; - Q) _SYMBOL_BATT_25="${OPTARG}" ;; - r) _HIDE_TIME_REMAINING=true ;; - R) _SYMBOL_ERROR="${OPTARG}" ;; - S) _SYMBOL_FULLY_CHARGED="${OPTARG}" ;; - t) _NOTIFY_THROTTLE="${OPTARG}" ;; - T) _SYMBOL_CHARGING="${OPTARG}" ;; - u) _HIDE_TIME_TO_FULL=true ;; - U) _COLOR_DIRECTIONAL_UP="${OPTARG}" ;; - V) _SYMBOL_UNKNOWN="${OPTARG}" ;; - W) _SYMBOL_DIRECTION_UP="${OPTARG}" ;; - X) _SYMBOL_PENDING="${OPTARG}" ;; - Y) _SYMBOL_DISCHARGING="${OPTARG}" ;; - Z) _SYMBOL_DIRECTION_DOWN="${OPTARG}" ;; - esac -done -shift $((OPTIND-1)) # Shift off options and optional -- - -battery_percentage=$(get_battery_percent) -percentage_color=$(get_percentage_color "$battery_percentage") -capacity=$(get_battery_capacity) -battery_charge_symbol=$(get_battery_charge_symbol "$battery_percentage") -battery_status_symbol=$(get_battery_status_symbol) -colored_battery_symbol=$(multicolor "$battery_charge_symbol" "$_COLOR_BATTERY" "$percentage_color" $_USE_BATT_GRADIENT) -warning_level=$(get_battery_warning_level) - -# Handle battery warning levels -case "$warning_level" in - critical) - case "$_CRITICAL_ACTION" in - notify) $(notify "$(span "Your battery level is ${warning_level}!")" "$battery_status_symbol" "critical" false "-c device") ;; - esac - ;; - low) - case "$_LOW_ACTION" in - notify) $(notify "$(span "Your battery level is ${warning_level}")" "$battery_status_symbol" "normal" false "-c device") ;; - esac - ;; -esac - -# Displayable alerts -if [ "$_CAPACITY_ALERT" -gt 0 ] && [ "${capacity%.*}" -le $_CAPACITY_ALERT ]; then - CAPACITY_TRIGGERED=true - long_segments+=( "$(span -c "$_COLOR_ALERT" "$_SYMBOL_ALERT") " ) -fi - -# Battery statuses -status=$(get_battery_status) -case "$status" in - charging) long_segments+=( "$(display_batt_charging)" ) ;; - discharging) long_segments+=( "$(display_batt_discharging)" ) ;; - empty) long_segments+=( "$(display_batt_empty)" ) ;; - fully-charged) - if $_HIDE_IF_CHARGED; then - exit 0 - fi - long_segments+=( "$(display_batt_fully_charged)" ) - ;; - pending-charge) long_segments+=( "$(display_batt_pending_charge)" ) ;; - pending-discharge) long_segments+=( "$(display_batt_pending_discharge)" ) ;; - unknown) long_segments+=( "$(display_batt_unknown)" ) ;; - *) long_segments+=( "$(display_batt_error)" ) ;; -esac - -# Since long_segments contains no text at this point, lets use it for the short_text -short_segments=( "${long_segments[@]}" ) - -# Append all text segments -long_segments+=( "$(display_percentage)" ) -if [ -n "$(display_time_remaining)" ]; then - long_segments+=( "($(display_time_remaining))" ) -fi -if [ -n "$(display_time_to_full)" ]; then - long_segments+=( "($(display_time_to_full))" ) -fi - -# Display the block long_text -display_segments ${long_segments[@]} - -# Display the block short_text -display_segments ${short_segments[@]} - -# Handle click events -case $BLOCK_BUTTON in - 1) - if [ -n "$CAPACITY_TRIGGERED" ]; then - $(dialog "$(span "Your battery capacity has reduced to ${capacity%.*}${_PERCENT}!")" "battery-caution" "warning" "--no-wrap") - else - if [ "$status" = "discharging" ]; then - $(notify "$(span "$(display_time_remaining true) remaining")" "alarm-symbolic" "normal" true "-c device") - elif [ "$status" = "charging" ]; then - $(notify "$(span "$(display_time_to_full true) until fully charged")" "alarm-symbolic" "normal" true "-c device") - fi - fi - ;; -esac - -if [ -n "$battery_percentage" ] && [ "$battery_percentage" -le 5 ]; then - exit 33 -fi diff --git a/i3/.config/i3blocks/calendar.test b/i3/.config/i3blocks/calendar.test deleted file mode 100644 index 78fdc7c..0000000 --- a/i3/.config/i3blocks/calendar.test +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"} -SHORTFMT=${SHORTFMT:-"+%H:%M:%S"} - -OPTIND=1 -while getopts ":f:" opt; do - case $opt in - f) DATEFMT="$OPTARG" ;; - \?) - echo "Invalid option: -$OPTARG" >&2 - exit 1 - ;; - :) - echo "Option -$OPTARG requires an argument." >&2 - exit 1 - ;; - esac -done - -case "$BLOCK_BUTTON" in - 1|2|3) - # Try to focus Thunderbird - i3-msg -q [class="Thunderbird" instance="Mail"] focus - if [ $? == 2 ] - then - # Open Thunderbird if it was not open - i3-msg -q "exec thunderbird -mail -calendar" - else - # Open calendar - xdotool key --clearmodifiers --delay 5 ctrl+shift+c - fi -esac -echo "$LABEL$(date "$DATEFMT")" -echo "$LABEL$(date "$SHORTFMT")" From a79ee805eb75255ee805886fb4ee299b5bd99c2d Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 9 Sep 2021 11:25:26 +0200 Subject: [PATCH 13/48] i3: fixed dependencies and rofi config --- dependencies | 1 + i3/.config/rofi/config.rasi | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies b/dependencies index 68c7317..8e5decb 100644 --- a/dependencies +++ b/dependencies @@ -5,6 +5,7 @@ firefox i3exit i3-scrot i3-wm +i3blocks libqalculate nextcloud pavucontrol diff --git a/i3/.config/rofi/config.rasi b/i3/.config/rofi/config.rasi index aa1b16a..dd3277a 100644 --- a/i3/.config/rofi/config.rasi +++ b/i3/.config/rofi/config.rasi @@ -152,13 +152,12 @@ configuration { /* me-accept-custom: "Control+MouseDPrimary";*/ } - /*Dracula theme based on the Purple official rofi theme*/ * { font: "Jetbrains Mono 14"; foreground: #f8f8f2; - background-color: #282a36; + background: #282a36; active-background: #6272a4; urgent-background: #ff5555; selected-background: @active-background; From 7dd21761f639e03344da0bfe900cfe1081d3fdc7 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 9 Sep 2021 11:27:01 +0200 Subject: [PATCH 14/48] i3: Changes for aurora --- i3/.config/i3/config | 32 ++++++++------------------------ i3/.config/i3blocks/config | 11 ----------- 2 files changed, 8 insertions(+), 35 deletions(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index 009fa02..b8a6e4a 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -159,21 +159,6 @@ bindsym $mod+Shift+8 move container to workspace number $ws8; workspace $ws8 bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9 bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10 -# Monitor config -set $monitor_left DVI-D-0 -set $monitor_right DVI-D-1 - -workspace $ws1 output $monitor_left -workspace $ws2 output $monitor_left -workspace $ws3 output $monitor_left -workspace $ws4 output $monitor_left -workspace $ws5 output $monitor_left -workspace $ws6 output $monitor_right -workspace $ws7 output $monitor_right -workspace $ws8 output $monitor_right -workspace $ws9 output $monitor_right -workspace $ws10 output $monitor_right - # reload the configuration file #bindsym $mod+Shift+c reload # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) @@ -212,8 +197,7 @@ bindsym $mod+r mode "resize" # finds out, if available) bar { status_command i3blocks - tray_output $monitor_left - position top + position bottom i3bar_command i3bar --transparency } @@ -297,13 +281,13 @@ for_window [class="Pamac-updater"] floating enable for_window [window_role=floating] floating enable ########## Autostart applications ########## -exec --no-startup-id "i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-chat.json'" +#exec --no-startup-id "i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-chat.json'" -exec firefox -exec thunderbird -exec chat.rocket.RocketChat no_focus -exec element-desktop no_focus -exec telegram-desktop no_focus +#exec firefox +#exec thunderbird +#exec chat.rocket.RocketChat no_focus +#exec element-desktop no_focus +#exec telegram-desktop no_focus exec --no-startup-id nm-applet exec --no-startup-id xfce4-power-manager @@ -324,5 +308,5 @@ exec --no-startup-id dunst -config /home/julian/.config/dunst/dunstrc # Default workspaces at startup (no need because autostart applications get always focused) #exec --no-startup-id i3-msg workspace $ws1 -exec --no-startup-id i3-msg workspace $ws10 +#exec --no-startup-id i3-msg workspace $ws10 diff --git a/i3/.config/i3blocks/config b/i3/.config/i3blocks/config index d46c16d..d0bd0b6 100644 --- a/i3/.config/i3blocks/config +++ b/i3/.config/i3blocks/config @@ -13,17 +13,6 @@ separator=true separator_block_width=15 -[activity] -command=./activity -interval=10 -LABEL= - -[dunst] -command=./dunst -markup=pango -interval=once -format=json - [volume] command=./volume LABEL= From 3324a9576e5c80fb1bf97a7d741544ca3b5fe259 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 9 Sep 2021 11:58:20 +0200 Subject: [PATCH 15/48] doom: dont use unnecessary packets --- emacs/.config/doom/init.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/emacs/.config/doom/init.el b/emacs/.config/doom/init.el index 49f9d98..c9ed14f 100644 --- a/emacs/.config/doom/init.el +++ b/emacs/.config/doom/init.el @@ -55,7 +55,7 @@ (evil +everywhere); come to the dark side, we have cookies file-templates ; auto-snippets for empty files fold ; (nigh) universal code folding - ;;(format +onsave) ; automated prettiness + format ;; +onsave ; automated prettiness ;;god ; run Emacs commands without modifier keys ;;lispy ; vim for lisp, for people who don't like vim ;;multiple-cursors ; editing in many places at once @@ -112,14 +112,14 @@ :lang ;;agda ; types of types of types of types... ;;beancount ; mind the GAAP - (cc +lsp) ; C > C++ == 1 + ;;(cc +lsp) ; C > C++ == 1 ;;clojure ; java with a lisp ;;common-lisp ; if you've seen one lisp, you've seen them all ;;coq ; proofs-as-programs ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans ;;data ; config/data formats - ;;(dart +flutter) ; paint ui and not much else + (dart +flutter +lsp) ; paint ui and not much else ;;elixir ; erlang done right ;;elm ; care for a cup of TEA? emacs-lisp ; drown in parentheses @@ -139,7 +139,7 @@ ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) ;; julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) - latex ; writing papers in Emacs has never been so fun + ;;latex ; writing papers in Emacs has never been so fun ;;lean ; for folks with too much to prove ;;ledger ; be audit you can be ;;lua ; one-based indices? one-based indices @@ -147,7 +147,7 @@ ;;nim ; python + lisp at the speed of c ;;nix ; I hereby declare "nix geht mehr!" ;;ocaml ; an objective camel - org ; organize your plain life in plain text + ;;org ; organize your plain life in plain text ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional @@ -158,16 +158,16 @@ ;;rest ; Emacs as a REST client ;;rst ; ReST in peace ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} - rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;;scala ; java, but good ;;(scheme +guile) ; a fully conniving family of lisps - sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sh ; she sells {ba,z,fi}sh shells on the C xor ;;sml ;;solidity ; do you need a blockchain? No. ;;swift ; who asked for emoji variables? ;;terra ; Earth and Moon in alignment for performance. ;;web ; the tubes - ;;yaml ; JSON, but readable + yaml ; JSON, but readable ;;zig ; C, but simpler :email From cf62007567e3009735633f0275349e27dc8a3c54 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 9 Sep 2021 12:17:08 +0200 Subject: [PATCH 16/48] i3: Changed setupZoom --- i3/.config/i3/scripts/setupZoom | 2 +- i3/.config/i3/workspace-zoom.json | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/i3/.config/i3/scripts/setupZoom b/i3/.config/i3/scripts/setupZoom index a41a0a4..ad5a345 100755 --- a/i3/.config/i3/scripts/setupZoom +++ b/i3/.config/i3/scripts/setupZoom @@ -2,5 +2,5 @@ zoom & -i3-msg "workspace --no-auto-back-and-forth 5; exec mousepad /home/julian/Nextcloud/studium/zoom.txt" +#i3-msg "workspace --no-auto-back-and-forth 5; exec mousepad /home/julian/Nextcloud/studium/zoom.txt" i3-msg "workspace --no-auto-back-and-forth 5; append_layout ~/.config/i3/workspace-zoom.json" diff --git a/i3/.config/i3/workspace-zoom.json b/i3/.config/i3/workspace-zoom.json index 295d350..c226769 100644 --- a/i3/.config/i3/workspace-zoom.json +++ b/i3/.config/i3/workspace-zoom.json @@ -1,6 +1,6 @@ // vim:ts=4:sw=4:et { - "border": "normal", + "border": "pixel", "current_border_width": 2, "floating": "auto_off", "geometry": { @@ -23,7 +23,7 @@ { // splitv split container with 2 children - "border": "normal", + "border": "pixel", "floating": "auto_off", "layout": "splitv", "percent": 0.2, @@ -31,14 +31,14 @@ "nodes": [ { // splith split container with 1 children - "border": "normal", + "border": "pixel", "floating": "auto_off", "layout": "splith", "percent": 0.5, "type": "con", "nodes": [ { - "border": "normal", + "border": "pixel", "current_border_width": 2, "floating": "auto_off", "geometry": { @@ -61,7 +61,7 @@ ] }, { - "border": "normal", + "border": "pixel", "current_border_width": 2, "floating": "user_off", "geometry": { From b044299ff6edc210c8e7d5b8a79eaf7e77acce7c Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 9 Sep 2021 15:24:48 +0200 Subject: [PATCH 17/48] manjaro: added custom localization --- manjaro/.xprofile | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 manjaro/.xprofile diff --git a/manjaro/.xprofile b/manjaro/.xprofile new file mode 100644 index 0000000..59af00d --- /dev/null +++ b/manjaro/.xprofile @@ -0,0 +1,13 @@ +export LANG=en_US.utf8 +export LC_CTYPE="en_US.utf8" +export LC_NUMERIC="de_DE.utf8" +export LC_TIME="en_US.utf8" +export LC_COLLATE="en_US.utf8" +export LC_MONETARY="de_DE.utf8" +export LC_MESSAGES="en_US.utf8" +export LC_PAPER="en_US.utf8" +export LC_NAME="en_US.utf8" +export LC_ADDRESS="en_US.utf8" +export LC_TELEPHONE="en_US.utf8" +export LC_MEASUREMENT="en_US.utf8" +export LC_IDENTIFICATION="en_US.utf8" From 99c3e5223052525eaec5015f2ef4a60f1b323f77 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 9 Sep 2021 15:43:36 +0200 Subject: [PATCH 18/48] vim: add vimrc --- vim/.vimrc | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 vim/.vimrc diff --git a/vim/.vimrc b/vim/.vimrc new file mode 100644 index 0000000..57fcd45 --- /dev/null +++ b/vim/.vimrc @@ -0,0 +1,164 @@ +" URL: https://vim.wikia.com/wiki/Example_vimrc +" Authors: https://vim.wikia.com/wiki/Vim_on_Libera_Chat +" Description: A minimal, but feature rich, example .vimrc. If you are a +" newbie, basing your first .vimrc on this file is a good choice. +" If you're a more advanced user, building your own .vimrc based +" on this file is still a good idea. + +"------------------------------------------------------------ +" Features {{{1 +" +" These options and commands enable some very useful features in Vim, that +" no user should have to live without. + +" Set 'nocompatible' to ward off unexpected things that your distro might +" have made, as well as sanely reset options when re-sourcing .vimrc +set nocompatible + +" Attempt to determine the type of a file based on its name and possibly its +" contents. Use this to allow intelligent auto-indenting for each filetype, +" and for plugins that are filetype specific. +if has('filetype') + filetype indent plugin on +endif + +" Enable syntax highlighting +if has('syntax') + syntax on +endif + +"------------------------------------------------------------ +" Must have options {{{1 +" +" These are highly recommended options. + +" Vim with default settings does not allow easy switching between multiple files +" in the same editor window. Users can use multiple split windows or multiple +" tab pages to edit multiple files, but it is still best to enable an option to +" allow easier switching between files. +" +" One such option is the 'hidden' option, which allows you to re-use the same +" window and switch from an unsaved buffer without saving it first. Also allows +" you to keep an undo history for multiple files when re-using the same window +" in this way. Note that using persistent undo also lets you undo in multiple +" files even in the same window, but is less efficient and is actually designed +" for keeping undo history after closing Vim entirely. Vim will complain if you +" try to quit without saving, and swap files will keep you safe if your computer +" crashes. +set hidden + +" Note that not everyone likes working this way (with the hidden option). +" Alternatives include using tabs or split windows instead of re-using the same +" window as mentioned above, and/or either of the following options: +" set confirm +" set autowriteall + +" Better command-line completion +set wildmenu + +" Show partial commands in the last line of the screen +set showcmd + +" Highlight searches (use to temporarily turn off highlighting; see the +" mapping of below) +set hlsearch + +" Modelines have historically been a source of security vulnerabilities. As +" such, it may be a good idea to disable them and use the securemodelines +" script, . +" set nomodeline + + +"------------------------------------------------------------ +" Usability options {{{1 +" +" These are options that users frequently set in their .vimrc. Some of them +" change Vim's behaviour in ways which deviate from the true Vi way, but +" which are considered to add usability. Which, if any, of these options to +" use is very much a personal preference, but they are harmless. + +" Use case insensitive search, except when using capital letters +set ignorecase +set smartcase + +" Allow backspacing over autoindent, line breaks and start of insert action +set backspace=indent,eol,start + +" When opening a new line and no filetype-specific indenting is enabled, keep +" the same indent as the line you're currently on. Useful for READMEs, etc. +set autoindent + +" Stop certain movements from always going to the first character of a line. +" While this behaviour deviates from that of Vi, it does what most users +" coming from other editors would expect. +set nostartofline + +" Display the cursor position on the last line of the screen or in the status +" line of a window +set ruler + +" Always display the status line, even if only one window is displayed +set laststatus=2 + +" Instead of failing a command because of unsaved changes, instead raise a +" dialogue asking if you wish to save changed files. +set confirm + +" Use visual bell instead of beeping when doing something wrong +set visualbell + +" And reset the terminal code for the visual bell. If visualbell is set, and +" this line is also included, vim will neither flash nor beep. If visualbell +" is unset, this does nothing. +set t_vb= + +" Enable use of the mouse for all modes +if has('mouse') + set mouse=a +endif + +" Set the command window height to 2 lines, to avoid many cases of having to +" "press to continue" +set cmdheight=2 + +" Display line numbers on the left +set number relativenumber + +" Quickly time out on keycodes, but never time out on mappings +set notimeout ttimeout ttimeoutlen=200 + +" Use to toggle between 'paste' and 'nopaste' +set pastetoggle= + + +"------------------------------------------------------------ +" Indentation options {{{1 +" +" Indentation settings according to personal preference. + +" Indentation settings for using 4 spaces instead of tabs. +" Do not change 'tabstop' from its default value of 8 with this setup. +set shiftwidth=4 +set softtabstop=4 +set expandtab + +" Indentation settings for using hard tabs for indent. Display tabs as +" four characters wide. +"set shiftwidth=4 +"set tabstop=4 + + +"------------------------------------------------------------ +" Mappings {{{1 +" +" Useful mappings + +" Map Y to act like D and C, i.e. to yank until EOL, rather than act as yy, +" which is the default +map Y y$ + +" Map (redraw screen) to also turn off search highlighting until the +" next search +nnoremap :nohl + +"------------------------------------------------------------ From 640eca56f45ddae9026222b619047c0f9c490b2e Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Fri, 10 Sep 2021 19:21:21 +0200 Subject: [PATCH 19/48] emacs: Tried python settings --- emacs/.config/doom/config.el | 10 ++++++++++ emacs/.config/doom/init.el | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/emacs/.config/doom/config.el b/emacs/.config/doom/config.el index 99df48a..dfb8805 100644 --- a/emacs/.config/doom/config.el +++ b/emacs/.config/doom/config.el @@ -100,6 +100,16 @@ (message "Dictionary switched from %s to %s" dic change) )) +;; Python settings +;; (add-hook 'python-mode-hook (lambda () + ;; (setq flycheck-checker 'python-pylint))) + +;; (add-hook 'pyhon-mode-local-vars-hook +;; (lambda () +;; (when (flycheck-may-enable-checker 'lsp) +;; (flycheck-select-checker 'python-pylint)))) + + ;; (autoload 'matlab-mode "matlab" "Matlab Editing Mode" t) ;; (add-to-list ;; 'auto-mode-alist diff --git a/emacs/.config/doom/init.el b/emacs/.config/doom/init.el index c9ed14f..2703008 100644 --- a/emacs/.config/doom/init.el +++ b/emacs/.config/doom/init.el @@ -151,7 +151,7 @@ ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional - (python +lsp) ; beautiful is better than ugly + (python +lsp +pyright) ; beautiful is better than ugly ;;qt ; the 'cutest' gui framework ever ;;racket ; a DSL for DSLs ;;raku ; the artist formerly known as perl6 From cec1881959e9a6bf16a7ce9a8e91f536c27767a5 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sat, 11 Sep 2021 14:22:10 +0200 Subject: [PATCH 20/48] i3: change i3lock color, add background image --- i3/.config/i3/config | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index b8a6e4a..9ceafe9 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -11,6 +11,7 @@ set $mod Mod4 set $scripts ~/.config/i3/scripts +set $lock "i3lock --ignore-empty-password --color=000000" # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. @@ -23,9 +24,9 @@ font pango:monospace 12 # 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 +# xss-lock grabs a logind suspend inhibit lock and will use $lock to lock the # screen before suspend. Use loginctl lock-session to lock your screen. -exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork +exec --no-startup-id xss-lock --transfer-sleep-lock -- $lock --nofork # 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. @@ -204,7 +205,7 @@ bar { set $mode_system System (l) lock, (e) logout, (r) reboot, (s) shutdown mode "$mode_system" { - bindsym l exec --no-startup-id i3lock, mode "default" + bindsym l exec --no-startup-id $lock, mode "default" bindsym e exec --no-startup-id i3exit logout, mode "default" bindsym r exec --no-startup-id i3exit reboot, mode "default" bindsym s exec --no-startup-id i3exit shutdown, mode "default" @@ -280,7 +281,12 @@ for_window [class="Pamac-updater"] floating enable # for_window [window_role=floating] floating enable +for_window [class="Viewnior"] border normal + ########## Autostart applications ########## +# Fixes Aurora screen not finding hdmi +exec_always ~/.screenlayout/one-screen.sh + #exec --no-startup-id "i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-chat.json'" #exec firefox @@ -302,7 +308,7 @@ exec --no-startup-id msm_notifier exec --no-startup-id start-pulseaudio-x11 # Background #exec --no-startup-id feh --randomize --bg-fill /home/julian/Pictures/Hintergrundbilder/* -exec --no-startup-id feh --bg-fill /home/julian/Pictures/Hintergrundbilder/space.jpg +exec --no-startup-id feh --bg-fill /home/julian/Bilder/background.jpg # Notifications exec --no-startup-id dunst -config /home/julian/.config/dunst/dunstrc From d699cfffdd5c128ec74d9d046e31bd8fa632d6bb Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Mon, 13 Sep 2021 10:56:23 +0200 Subject: [PATCH 21/48] i3: Use xfce4-notifyd because I could not disable dunst for other users --- i3/.config/i3/config | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index 9ceafe9..46be7e9 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -296,6 +296,7 @@ exec_always ~/.screenlayout/one-screen.sh #exec telegram-desktop no_focus exec --no-startup-id nm-applet +exec --no-startup-id blueman-applet exec --no-startup-id xfce4-power-manager exec --no-startup-id nextcloud # Authentication agent @@ -310,7 +311,8 @@ exec --no-startup-id start-pulseaudio-x11 #exec --no-startup-id feh --randomize --bg-fill /home/julian/Pictures/Hintergrundbilder/* exec --no-startup-id feh --bg-fill /home/julian/Bilder/background.jpg # Notifications -exec --no-startup-id dunst -config /home/julian/.config/dunst/dunstrc +# exec --no-startup-id dunst -config /home/julian/.config/dunst/dunstrc +exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd # Default workspaces at startup (no need because autostart applications get always focused) #exec --no-startup-id i3-msg workspace $ws1 From 215c2a1f634c06cf29cfc87b16bfde4e85a2a518 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Mon, 27 Sep 2021 15:12:06 +0200 Subject: [PATCH 22/48] emacs: add next error shortcut, fix flutter --- emacs/.config/doom/config.el | 4 ++++ emacs/.config/doom/init.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/emacs/.config/doom/config.el b/emacs/.config/doom/config.el index dfb8805..cacace4 100644 --- a/emacs/.config/doom/config.el +++ b/emacs/.config/doom/config.el @@ -63,6 +63,9 @@ (map! :desc "Decrease font size" :n "C--" #'text-scale-decrease) (map! :desc "Reset font size" :n "C-=" #'doom/reset-font-size) +(map! :desc "Flycheck next error" :nv "g n" #'flycheck-next-error) +(map! :desc "Flycheck previous error" :nv "g N" #'flycheck-previous-error) + ;; Org-mode custom keybindings ;; (map! :map org-mode-map :nvi "C-k" #'org-backward-element) @@ -89,6 +92,7 @@ #'flyspell-prog-mode) (setq ispell-dictionary "english") +(setq lsp-dart-flutter-sdk-dir "/home/julian/snap/flutter/common/flutter") (map! :map doom-leader-toggle-map :desc "Toggle dictionary" "d" #'fd-switch-dictionary) diff --git a/emacs/.config/doom/init.el b/emacs/.config/doom/init.el index 2703008..96314cf 100644 --- a/emacs/.config/doom/init.el +++ b/emacs/.config/doom/init.el @@ -147,7 +147,7 @@ ;;nim ; python + lisp at the speed of c ;;nix ; I hereby declare "nix geht mehr!" ;;ocaml ; an objective camel - ;;org ; organize your plain life in plain text + org ; organize your plain life in plain text ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional From 17b80372c896c3b28bd9e073a6287ce98707a125 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Tue, 23 Nov 2021 16:23:46 +0000 Subject: [PATCH 23/48] doom: evil-snipe remapping, rust-setup, company-quickhelp --- emacs/.config/doom/config.el | 19 ++++++++++++++++++- emacs/.config/doom/init.el | 2 +- emacs/.config/doom/packages.el | 2 ++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/emacs/.config/doom/config.el b/emacs/.config/doom/config.el index cacace4..927d591 100644 --- a/emacs/.config/doom/config.el +++ b/emacs/.config/doom/config.el @@ -75,7 +75,7 @@ ;; Spell checking settings -;; TODO make toggling of spell checking ('SPC t s') use flyspell-mode in text modes and flyspell-prog-mode in programming modes (see hooks below) +;; TODO make toggling of spell checking ('SPC t s') use flyspell-mode in text modesm and flyspell-prog-mode in programming modes (see hooks below) ;; Removing hooks for automatic spell checking set here: https://github.com/hlissner/doom-emacs/blob/develop/modules/checkers/spell/config.el (remove-hook! '(org-mode-hook markdown-mode-hook @@ -104,6 +104,20 @@ (message "Dictionary switched from %s to %s" dic change) )) +(add-hook 'tetris-mode-hook #'turn-off-evil-mode) + +;; Make sniping simpler for german keyboard +(setq evil-snipe-scope 'visible) +(map! :map evil-snipe-override-mode-map :m "," #'evil-snipe-repeat) +(map! :map evil-snipe-override-mode-map :m ";" #'evil-snipe-repeat-reverse) +(map! :map evil-snipe-parent-transient-map "," #'evil-snipe-repeat) +(map! :map evil-snipe-parent-transient-map ";" #'evil-snipe-repeat-reverse) + +;; (when evil-snipe-override-evil-repeat-keys +;; (evil-define-key 'motion map +;; "," 'evil-snipe-repeat +;; ";" 'evil-snipe-repeat-reverse)) + ;; Python settings ;; (add-hook 'python-mode-hook (lambda () ;; (setq flycheck-checker 'python-pylint))) @@ -154,3 +168,6 @@ ((string= "Lu" first-char-prop) ; Upper case (downcase-region $p1 (+ $p1 1))) (t (message "Word does not start with a alphabetic character")))))) + +;; Add company-quickhelp +(company-quickhelp-mode) diff --git a/emacs/.config/doom/init.el b/emacs/.config/doom/init.el index 96314cf..bea3217 100644 --- a/emacs/.config/doom/init.el +++ b/emacs/.config/doom/init.el @@ -158,7 +158,7 @@ ;;rest ; Emacs as a REST client ;;rst ; ReST in peace ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} - ;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + (rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() ;;scala ; java, but good ;;(scheme +guile) ; a fully conniving family of lisps ;;sh ; she sells {ba,z,fi}sh shells on the C xor diff --git a/emacs/.config/doom/packages.el b/emacs/.config/doom/packages.el index b80e9cc..66aeae5 100644 --- a/emacs/.config/doom/packages.el +++ b/emacs/.config/doom/packages.el @@ -9,6 +9,8 @@ ;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: ;(package! some-package) +(package! company-quickhelp) + ;; To install a package directly from a remote git repo, you must specify a ;; `:recipe'. You'll find documentation on what `:recipe' accepts here: ;; https://github.com/raxod502/straight.el#the-recipe-format From f3fe0a4b8155577971e43d5b287afef3240cd962 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 3 Mar 2022 11:22:40 -0400 Subject: [PATCH 24/48] emacs: many changes --- emacs/.config/doom/config.el | 45 ++++++++++++++++++----------- emacs/.config/doom/init.el | 8 ++--- emacs/.config/doom/org-agenda-files | 1 + emacs/.config/doom/packages.el | 3 ++ 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/emacs/.config/doom/config.el b/emacs/.config/doom/config.el index 927d591..aac9db1 100644 --- a/emacs/.config/doom/config.el +++ b/emacs/.config/doom/config.el @@ -30,7 +30,10 @@ ;; If you use `org' and don't want your org files in the default location below, ;; change `org-directory'. It must be set before org loads! -(setq org-directory "~/org") +(setq org-directory "~/Nextcloud/org" + org-roam-directory "~/Nextcloud/org-roam") + +;; (map! :nv "SPC r" "SPC n r") ;; This determines the style of line numbers in effect. If set to `nil', line ;; numbers are disabled. For relative line numbers, set this to `relative'. @@ -66,30 +69,31 @@ (map! :desc "Flycheck next error" :nv "g n" #'flycheck-next-error) (map! :desc "Flycheck previous error" :nv "g N" #'flycheck-previous-error) +(map! :desc "Format and save" :nvi "C-s" #'fd-format-and-save) ;; Org-mode custom keybindings -;; (map! :map org-mode-map :nvi "C-k" #'org-backward-element) -;; (map! :map org-mode-map :nvi "C-j" #'org-forward-element) -;; (map! :map org-mode-map :nvi "C-h" #'org-up-element) -;; (map! :map org-mode-map :nvi "C-l" #'org-down-element) +(map! :map org-mode-map :nvi "C-k" #'org-backward-element) +(map! :map org-mode-map :nvi "C-j" #'org-forward-element) +(map! :map org-mode-map :nvi "C-h" #'org-up-element) +(map! :map org-mode-map :nvi "C-l" #'org-down-element) ;; Spell checking settings ;; TODO make toggling of spell checking ('SPC t s') use flyspell-mode in text modesm and flyspell-prog-mode in programming modes (see hooks below) ;; Removing hooks for automatic spell checking set here: https://github.com/hlissner/doom-emacs/blob/develop/modules/checkers/spell/config.el (remove-hook! '(org-mode-hook - markdown-mode-hook - TeX-mode-hook - rst-mode-hook - mu4e-compose-mode-hook - message-mode-hook - git-commit-mode-hook) - #'flyspell-mode) + markdown-mode-hook + TeX-mode-hook + rst-mode-hook + mu4e-compose-mode-hook + message-mode-hook + git-commit-mode-hook) + #'flyspell-mode) (remove-hook! '(yaml-mode-hook - conf-mode-hook - prog-mode-hook) - #'flyspell-prog-mode) + conf-mode-hook + prog-mode-hook) + #'flyspell-prog-mode) (setq ispell-dictionary "english") (setq lsp-dart-flutter-sdk-dir "/home/julian/snap/flutter/common/flutter") @@ -104,6 +108,12 @@ (message "Dictionary switched from %s to %s" dic change) )) +(defun fd-format-and-save() + (interactive) + (evil-force-normal-state) + (+format/buffer) + (save-buffer)) + (add-hook 'tetris-mode-hook #'turn-off-evil-mode) ;; Make sniping simpler for german keyboard @@ -113,6 +123,7 @@ (map! :map evil-snipe-parent-transient-map "," #'evil-snipe-repeat) (map! :map evil-snipe-parent-transient-map ";" #'evil-snipe-repeat-reverse) + ;; (when evil-snipe-override-evil-repeat-keys ;; (evil-define-key 'motion map ;; "," 'evil-snipe-repeat @@ -120,7 +131,7 @@ ;; Python settings ;; (add-hook 'python-mode-hook (lambda () - ;; (setq flycheck-checker 'python-pylint))) +;; (setq flycheck-checker 'python-pylint))) ;; (add-hook 'pyhon-mode-local-vars-hook ;; (lambda () @@ -138,7 +149,7 @@ ;; (setq org-agenda-files (list "~/org")) ;; (custom-set-variables ;; '(org-directory "~/org") - ;; '(org-agenda-files (list org-directory))) +;; '(org-agenda-files (list org-directory))) ;; (add-to-list 'org-agenda-files "~/org/anothertest.org" 'append) diff --git a/emacs/.config/doom/init.el b/emacs/.config/doom/init.el index bea3217..f331dd1 100644 --- a/emacs/.config/doom/init.el +++ b/emacs/.config/doom/init.el @@ -112,7 +112,7 @@ :lang ;;agda ; types of types of types of types... ;;beancount ; mind the GAAP - ;;(cc +lsp) ; C > C++ == 1 + (cc) ; C > C++ == 1 ;;clojure ; java with a lisp ;;common-lisp ; if you've seen one lisp, you've seen them all ;;coq ; proofs-as-programs @@ -129,7 +129,7 @@ ;;faust ; dsp, but you get to keep your soul ;;fsharp ; ML stands for Microsoft's Language ;;fstar ; (dependent) types and (monadic) effects and Z3 - ;;gdscript ; the language you waited for + gdscript ; the language you waited for ;;(go +lsp) ; the hipster dialect ;;(haskell +dante) ; a language that's lazier than I am ;;hy ; readability of scheme w/ speed of python @@ -139,7 +139,7 @@ ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) ;; julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) - ;;latex ; writing papers in Emacs has never been so fun + latex ; writing papers in Emacs has never been so fun ;;lean ; for folks with too much to prove ;;ledger ; be audit you can be ;;lua ; one-based indices? one-based indices @@ -147,7 +147,7 @@ ;;nim ; python + lisp at the speed of c ;;nix ; I hereby declare "nix geht mehr!" ;;ocaml ; an objective camel - org ; organize your plain life in plain text + (org +hugo +roam2) ; organize your plain life in plain text ;;php ; perl's insecure younger brother ;;plantuml ; diagrams for confusing people more ;;purescript ; javascript, but functional diff --git a/emacs/.config/doom/org-agenda-files b/emacs/.config/doom/org-agenda-files index e69de29..b9f086a 100644 --- a/emacs/.config/doom/org-agenda-files +++ b/emacs/.config/doom/org-agenda-files @@ -0,0 +1 @@ +/home/julian/Nextcloud/org diff --git a/emacs/.config/doom/packages.el b/emacs/.config/doom/packages.el index 66aeae5..5e64d41 100644 --- a/emacs/.config/doom/packages.el +++ b/emacs/.config/doom/packages.el @@ -11,6 +11,9 @@ (package! company-quickhelp) +(unpin! org-roam) +(package! org-roam-ui) + ;; To install a package directly from a remote git repo, you must specify a ;; `:recipe'. You'll find documentation on what `:recipe' accepts here: ;; https://github.com/raxod502/straight.el#the-recipe-format From f6949633762380a65c650947884da060f668d4c0 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 3 Mar 2022 11:23:08 -0400 Subject: [PATCH 25/48] i3: some more changes --- i3/.config/i3/config | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/i3/.config/i3/config b/i3/.config/i3/config index 46be7e9..93f83a7 100644 --- a/i3/.config/i3/config +++ b/i3/.config/i3/config @@ -44,7 +44,8 @@ bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOU floating_modifier $mod # start a terminal -bindsym $mod+Return exec xfce4-terminal +# bindsym $mod+Return exec xfce4-terminal +bindsym $mod+Return exec alacritty # kill focused window bindsym $mod+Shift+q kill @@ -200,6 +201,7 @@ bar { status_command i3blocks position bottom i3bar_command i3bar --transparency + bindsym button3 exec --no-startup-id jgmenu_run } @@ -243,20 +245,28 @@ bindsym $mod+Print mode "$mode_screenshot_clipboard" bindsym $mod+Ctrl+Right move workspace to output right bindsym $mod+Ctrl+Left move workspace to output right -bindsym $mod+c exec xfce4-terminal --role floating --hide-scrollbar --title Calculator -e qalc +#bindsym $mod+c exec xfce4-terminal --role floating --hide-scrollbar --title Calculator -e qalc +bindsym $mod+c exec qalculate-gtk bindsym $mod+p exec xwacomcalibrate bindsym $mod+t exec thunar -bindsym $mod+m exec xfce4-terminal -x mc +#bindsym $mod+m exec xfce4-terminal -x mc bindsym $mod+Shift+c exec $scripts/jupyter-calculator bindsym $mod+b exec firefox bindsym $mod+s exec pavucontrol bindsym $mod+u exec pamac-manager +# read 1 character and mark the current window with this character +bindsym $mod+m exec i3-input -F 'mark %s' -l 1 -P 'Mark: ' +# read 1 character and go to the window with the character +bindsym $mod+Shift+m exec i3-input -F '[con_mark="%s"] focus' -l 1 -P 'Goto: ' + workspace_auto_back_and_forth yes default_border pixel default_floating_border normal +focus_on_window_activation focus + assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1 assign [class="TelegramDesktop"] workspace $ws9 assign [class="Signal"] workspace $ws9 @@ -267,15 +277,16 @@ assign [class="zoom"] workspace $ws5 for_window [class="firefox"] focus #for_window [class="Thunderbird"] focus -for_window [class="TelegramDesktop"] no_focus -for_window [class="Rocket.Chat"] no_focus -for_window [class="Element"] no_focus +#for_window [class="TelegramDesktop"] no_focus +#for_window [class="Rocket.Chat"] no_focus +#for_window [class="Element"] no_focus #for_window [class="Thunderbird"] focus for_window [title="Manjaro Settings Manager"] floating enable for_window [class="Pamac-manager"] floating enable for_window [class="Pamac-updater"] floating enable +for_window [class="Qalculate-gtk"] floating enable #for_window [class="zoom" title="Chat"] floating enable #for_window [class="Thunderbird" instance="Msgcompose"] floating enable # @@ -295,6 +306,8 @@ exec_always ~/.screenlayout/one-screen.sh #exec element-desktop no_focus #exec telegram-desktop no_focus +# Rightclick menu +exec --no-startup-id jgmenu --at-pointer --hide-on-startup exec --no-startup-id nm-applet exec --no-startup-id blueman-applet exec --no-startup-id xfce4-power-manager @@ -302,9 +315,9 @@ exec --no-startup-id nextcloud # Authentication agent exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 # Notify about software updates -exec --no-startup-id pamac-tray +# exec --no-startup-id pamac-tray # Notify about kernel updates -exec --no-startup-id msm_notifier +# exec --no-startup-id msm_notifier # Audio exec --no-startup-id start-pulseaudio-x11 # Background From 4749d2cefc1a52b1f71903b4015dd93de548c5c7 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 3 Mar 2022 12:10:19 -0400 Subject: [PATCH 26/48] Now using dotter --- .dotter/global.toml | 25 +++++++++++++++++++ .dotter/local.toml | 2 ++ .gitignore | 2 ++ README.md | 6 +++++ emacs/{.config => }/doom/config.el | 0 emacs/{.config => }/doom/init.el | 0 emacs/{.config => }/doom/org-agenda-files | 0 emacs/{.config => }/doom/packages.el | 0 i3/{.config => }/dunst/dunstrc | 0 i3/{.config => }/i3-scrot.conf | 0 i3/{.config => }/i3/config | 0 i3/{.config => }/i3/manjaro-default-config | 0 .../i3/scripts/jupyter-calculator | 0 i3/{.config => }/i3/scripts/rofi_calc | 0 i3/{.config => }/i3/scripts/setupZoom | 0 i3/{.config => }/i3/workspace-chat.json | 0 i3/{.config => }/i3/workspace-zoom.json | 0 i3/{.config => }/i3blocks/activity | 0 i3/{.config => }/i3blocks/calendar | 0 i3/{.config => }/i3blocks/config | 0 i3/{.config => }/i3blocks/dunst | 0 i3/{.config => }/i3blocks/i3b-gate | 0 i3/{.config => }/i3blocks/keyboard | 0 i3/{.config => }/i3blocks/volume | 0 i3/{.config => }/rofi/config.rasi | 0 mc/{.config/mc => }/mc.keymap | 0 vim/{.config/nvim => }/init.vim | 0 27 files changed, 35 insertions(+) create mode 100644 .dotter/global.toml create mode 100644 .dotter/local.toml create mode 100644 .gitignore rename emacs/{.config => }/doom/config.el (100%) rename emacs/{.config => }/doom/init.el (100%) rename emacs/{.config => }/doom/org-agenda-files (100%) rename emacs/{.config => }/doom/packages.el (100%) rename i3/{.config => }/dunst/dunstrc (100%) rename i3/{.config => }/i3-scrot.conf (100%) rename i3/{.config => }/i3/config (100%) rename i3/{.config => }/i3/manjaro-default-config (100%) rename i3/{.config => }/i3/scripts/jupyter-calculator (100%) rename i3/{.config => }/i3/scripts/rofi_calc (100%) rename i3/{.config => }/i3/scripts/setupZoom (100%) rename i3/{.config => }/i3/workspace-chat.json (100%) rename i3/{.config => }/i3/workspace-zoom.json (100%) rename i3/{.config => }/i3blocks/activity (100%) rename i3/{.config => }/i3blocks/calendar (100%) rename i3/{.config => }/i3blocks/config (100%) rename i3/{.config => }/i3blocks/dunst (100%) rename i3/{.config => }/i3blocks/i3b-gate (100%) rename i3/{.config => }/i3blocks/keyboard (100%) rename i3/{.config => }/i3blocks/volume (100%) rename i3/{.config => }/rofi/config.rasi (100%) rename mc/{.config/mc => }/mc.keymap (100%) rename vim/{.config/nvim => }/init.vim (100%) diff --git a/.dotter/global.toml b/.dotter/global.toml new file mode 100644 index 0000000..03919e2 --- /dev/null +++ b/.dotter/global.toml @@ -0,0 +1,25 @@ +[helpers] + +[default] +depends = [] + +[manjaro.files] +manjaro = "~" + +[mc.files] +mc = "~/.config/mc" + +[vim.files] +# type symbolic prevents interpreting '{{' as template +"vim/.vimrc" = { target = "~/.vimrc", type = "symbolic" } +"vim/init.vim" = { target = "~/.config/nvim/init.vim", type = "symbolic" } + +[i3.files] +"i3/dunst" = "~/.config/dunst" +"i3/i3" = "~/.config/i3" +"i3/i3blocks" = { target = "~/.config/i3blocks", type = "symbolic" } +"i3/rofi" = "~/.config/rofi" +"i3/i3-scrot.conf" = "~/.config/i3-scrot.conf" + +[emacs.files] +"emacs/doom" = "~/.config/doom" diff --git a/.dotter/local.toml b/.dotter/local.toml new file mode 100644 index 0000000..91d5ad8 --- /dev/null +++ b/.dotter/local.toml @@ -0,0 +1,2 @@ +# includes = [] +packages = ["mc", "vim", "emacs", "i3"] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9117be --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.dotter/cache.toml +.dotter/cache diff --git a/README.md b/README.md index 64df3ea..7d03ac5 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,9 @@ All neccessary dependencies I could think of are listed in the *dependencies* fi cd .dotfiles stow i3 mc emacs vim ``` + +## Alternative with [dotter](https://github.com/SuperCuber/dotter): +``` sh +cd .dotfiles +dotter deploy +``` diff --git a/emacs/.config/doom/config.el b/emacs/doom/config.el similarity index 100% rename from emacs/.config/doom/config.el rename to emacs/doom/config.el diff --git a/emacs/.config/doom/init.el b/emacs/doom/init.el similarity index 100% rename from emacs/.config/doom/init.el rename to emacs/doom/init.el diff --git a/emacs/.config/doom/org-agenda-files b/emacs/doom/org-agenda-files similarity index 100% rename from emacs/.config/doom/org-agenda-files rename to emacs/doom/org-agenda-files diff --git a/emacs/.config/doom/packages.el b/emacs/doom/packages.el similarity index 100% rename from emacs/.config/doom/packages.el rename to emacs/doom/packages.el diff --git a/i3/.config/dunst/dunstrc b/i3/dunst/dunstrc similarity index 100% rename from i3/.config/dunst/dunstrc rename to i3/dunst/dunstrc diff --git a/i3/.config/i3-scrot.conf b/i3/i3-scrot.conf similarity index 100% rename from i3/.config/i3-scrot.conf rename to i3/i3-scrot.conf diff --git a/i3/.config/i3/config b/i3/i3/config similarity index 100% rename from i3/.config/i3/config rename to i3/i3/config diff --git a/i3/.config/i3/manjaro-default-config b/i3/i3/manjaro-default-config similarity index 100% rename from i3/.config/i3/manjaro-default-config rename to i3/i3/manjaro-default-config diff --git a/i3/.config/i3/scripts/jupyter-calculator b/i3/i3/scripts/jupyter-calculator similarity index 100% rename from i3/.config/i3/scripts/jupyter-calculator rename to i3/i3/scripts/jupyter-calculator diff --git a/i3/.config/i3/scripts/rofi_calc b/i3/i3/scripts/rofi_calc similarity index 100% rename from i3/.config/i3/scripts/rofi_calc rename to i3/i3/scripts/rofi_calc diff --git a/i3/.config/i3/scripts/setupZoom b/i3/i3/scripts/setupZoom similarity index 100% rename from i3/.config/i3/scripts/setupZoom rename to i3/i3/scripts/setupZoom diff --git a/i3/.config/i3/workspace-chat.json b/i3/i3/workspace-chat.json similarity index 100% rename from i3/.config/i3/workspace-chat.json rename to i3/i3/workspace-chat.json diff --git a/i3/.config/i3/workspace-zoom.json b/i3/i3/workspace-zoom.json similarity index 100% rename from i3/.config/i3/workspace-zoom.json rename to i3/i3/workspace-zoom.json diff --git a/i3/.config/i3blocks/activity b/i3/i3blocks/activity similarity index 100% rename from i3/.config/i3blocks/activity rename to i3/i3blocks/activity diff --git a/i3/.config/i3blocks/calendar b/i3/i3blocks/calendar similarity index 100% rename from i3/.config/i3blocks/calendar rename to i3/i3blocks/calendar diff --git a/i3/.config/i3blocks/config b/i3/i3blocks/config similarity index 100% rename from i3/.config/i3blocks/config rename to i3/i3blocks/config diff --git a/i3/.config/i3blocks/dunst b/i3/i3blocks/dunst similarity index 100% rename from i3/.config/i3blocks/dunst rename to i3/i3blocks/dunst diff --git a/i3/.config/i3blocks/i3b-gate b/i3/i3blocks/i3b-gate similarity index 100% rename from i3/.config/i3blocks/i3b-gate rename to i3/i3blocks/i3b-gate diff --git a/i3/.config/i3blocks/keyboard b/i3/i3blocks/keyboard similarity index 100% rename from i3/.config/i3blocks/keyboard rename to i3/i3blocks/keyboard diff --git a/i3/.config/i3blocks/volume b/i3/i3blocks/volume similarity index 100% rename from i3/.config/i3blocks/volume rename to i3/i3blocks/volume diff --git a/i3/.config/rofi/config.rasi b/i3/rofi/config.rasi similarity index 100% rename from i3/.config/rofi/config.rasi rename to i3/rofi/config.rasi diff --git a/mc/.config/mc/mc.keymap b/mc/mc.keymap similarity index 100% rename from mc/.config/mc/mc.keymap rename to mc/mc.keymap diff --git a/vim/.config/nvim/init.vim b/vim/init.vim similarity index 100% rename from vim/.config/nvim/init.vim rename to vim/init.vim From 7024c07a32880e8ae884dc3b511a9aa5229e9df0 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Tue, 8 Mar 2022 21:25:21 -0400 Subject: [PATCH 27/48] emacs: added chemacs and spacemacs configs --- .dotter/global.toml | 2 + README.md | 5 + emacs/chemacs/.emacs-profiles.el | 8 + emacs/spacemacs/.spacemacs | 614 +++++++++++++++++++++++++++++++ 4 files changed, 629 insertions(+) create mode 100644 emacs/chemacs/.emacs-profiles.el create mode 100644 emacs/spacemacs/.spacemacs diff --git a/.dotter/global.toml b/.dotter/global.toml index 03919e2..ba07c8a 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -23,3 +23,5 @@ mc = "~/.config/mc" [emacs.files] "emacs/doom" = "~/.config/doom" +"emacs/spacemacs/.spacemacs" = "~/.spacemacs" +"emacs/chemacs/.emacs-profiles.el" = "~/.emacs-profiles.el" diff --git a/README.md b/README.md index 7d03ac5..9068c04 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,8 @@ stow i3 mc emacs vim cd .dotfiles dotter deploy ``` + +deleted +yanked +deleted2 +yanked2 diff --git a/emacs/chemacs/.emacs-profiles.el b/emacs/chemacs/.emacs-profiles.el new file mode 100644 index 0000000..74864bf --- /dev/null +++ b/emacs/chemacs/.emacs-profiles.el @@ -0,0 +1,8 @@ +(("default" . ((user-emacs-directory . "~/emacs/doom-emacs"))) +("vanilla" . ((user-emacs-directory . "~/emacs/vanilla"))) +("spacemacs" . ((user-emacs-directory . "~/emacs/spacemacs"))) +) +;(env . (("DOOMDIR" . "~/emacs/doom-config")))))) +;("doom" . ((user-emacs-directory . "~/emacs/doom"))) +;(doom-private-dir . "~/emacs/doom-config")))) +;) diff --git a/emacs/spacemacs/.spacemacs b/emacs/spacemacs/.spacemacs new file mode 100644 index 0000000..827c090 --- /dev/null +++ b/emacs/spacemacs/.spacemacs @@ -0,0 +1,614 @@ +;; -*- mode: emacs-lisp; lexical-binding: t -*- +;; This file is loaded by Spacemacs at startup. +;; It must be stored in your home directory. + +(defun dotspacemacs/layers () + "Layer configuration: +This function should only modify configuration layer settings." + (setq-default + ;; Base distribution to use. This is a layer contained in the directory + ;; `+distribution'. For now available distributions are `spacemacs-base' + ;; or `spacemacs'. (default 'spacemacs) + dotspacemacs-distribution 'spacemacs + + ;; Lazy installation of layers (i.e. layers are installed only when a file + ;; with a supported type is opened). Possible values are `all', `unused' + ;; and `nil'. `unused' will lazy install only unused layers (i.e. layers + ;; not listed in variable `dotspacemacs-configuration-layers'), `all' will + ;; lazy install any layer that support lazy installation even the layers + ;; listed in `dotspacemacs-configuration-layers'. `nil' disable the lazy + ;; installation feature and you have to explicitly list a layer in the + ;; variable `dotspacemacs-configuration-layers' to install it. + ;; (default 'unused) + dotspacemacs-enable-lazy-installation 'unused + + ;; If non-nil then Spacemacs will ask for confirmation before installing + ;; a layer lazily. (default t) + dotspacemacs-ask-for-lazy-installation t + + ;; List of additional paths where to look for configuration layers. + ;; Paths must have a trailing slash (i.e. `~/.mycontribs/') + dotspacemacs-configuration-layer-path '() + + ;; List of configuration layers to load. + dotspacemacs-configuration-layers + '( + ;; ---------------------------------------------------------------- + ;; Example of useful layers you may want to use right away. + ;; Uncomment some layer names and press `SPC f e R' (Vim style) or + ;; `M-m f e R' (Emacs style) to install them. + ;; ---------------------------------------------------------------- + ;; (dart :variables dart-server-sdk-path "/bin/cache/dart-sdk/") + rust + tabs + auto-completion + (auto-completion :variables + auto-completion-return-key-behavior 'complete + auto-completion-tab-key-behavior 'cycle + auto-completion-complete-with-key-sequence nil + auto-completion-complete-with-key-sequence-delay 0.1 + auto-completion-minimum-prefix-length 2 + auto-completion-idle-delay 0.2 + auto-completion-private-snippets-directory nil + auto-completion-enable-snippets-in-popup nil + auto-completion-enable-help-tooltip t + auto-completion-use-company-box nil + auto-completion-enable-sort-by-usage nil) + ;; better-defaults + emacs-lisp + git + helm + (lsp :variables + lsp-lens-enable t + lsp-ui-doc-enable t) + ;; markdown + multiple-cursors + org + ;; (shell :variables + ;; shell-default-height 30 + ;; shell-default-position 'bottom) + (spell-checking :variables + spell-checking-enable-by-default nil) + syntax-checking + ;; version-control + treemacs) + + + ;; List of additional packages that will be installed without being wrapped + ;; in a layer (generally the packages are installed only and should still be + ;; loaded using load/require/use-package in the user-config section below in + ;; this file). If you need some configuration for these packages, then + ;; consider creating a layer. You can also put the configuration in + ;; `dotspacemacs/user-config'. To use a local version of a package, use the + ;; `:location' property: '(your-package :location "~/path/to/your-package/") + ;; Also include the dependencies as they will not be resolved automatically. + dotspacemacs-additional-packages '() + + ;; A list of packages that cannot be updated. + dotspacemacs-frozen-packages '() + + ;; A list of packages that will not be installed and loaded. + dotspacemacs-excluded-packages '() + + ;; Defines the behaviour of Spacemacs when installing packages. + ;; Possible values are `used-only', `used-but-keep-unused' and `all'. + ;; `used-only' installs only explicitly used packages and deletes any unused + ;; packages as well as their unused dependencies. `used-but-keep-unused' + ;; installs only the used packages but won't delete unused ones. `all' + ;; installs *all* packages supported by Spacemacs and never uninstalls them. + ;; (default is `used-only') + dotspacemacs-install-packages 'used-only)) + +(defun dotspacemacs/init () + "Initialization: +This function is called at the very beginning of Spacemacs startup, +before layer configuration. +It should only modify the values of Spacemacs settings." + ;; This setq-default sexp is an exhaustive list of all the supported + ;; spacemacs settings. + (setq-default + ;; If non-nil then enable support for the portable dumper. You'll need to + ;; compile Emacs 27 from source following the instructions in file + ;; EXPERIMENTAL.org at to root of the git repository. + ;; + ;; WARNING: pdumper does not work with Native Compilation, so it's disabled + ;; regardless of the following setting when native compilation is in effect. + ;; + ;; (default nil) + dotspacemacs-enable-emacs-pdumper nil + + ;; Name of executable file pointing to emacs 27+. This executable must be + ;; in your PATH. + ;; (default "emacs") + dotspacemacs-emacs-pdumper-executable-file "emacs" + + ;; Name of the Spacemacs dump file. This is the file will be created by the + ;; portable dumper in the cache directory under dumps sub-directory. + ;; To load it when starting Emacs add the parameter `--dump-file' + ;; when invoking Emacs 27.1 executable on the command line, for instance: + ;; ./emacs --dump-file=$HOME/.emacs.d/.cache/dumps/spacemacs-27.1.pdmp + ;; (default (format "spacemacs-%s.pdmp" emacs-version)) + dotspacemacs-emacs-dumper-dump-file (format "spacemacs-%s.pdmp" emacs-version) + + ;; If non-nil ELPA repositories are contacted via HTTPS whenever it's + ;; possible. Set it to nil if you have no way to use HTTPS in your + ;; environment, otherwise it is strongly recommended to let it set to t. + ;; This variable has no effect if Emacs is launched with the parameter + ;; `--insecure' which forces the value of this variable to nil. + ;; (default t) + dotspacemacs-elpa-https t + + ;; Maximum allowed time in seconds to contact an ELPA repository. + ;; (default 5) + dotspacemacs-elpa-timeout 5 + + ;; Set `gc-cons-threshold' and `gc-cons-percentage' when startup finishes. + ;; This is an advanced option and should not be changed unless you suspect + ;; performance issues due to garbage collection operations. + ;; (default '(100000000 0.1)) + dotspacemacs-gc-cons '(100000000 0.1) + + ;; Set `read-process-output-max' when startup finishes. + ;; This defines how much data is read from a foreign process. + ;; Setting this >= 1 MB should increase performance for lsp servers + ;; in emacs 27. + ;; (default (* 1024 1024)) + dotspacemacs-read-process-output-max (* 1024 1024) + + ;; If non-nil then Spacelpa repository is the primary source to install + ;; a locked version of packages. If nil then Spacemacs will install the + ;; latest version of packages from MELPA. Spacelpa is currently in + ;; experimental state please use only for testing purposes. + ;; (default nil) + dotspacemacs-use-spacelpa nil + + ;; If non-nil then verify the signature for downloaded Spacelpa archives. + ;; (default t) + dotspacemacs-verify-spacelpa-archives t + + ;; If non-nil then spacemacs will check for updates at startup + ;; when the current branch is not `develop'. Note that checking for + ;; new versions works via git commands, thus it calls GitHub services + ;; whenever you start Emacs. (default nil) + dotspacemacs-check-for-update nil + + ;; If non-nil, a form that evaluates to a package directory. For example, to + ;; use different package directories for different Emacs versions, set this + ;; to `emacs-version'. (default 'emacs-version) + dotspacemacs-elpa-subdirectory 'emacs-version + + ;; One of `vim', `emacs' or `hybrid'. + ;; `hybrid' is like `vim' except that `insert state' is replaced by the + ;; `hybrid state' with `emacs' key bindings. The value can also be a list + ;; with `:variables' keyword (similar to layers). Check the editing styles + ;; section of the documentation for details on available variables. + ;; (default 'vim) + dotspacemacs-editing-style 'vim + + ;; If non-nil show the version string in the Spacemacs buffer. It will + ;; appear as (spacemacs version)@(emacs version) + ;; (default t) + dotspacemacs-startup-buffer-show-version t + + ;; Specify the startup banner. Default value is `official', it displays + ;; the official spacemacs logo. An integer value is the index of text + ;; banner, `random' chooses a random text banner in `core/banners' + ;; directory. A string value must be a path to an image format supported + ;; by your Emacs build. + ;; If the value is nil then no banner is displayed. (default 'official) + dotspacemacs-startup-banner 'official + + ;; List of items to show in startup buffer or an association list of + ;; the form `(list-type . list-size)`. If nil then it is disabled. + ;; Possible values for list-type are: + ;; `recents' `recents-by-project' `bookmarks' `projects' `agenda' `todos'. + ;; List sizes may be nil, in which case + ;; `spacemacs-buffer-startup-lists-length' takes effect. + ;; The exceptional case is `recents-by-project', where list-type must be a + ;; pair of numbers, e.g. `(recents-by-project . (7 . 5))', where the first + ;; number is the project limit and the second the limit on the recent files + ;; within a project. + dotspacemacs-startup-lists '((recents . 5) + (projects . 7)) + + ;; True if the home buffer should respond to resize events. (default t) + dotspacemacs-startup-buffer-responsive t + + ;; Show numbers before the startup list lines. (default t) + dotspacemacs-show-startup-list-numbers t + + ;; The minimum delay in seconds between number key presses. (default 0.4) + dotspacemacs-startup-buffer-multi-digit-delay 0.4 + + ;; If non-nil, show file icons for entries and headings on Spacemacs home buffer. + ;; This has no effect in terminal or if "all-the-icons" package or the font + ;; is not installed. (default nil) + dotspacemacs-startup-buffer-show-icons nil + + ;; Default major mode for a new empty buffer. Possible values are mode + ;; names such as `text-mode'; and `nil' to use Fundamental mode. + ;; (default `text-mode') + dotspacemacs-new-empty-buffer-major-mode 'text-mode + + ;; Default major mode of the scratch buffer (default `text-mode') + dotspacemacs-scratch-mode 'text-mode + + ;; If non-nil, *scratch* buffer will be persistent. Things you write down in + ;; *scratch* buffer will be saved and restored automatically. + dotspacemacs-scratch-buffer-persistent nil + + ;; If non-nil, `kill-buffer' on *scratch* buffer + ;; will bury it instead of killing. + dotspacemacs-scratch-buffer-unkillable nil + + ;; Initial message in the scratch buffer, such as "Welcome to Spacemacs!" + ;; (default nil) + dotspacemacs-initial-scratch-message nil + + ;; List of themes, the first of the list is loaded when spacemacs starts. + ;; Press `SPC T n' to cycle to the next theme in the list (works great + ;; with 2 themes variants, one dark and one light) + dotspacemacs-themes '(spacemacs-dark + spacemacs-light) + + ;; Set the theme for the Spaceline. Supported themes are `spacemacs', + ;; `all-the-icons', `custom', `doom', `vim-powerline' and `vanilla'. The + ;; first three are spaceline themes. `doom' is the doom-emacs mode-line. + ;; `vanilla' is default Emacs mode-line. `custom' is a user defined themes, + ;; refer to the DOCUMENTATION.org for more info on how to create your own + ;; spaceline theme. Value can be a symbol or list with additional properties. + ;; (default '(spacemacs :separator wave :separator-scale 1.5)) + dotspacemacs-mode-line-theme '(spacemacs :separator wave :separator-scale 1.5) + + ;; If non-nil the cursor color matches the state color in GUI Emacs. + ;; (default t) + dotspacemacs-colorize-cursor-according-to-state t + + ;; Default font or prioritized list of fonts. The `:size' can be specified as + ;; a non-negative integer (pixel size), or a floating-point (point size). + ;; Point size is recommended, because it's device independent. (default 10.0) + dotspacemacs-default-font '("Source Code Pro" + :size 12.0 + :weight normal + :width normal) + + ;; The leader key (default "SPC") + dotspacemacs-leader-key "SPC" + + ;; The key used for Emacs commands `M-x' (after pressing on the leader key). + ;; (default "SPC") + dotspacemacs-emacs-command-key "SPC" + + ;; The key used for Vim Ex commands (default ":") + dotspacemacs-ex-command-key ":" + + ;; The leader key accessible in `emacs state' and `insert state' + ;; (default "M-m") + dotspacemacs-emacs-leader-key "M-m" + + ;; Major mode leader key is a shortcut key which is the equivalent of + ;; pressing ` m`. Set it to `nil` to disable it. (default ",") + dotspacemacs-major-mode-leader-key "," + + ;; Major mode leader key accessible in `emacs state' and `insert state'. + ;; (default "C-M-m" for terminal mode, "" for GUI mode). + ;; Thus M-RET should work as leader key in both GUI and terminal modes. + ;; C-M-m also should work in terminal mode, but not in GUI mode. + dotspacemacs-major-mode-emacs-leader-key (if window-system "" "C-M-m") + + ;; These variables control whether separate commands are bound in the GUI to + ;; the key pairs `C-i', `TAB' and `C-m', `RET'. + ;; Setting it to a non-nil value, allows for separate commands under `C-i' + ;; and TAB or `C-m' and `RET'. + ;; In the terminal, these pairs are generally indistinguishable, so this only + ;; works in the GUI. (default nil) + dotspacemacs-distinguish-gui-tab nil + + ;; Name of the default layout (default "Default") + dotspacemacs-default-layout-name "Default" + + ;; If non-nil the default layout name is displayed in the mode-line. + ;; (default nil) + dotspacemacs-display-default-layout nil + + ;; If non-nil then the last auto saved layouts are resumed automatically upon + ;; start. (default nil) + dotspacemacs-auto-resume-layouts nil + + ;; If non-nil, auto-generate layout name when creating new layouts. Only has + ;; effect when using the "jump to layout by number" commands. (default nil) + dotspacemacs-auto-generate-layout-names nil + + ;; Size (in MB) above which spacemacs will prompt to open the large file + ;; literally to avoid performance issues. Opening a file literally means that + ;; no major mode or minor modes are active. (default is 1) + dotspacemacs-large-file-size 1 + + ;; Location where to auto-save files. Possible values are `original' to + ;; auto-save the file in-place, `cache' to auto-save the file to another + ;; file stored in the cache directory and `nil' to disable auto-saving. + ;; (default 'cache) + dotspacemacs-auto-save-file-location 'cache + + ;; Maximum number of rollback slots to keep in the cache. (default 5) + dotspacemacs-max-rollback-slots 5 + + ;; If non-nil, the paste transient-state is enabled. While enabled, after you + ;; paste something, pressing `C-j' and `C-k' several times cycles through the + ;; elements in the `kill-ring'. (default nil) + dotspacemacs-enable-paste-transient-state nil + + ;; Which-key delay in seconds. The which-key buffer is the popup listing + ;; the commands bound to the current keystroke sequence. (default 0.4) + dotspacemacs-which-key-delay 0.4 + + ;; Which-key frame position. Possible values are `right', `bottom' and + ;; `right-then-bottom'. right-then-bottom tries to display the frame to the + ;; right; if there is insufficient space it displays it at the bottom. + ;; (default 'bottom) + dotspacemacs-which-key-position 'bottom + + ;; Control where `switch-to-buffer' displays the buffer. If nil, + ;; `switch-to-buffer' displays the buffer in the current window even if + ;; another same-purpose window is available. If non-nil, `switch-to-buffer' + ;; displays the buffer in a same-purpose window even if the buffer can be + ;; displayed in the current window. (default nil) + dotspacemacs-switch-to-buffer-prefers-purpose nil + + ;; If non-nil a progress bar is displayed when spacemacs is loading. This + ;; may increase the boot time on some systems and emacs builds, set it to + ;; nil to boost the loading time. (default t) + dotspacemacs-loading-progress-bar t + + ;; If non-nil the frame is fullscreen when Emacs starts up. (default nil) + ;; (Emacs 24.4+ only) + dotspacemacs-fullscreen-at-startup nil + + ;; If non-nil `spacemacs/toggle-fullscreen' will not use native fullscreen. + ;; Use to disable fullscreen animations in OSX. (default nil) + dotspacemacs-fullscreen-use-non-native nil + + ;; If non-nil the frame is maximized when Emacs starts up. + ;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil. + ;; (default nil) (Emacs 24.4+ only) + dotspacemacs-maximized-at-startup nil + + ;; If non-nil the frame is undecorated when Emacs starts up. Combine this + ;; variable with `dotspacemacs-maximized-at-startup' in OSX to obtain + ;; borderless fullscreen. (default nil) + dotspacemacs-undecorated-at-startup nil + + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's active or selected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-active-transparency 90 + + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's inactive or deselected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-inactive-transparency 90 + + ;; If non-nil show the titles of transient states. (default t) + dotspacemacs-show-transient-state-title t + + ;; If non-nil show the color guide hint for transient state keys. (default t) + dotspacemacs-show-transient-state-color-guide t + + ;; If non-nil unicode symbols are displayed in the mode line. + ;; If you use Emacs as a daemon and wants unicode characters only in GUI set + ;; the value to quoted `display-graphic-p'. (default t) + dotspacemacs-mode-line-unicode-symbols t + + ;; If non-nil smooth scrolling (native-scrolling) is enabled. Smooth + ;; scrolling overrides the default behavior of Emacs which recenters point + ;; when it reaches the top or bottom of the screen. (default t) + dotspacemacs-smooth-scrolling t + + ;; Show the scroll bar while scrolling. The auto hide time can be configured + ;; by setting this variable to a number. (default t) + dotspacemacs-scroll-bar-while-scrolling t + + ;; Control line numbers activation. + ;; If set to `t', `relative' or `visual' then line numbers are enabled in all + ;; `prog-mode' and `text-mode' derivatives. If set to `relative', line + ;; numbers are relative. If set to `visual', line numbers are also relative, + ;; but only visual lines are counted. For example, folded lines will not be + ;; counted and wrapped lines are counted as multiple lines. + ;; This variable can also be set to a property list for finer control: + ;; '(:relative nil + ;; :visual nil + ;; :disabled-for-modes dired-mode + ;; doc-view-mode + ;; markdown-mode + ;; org-mode + ;; pdf-view-mode + ;; text-mode + ;; :size-limit-kb 1000) + ;; When used in a plist, `visual' takes precedence over `relative'. + ;; (default nil) + dotspacemacs-line-numbers nil + + ;; Code folding method. Possible values are `evil', `origami' and `vimish'. + ;; (default 'evil) + dotspacemacs-folding-method 'evil + + ;; If non-nil and `dotspacemacs-activate-smartparens-mode' is also non-nil, + ;; `smartparens-strict-mode' will be enabled in programming modes. + ;; (default nil) + dotspacemacs-smartparens-strict-mode nil + + ;; If non-nil smartparens-mode will be enabled in programming modes. + ;; (default t) + dotspacemacs-activate-smartparens-mode t + + ;; If non-nil pressing the closing parenthesis `)' key in insert mode passes + ;; over any automatically added closing parenthesis, bracket, quote, etc... + ;; This can be temporary disabled by pressing `C-q' before `)'. (default nil) + dotspacemacs-smart-closing-parenthesis nil + + ;; Select a scope to highlight delimiters. Possible values are `any', + ;; `current', `all' or `nil'. Default is `all' (highlight any scope and + ;; emphasis the current one). (default 'all) + dotspacemacs-highlight-delimiters 'all + + ;; If non-nil, start an Emacs server if one is not already running. + ;; (default nil) + dotspacemacs-enable-server nil + + ;; Set the emacs server socket location. + ;; If nil, uses whatever the Emacs default is, otherwise a directory path + ;; like \"~/.emacs.d/server\". It has no effect if + ;; `dotspacemacs-enable-server' is nil. + ;; (default nil) + dotspacemacs-server-socket-dir nil + + ;; If non-nil, advise quit functions to keep server open when quitting. + ;; (default nil) + dotspacemacs-persistent-server nil + + ;; List of search tool executable names. Spacemacs uses the first installed + ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'. + ;; (default '("rg" "ag" "pt" "ack" "grep")) + dotspacemacs-search-tools '("rg" "ag" "pt" "ack" "grep") + + ;; Format specification for setting the frame title. + ;; %a - the `abbreviated-file-name', or `buffer-name' + ;; %t - `projectile-project-name' + ;; %I - `invocation-name' + ;; %S - `system-name' + ;; %U - contents of $USER + ;; %b - buffer name + ;; %f - visited file name + ;; %F - frame name + ;; %s - process status + ;; %p - percent of buffer above top of window, or Top, Bot or All + ;; %P - percent of buffer above bottom of window, perhaps plus Top, or Bot or All + ;; %m - mode name + ;; %n - Narrow if appropriate + ;; %z - mnemonics of buffer, terminal, and keyboard coding systems + ;; %Z - like %z, but including the end-of-line format + ;; If nil then Spacemacs uses default `frame-title-format' to avoid + ;; performance issues, instead of calculating the frame title by + ;; `spacemacs/title-prepare' all the time. + ;; (default "%I@%S") + dotspacemacs-frame-title-format "%I@%S" + + ;; Format specification for setting the icon title format + ;; (default nil - same as frame-title-format) + dotspacemacs-icon-title-format nil + + ;; Show trailing whitespace (default t) + dotspacemacs-show-trailing-whitespace t + + ;; Delete whitespace while saving buffer. Possible values are `all' + ;; to aggressively delete empty line and long sequences of whitespace, + ;; `trailing' to delete only the whitespace at end of lines, `changed' to + ;; delete only whitespace for changed lines or `nil' to disable cleanup. + ;; (default nil) + dotspacemacs-whitespace-cleanup nil + + ;; If non-nil activate `clean-aindent-mode' which tries to correct + ;; virtual indentation of simple modes. This can interfere with mode specific + ;; indent handling like has been reported for `go-mode'. + ;; If it does deactivate it here. + ;; (default t) + dotspacemacs-use-clean-aindent-mode t + + ;; Accept SPC as y for prompts if non-nil. (default nil) + dotspacemacs-use-SPC-as-y nil + + ;; If non-nil shift your number row to match the entered keyboard layout + ;; (only in insert state). Currently supported keyboard layouts are: + ;; `qwerty-us', `qwertz-de' and `querty-ca-fr'. + ;; New layouts can be added in `spacemacs-editing' layer. + ;; (default nil) + dotspacemacs-swap-number-row nil + + ;; Either nil or a number of seconds. If non-nil zone out after the specified + ;; number of seconds. (default nil) + dotspacemacs-zone-out-when-idle nil + + ;; Run `spacemacs/prettify-org-buffer' when + ;; visiting README.org files of Spacemacs. + ;; (default nil) + dotspacemacs-pretty-docs nil + + ;; If nil the home buffer shows the full path of agenda items + ;; and todos. If non-nil only the file name is shown. + dotspacemacs-home-shorten-agenda-source nil + + ;; If non-nil then byte-compile some of Spacemacs files. + dotspacemacs-byte-compile nil)) + +(defun dotspacemacs/user-env () + "Environment variables setup. +This function defines the environment variables for your Emacs session. By +default it calls `spacemacs/load-spacemacs-env' which loads the environment +variables declared in `~/.spacemacs.env' or `~/.spacemacs.d/.spacemacs.env'. +See the header of this file for more information." + (spacemacs/load-spacemacs-env) + ) + +(defun dotspacemacs/user-init () + "Initialization for user code: +This function is called immediately after `dotspacemacs/init', before layer +configuration. +It is mostly for variables that should be set before packages are loaded. +If you are unsure, try setting them in `dotspacemacs/user-config' first." + ) + + +(defun dotspacemacs/user-load () + "Library to load while dumping. +This function is called only while dumping Spacemacs configuration. You can +`require' or `load' the libraries of your choice that will be included in the +dump." + ) + + +(defun dotspacemacs/user-config () + "Configuration for user code: +This function is called at the very end of Spacemacs startup, after layer +configuration. +Put your configuration code here, except for variables that should be set +before packages are loaded." + ;; (global-set-key (kbd "M-1") 'evil-jump-forward) + ;; (setq centaur-tabs-show-count t) + (define-key winum-keymap (kbd "M-1") 'tab-bar-switch-to-tab) + ;; (evil-define-key '(normal) nil (kbd "C-i") 'evil-jump-forward) + (define-key evil-motion-state-map (kbd "C-i") 'evil-jump-forward) + + (spacemacs/set-leader-keys "." 'lazy-helm/spacemacs/helm-find-files) + (spacemacs/declare-prefix "o" "open external") + (spacemacs/set-leader-keys "ot" 'open-external-terminal) + + (setq evil-escape-key-sequence "kj") + + (defun open-external-terminal () + "Open external terminal" + (interactive) + (call-process-shell-command "alacritty&" nil 0)) +) + +;; Do not write anything past this comment. This is where Emacs will +;; auto-generate custom variable definitions. +(defun dotspacemacs/emacs-custom-settings () + "Emacs custom settings. +This is an auto-generated function, do not modify its content directly, use +Emacs customize menu instead. +This function is called at the very end of Spacemacs initialization." +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(evil-want-Y-yank-to-eol nil) + '(package-selected-packages + '(company-quickhelp stickyfunc-enhance srefactor yasnippet-snippets treemacs-magit smeargle orgit-forge orgit org-rich-yank org-projectile org-category-capture org-present org-pomodoro alert log4e gntp org-mime org-download org-contrib org-cliplink org lsp-ui lsp-origami origami htmlize helm-org-rifle helm-lsp helm-git-grep helm-company helm-c-yasnippet gnuplot gitignore-templates git-timemachine git-modes git-messenger git-link fuzzy forge yaml magit ghub closql emacsql-sqlite emacsql treepy magit-section git-commit with-editor transient flyspell-correct-helm flyspell-correct flycheck-pos-tip evil-org centaur-tabs auto-yasnippet yasnippet auto-dictionary ac-ispell auto-complete toml-mode ron-mode racer pos-tip rust-mode helm-gtags ggtags flycheck-rust dap-mode lsp-treemacs bui lsp-mode counsel-gtags counsel swiper ivy company cargo markdown-mode ws-butler writeroom-mode winum which-key volatile-highlights vi-tilde-fringe uuidgen use-package undo-tree treemacs-projectile treemacs-persp treemacs-icons-dired treemacs-evil toc-org symon symbol-overlay string-inflection string-edit spaceline-all-the-icons restart-emacs request rainbow-delimiters quickrun popwin pcre2el password-generator paradox overseer org-superstar open-junk-file nameless multi-line macrostep lorem-ipsum link-hint inspector info+ indent-guide hybrid-mode hungry-delete hl-todo highlight-parentheses highlight-numbers highlight-indentation hide-comnt helm-xref helm-themes helm-swoop helm-purpose helm-projectile helm-org helm-mode-manager helm-make helm-ls-git helm-flx helm-descbinds helm-ag google-translate golden-ratio font-lock+ flycheck-package flycheck-elsa flx-ido fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-textobj-line evil-terminal-cursor-changer evil-surround evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-easymotion evil-collection evil-cleverparens evil-args evil-anzu eval-sexp-fu emr elisp-slime-nav elisp-def editorconfig dumb-jump drag-stuff dotenv-mode dired-quick-sort diminish devdocs define-word column-enforce-mode clean-aindent-mode centered-cursor-mode auto-highlight-symbol auto-compile aggressive-indent ace-link ace-jump-helm-line))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(highlight-parentheses-highlight ((nil (:weight ultra-bold))) t)) +) From 04e1bb1a7b1bdad7cae4312ad93bb476ca7041a5 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Tue, 8 Mar 2022 21:27:22 -0400 Subject: [PATCH 28/48] Removed test lines from readme --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 9068c04..7d03ac5 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,3 @@ stow i3 mc emacs vim cd .dotfiles dotter deploy ``` - -deleted -yanked -deleted2 -yanked2 From fb79782dad0048ce97737030bae39db47e3cc927 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Tue, 8 Mar 2022 22:45:50 -0400 Subject: [PATCH 29/48] alacritty: added config --- .dotter/global.toml | 3 + .dotter/local.toml | 2 +- alacritty/alacritty.yml | 861 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 865 insertions(+), 1 deletion(-) create mode 100644 alacritty/alacritty.yml diff --git a/.dotter/global.toml b/.dotter/global.toml index ba07c8a..87f368e 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -25,3 +25,6 @@ mc = "~/.config/mc" "emacs/doom" = "~/.config/doom" "emacs/spacemacs/.spacemacs" = "~/.spacemacs" "emacs/chemacs/.emacs-profiles.el" = "~/.emacs-profiles.el" + +[alacritty.files] +alacritty = "~/.config/alacritty" diff --git a/.dotter/local.toml b/.dotter/local.toml index 91d5ad8..26ded92 100644 --- a/.dotter/local.toml +++ b/.dotter/local.toml @@ -1,2 +1,2 @@ # includes = [] -packages = ["mc", "vim", "emacs", "i3"] +packages = ["mc", "vim", "emacs", "i3", "alacritty"] diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml new file mode 100644 index 0000000..261b941 --- /dev/null +++ b/alacritty/alacritty.yml @@ -0,0 +1,861 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +items: + - colors: + name: 3024 (dark) + author: Chris Kempson + primary: + background: "#090300" + foreground: "#a5a2a2" + cursor: + text: "#090300" + cursor: "#a5a2a2" + normal: + black: "#090300" + red: "#db2d20" + green: "#01a252" + yellow: "#fded02" + blue: "#01a0e4" + magenta: "#a16a94" + cyan: "#b5e4f4" + white: "#a5a2a2" + bright: + black: "#5c5855" + red: "#db2d20" + green: "#01a252" + yellow: "#fded02" + blue: "#01a0e4" + magenta: "#a16a94" + cyan: "#b5e4f4" + white: "#f7f7f7" + - theme: 3024.dark +colors: + name: vscode (dark) + author: senpai-10 + primary: + background: "#1E1E1E" + foreground: "#D4D4D4" + cursor: + text: "#1d1f21" + cursor: "#cccccc" + normal: + black: "#000000" + red: "#cd3131" + green: "#0dbc79" + yellow: "#e5e510" + blue: "#2472c8" + magenta: "#bc3fbc" + cyan: "#11a8cd" + white: "#e5e5e5" + bright: + black: "#666666" + red: "#f14c4c" + green: "#23d18b" + yellow: "#f5f543" + blue: "#3b8eea" + magenta: "#d670d6" + cyan: "#29b8db" + white: "#e5e5e5" +theme: vscode.dark + +# Import additional configuration files +# +# Imports are loaded in order, skipping all missing files, with the importing +# file being loaded last. If a field is already present in a previous import, it +# will be replaced. +# +# All imports must either be absolute paths starting with `/`, or paths relative +# to the user's home directory starting with `~/`. +#import: +# - /path/to/alacritty.yml +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +#env: +# TERM variable +# +# This value is used to set the `$TERM` environment variable for +# each instance of Alacritty. If it is not present, alacritty will +# check the local terminfo database and use `alacritty` if it is +# available, otherwise `xterm-256color` is used. +#TERM: alacritty +#window: +# Window dimensions (changes require restart) +# +# Number of lines/columns (not pixels) in the terminal. The number of columns +# must be at least `2`, while using a value of `0` for columns and lines will +# fall back to the window manager's recommended size. +#dimensions: +# columns: 0 +# lines: 0 +# Window position (changes require restart) +# +# Specified in number of pixels. +# If the position is not set, the window manager will handle the placement. +#position: +# x: 0 +# y: 0 +# Window padding (changes require restart) +# +# Blank space added around the window in pixels. This padding is scaled +# by DPI and the specified value is always added at both opposing sides. +#padding: +# x: 0 +# y: 0 +# Spread additional padding evenly around the terminal content. +#dynamic_padding: false +# Window decorations +# +# Values for `decorations`: +# - full: Borders and title bar +# - none: Neither borders nor title bar +# +# Values for `decorations` (macOS only): +# - transparent: Title bar, transparent background and title bar buttons +# - buttonless: Title bar, transparent background and no title bar buttons +#decorations: full +# Background opacity +# +# Window opacity as a floating point number from `0.0` to `1.0`. +# The value `0.0` is completely transparent and `1.0` is opaque. +#opacity: 1.0 +# Startup Mode (changes require restart) +# +# Values for `startup_mode`: +# - Windowed +# - Maximized +# - Fullscreen +# +# Values for `startup_mode` (macOS only): +# - SimpleFullscreen +#startup_mode: Windowed +# Window title +#title: Alacritty +# Allow terminal applications to change Alacritty's window title. +#dynamic_title: true +# Window class (Linux/BSD only): +#class: +# Application instance name +#instance: Alacritty +# General application class +#general: Alacritty +# GTK theme variant (Linux/BSD only) +# +# Override the variant of the GTK theme. Commonly supported values are `dark` +# and `light`. Set this to `None` to use the default theme variant. +#gtk_theme_variant: None +#scrolling: +# Maximum number of lines in the scrollback buffer. +# Specifying '0' will disable scrolling. +#history: 10000 +# Scrolling distance multiplier. +#multiplier: 3 +# Font configuration +#font: +# Normal (roman) font face +#normal: +# Font family +# +# Default: +# - (macOS) Menlo +# - (Linux/BSD) monospace +# - (Windows) Consolas +#family: monospace +# The `style` can be specified to pick a specific face. +#style: Regular +# Bold font face +#bold: +# Font family +# +# If the bold family is not specified, it will fall back to the +# value specified for the normal font. +#family: monospace +# The `style` can be specified to pick a specific face. +#style: Bold +# Italic font face +#italic: +# Font family +# +# If the italic family is not specified, it will fall back to the +# value specified for the normal font. +#family: monospace +# The `style` can be specified to pick a specific face. +#style: Italic +# Bold italic font face +#bold_italic: +# Font family +# +# If the bold italic family is not specified, it will fall back to the +# value specified for the normal font. +#family: monospace +# The `style` can be specified to pick a specific face. +#style: Bold Italic +# Point size +#size: 11.0 +# Offset is the extra space around each character. `offset.y` can be thought +# of as modifying the line spacing, and `offset.x` as modifying the letter +# spacing. +#offset: +# x: 0 +# y: 0 +# Glyph offset determines the locations of the glyphs within their cells with +# the default being at the bottom. Increasing `x` moves the glyph to the +# right, increasing `y` moves the glyph upward. +#glyph_offset: +# x: 0 +# y: 0 +# Thin stroke font rendering (macOS only) +# +# Thin strokes are suitable for retina displays, but for non-retina screens +# it is recommended to set `use_thin_strokes` to `false`. +#use_thin_strokes: true +# Use built-in font for box drawing characters. +# +# If `true`, Alacritty will use a custom built-in font for box drawing +# characters (Unicode points 2500 - 259f). +# +#builtin_box_drawing: true +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: false +# Colors (Tomorrow Night) +#colors: +# Default colors +#primary: +# background: '#1d1f21' +# foreground: '#c5c8c6' +# Bright and dim foreground colors +# +# The dimmed foreground color is calculated automatically if it is not +# present. If the bright foreground color is not set, or +# `draw_bold_text_with_bright_colors` is `false`, the normal foreground +# color will be used. +#dim_foreground: '#828482' +#bright_foreground: '#eaeaea' +# Cursor colors +# +# Colors which should be used to draw the terminal cursor. +# +# Allowed values are CellForeground/CellBackground, which reference the +# affected cell, or hexadecimal colors like #ff00ff. +#cursor: +# text: CellBackground +# cursor: CellForeground +# Vi mode cursor colors +# +# Colors for the cursor when the vi mode is active. +# +# Allowed values are CellForeground/CellBackground, which reference the +# affected cell, or hexadecimal colors like #ff00ff. +#vi_mode_cursor: +# text: CellBackground +# cursor: CellForeground +# Search colors +# +# Colors used for the search bar and match highlighting. +#search: +# Allowed values are CellForeground/CellBackground, which reference the +# affected cell, or hexadecimal colors like #ff00ff. +#matches: +# foreground: '#000000' +# background: '#ffffff' +#focused_match: +# foreground: '#ffffff' +# background: '#000000' +#bar: +# background: '#c5c8c6' +# foreground: '#1d1f21' +# Keyboard regex hints +#hints: +# First character in the hint label +# +# Allowed values are CellForeground/CellBackground, which reference the +# affected cell, or hexadecimal colors like #ff00ff. +#start: +# foreground: '#1d1f21' +# background: '#e9ff5e' +# All characters after the first one in the hint label +# +# Allowed values are CellForeground/CellBackground, which reference the +# affected cell, or hexadecimal colors like #ff00ff. +#end: +# foreground: '#e9ff5e' +# background: '#1d1f21' +# Line indicator +# +# Color used for the indicator displaying the position in history during +# search and vi mode. +# +# By default, these will use the opposing primary color. +#line_indicator: +# foreground: None +# background: None +# Selection colors +# +# Colors which should be used to draw the selection area. +# +# Allowed values are CellForeground/CellBackground, which reference the +# affected cell, or hexadecimal colors like #ff00ff. +#selection: +# text: CellBackground +# background: CellForeground +# Normal colors +#normal: +# black: '#1d1f21' +# red: '#cc6666' +# green: '#b5bd68' +# yellow: '#f0c674' +# blue: '#81a2be' +# magenta: '#b294bb' +# cyan: '#8abeb7' +# white: '#c5c8c6' +# Bright colors +#bright: +# black: '#666666' +# red: '#d54e53' +# green: '#b9ca4a' +# yellow: '#e7c547' +# blue: '#7aa6da' +# magenta: '#c397d8' +# cyan: '#70c0b1' +# white: '#eaeaea' +# Dim colors +# +# If the dim colors are not set, they will be calculated automatically based +# on the `normal` colors. +#dim: +# black: '#131415' +# red: '#864343' +# green: '#777c44' +# yellow: '#9e824c' +# blue: '#556a7d' +# magenta: '#75617b' +# cyan: '#5b7d78' +# white: '#828482' +# Indexed Colors +# +# The indexed colors include all colors from 16 to 256. +# When these are not set, they're filled with sensible defaults. +# +# Example: +# `- { index: 16, color: '#ff00ff' }` +# +#indexed_colors: [] +# Transparent cell backgrounds +# +# Whether or not `window.opacity` applies to all cell backgrounds or only to +# the default background. When set to `true` all cells will be transparent +# regardless of their background color. +#transparent_background_colors: false +# Bell +# +# The bell is rung every time the BEL control character is received. +#bell: +# Visual Bell Animation +# +# Animation effect for flashing the screen when the visual bell is rung. +# +# Values for `animation`: +# - Ease +# - EaseOut +# - EaseOutSine +# - EaseOutQuad +# - EaseOutCubic +# - EaseOutQuart +# - EaseOutQuint +# - EaseOutExpo +# - EaseOutCirc +# - Linear +#animation: EaseOutExpo +# Duration of the visual bell flash in milliseconds. A `duration` of `0` will +# disable the visual bell animation. +#duration: 0 +# Visual bell animation color. +#color: '#ffffff' +# Bell Command +# +# This program is executed whenever the bell is rung. +# +# When set to `command: None`, no command will be executed. +# +# Example: +# command: +# program: notify-send +# args: ["Hello, World!"] +# +#command: None +#selection: +# This string contains all characters that are used as separators for +# "semantic words" in Alacritty. +#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" +# When set to `true`, selected text will be copied to the primary clipboard. +#save_to_clipboard: false +#cursor: +# Cursor style +#style: +# Cursor shape +# +# Values for `shape`: +# - ▇ Block +# - _ Underline +# - | Beam +#shape: Block +# Cursor blinking state +# +# Values for `blinking`: +# - Never: Prevent the cursor from ever blinking +# - Off: Disable blinking by default +# - On: Enable blinking by default +# - Always: Force the cursor to always blink +#blinking: Off +# Vi mode cursor style +# +# If the vi mode cursor style is `None` or not specified, it will fall back to +# the style of the active value of the normal cursor. +# +# See `cursor.style` for available options. +#vi_mode_style: None +# Cursor blinking interval in milliseconds. +#blink_interval: 750 +# If this is `true`, the cursor will be rendered as a hollow box when the +# window is not focused. +#unfocused_hollow: true +# Thickness of the cursor relative to the cell width as floating point number +# from `0.0` to `1.0`. +#thickness: 0.15 +# Live config reload (changes require restart) +#live_config_reload: true +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. +# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the +# shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux/BSD) user login shell +# - (Windows) powershell +#shell: +# program: /bin/bash +# args: +# - --login +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true +# Offer IPC using `alacritty msg` (unix only) +#ipc_socket: true +#mouse: +# Click settings +# +# The `double_click` and `triple_click` settings control the time +# alacritty should wait for accepting multiple clicks as one double +# or triple click. +#double_click: { threshold: 300 } +#triple_click: { threshold: 300 } +# If this is `true`, the cursor is temporarily hidden when typing. +#hide_when_typing: false +# Regex hints +# +# Terminal hints can be used to find text in the visible part of the terminal +# and pipe it to other applications. +#hints: +# Keys used for the hint labels. +#alphabet: "jfkdls;ahgurieowpq" +# List with all available hints +# +# Each hint must have a `regex` and either an `action` or a `command` field. +# The fields `mouse`, `binding` and `post_processing` are optional. +# +# The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and +# `mouse.mods` accept the same values as they do in the `key_bindings` section. +# +# The `mouse.enabled` field controls if the hint should be underlined while +# the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. +# +# If the `post_processing` field is set to `true`, heuristics will be used to +# shorten the match if there are characters likely not to be part of the hint +# (e.g. a trailing `.`). This is most useful for URIs. +# +# Values for `action`: +# - Copy +# Copy the hint's text to the clipboard. +# - Paste +# Paste the hint's text to the terminal or search. +# - Select +# Select the hint's text. +# - MoveViModeCursor +# Move the vi mode cursor to the beginning of the hint. +#enabled: +# - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ +# [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" +# command: xdg-open +# post_processing: true +# mouse: +# enabled: true +# mods: None +# binding: +# key: U +# mods: Control|Shift +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# To trigger mouse bindings when an application running within Alacritty +# captures the mouse, the `Shift` modifier is automatically added as a +# requirement. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings for actions not exclusive to mouse mode) +# +# - Mouse exclusive actions: +# +# - ExpandSelection +# Expand the selection to the current mouse cursor location. +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Right, action: ExpandSelection } +# - { mouse: Right, mods: Control, action: ExpandSelection } +# - { mouse: Middle, mode: ~Vi, action: PasteSelection } +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - ToggleViMode +# - SearchForward +# Start searching toward the right of the search origin. +# - SearchBackward +# Start searching toward the left of the search origin. +# - Copy +# - Paste +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollHalfPageUp +# - ScrollHalfPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# Remove the terminal's scrollback history. +# - Hide +# Hide the Alacritty window. +# - Minimize +# Minimize the Alacritty window. +# - Quit +# Quit Alacritty. +# - ToggleFullscreen +# - SpawnNewInstance +# Spawn a new instance of Alacritty. +# - CreateNewWindow +# Create a new Alacritty window from the current process. +# - ClearLogNotice +# Clear Alacritty's UI warning and error notice. +# - ClearSelection +# Remove the active selection. +# - ReceiveChar +# - None +# +# - Vi mode exclusive actions: +# +# - Open +# Perform the action of the first matching hint under the vi mode cursor +# with `mouse.enabled` set to `true`. +# - ToggleNormalSelection +# - ToggleLineSelection +# - ToggleBlockSelection +# - ToggleSemanticSelection +# Toggle semantic selection based on `selection.semantic_escape_chars`. +# +# - Vi mode exclusive cursor motion actions: +# +# - Up +# One line up. +# - Down +# One line down. +# - Left +# One character left. +# - Right +# One character right. +# - First +# First column, or beginning of the line when already at the first column. +# - Last +# Last column, or beginning of the line when already at the last column. +# - FirstOccupied +# First non-empty cell in this terminal row, or first non-empty cell of +# the line when already at the first cell of the row. +# - High +# Top of the screen. +# - Middle +# Center of the screen. +# - Low +# Bottom of the screen. +# - SemanticLeft +# Start of the previous semantically separated word. +# - SemanticRight +# Start of the next semantically separated word. +# - SemanticLeftEnd +# End of the previous semantically separated word. +# - SemanticRightEnd +# End of the next semantically separated word. +# - WordLeft +# Start of the previous whitespace separated word. +# - WordRight +# Start of the next whitespace separated word. +# - WordLeftEnd +# End of the previous whitespace separated word. +# - WordRightEnd +# End of the next whitespace separated word. +# - Bracket +# Character matching the bracket at the cursor's location. +# - SearchNext +# Beginning of the next match. +# - SearchPrevious +# Beginning of the previous match. +# - SearchStart +# Start of the match to the left of the vi mode cursor. +# - SearchEnd +# End of the match to the right of the vi mode cursor. +# +# - Search mode exclusive actions: +# - SearchFocusNext +# Move the focus to the next search match. +# - SearchFocusPrevious +# Move the focus to the previous search match. +# - SearchConfirm +# - SearchCancel +# - SearchClear +# Reset the search regex. +# - SearchDeleteWord +# Delete the last word in the search regex. +# - SearchHistoryPrevious +# Go to the previous regex in the search history. +# - SearchHistoryNext +# Go to the next regex in the search history. +# +# - macOS exclusive actions: +# - ToggleSimpleFullscreen +# Enter fullscreen without occupying another space. +# +# - Linux/BSD exclusive actions: +# +# - CopySelection +# Copy from the selection buffer. +# - PasteSelection +# Paste from the selection buffer. +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Search +# - Alt +# - Vi +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# in the order they were defined in. +#key_bindings: +#- { key: Paste, action: Paste } +#- { key: Copy, action: Copy } +#- { key: L, mods: Control, action: ClearLogNotice } +#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } +#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } +#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } +#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } +#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } +# Vi Mode +#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } +#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } +#- { key: Escape, mode: Vi|~Search, action: ClearSelection } +#- { key: I, mode: Vi|~Search, action: ToggleViMode } +#- { key: I, mode: Vi|~Search, action: ScrollToBottom } +#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } +#- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } +#- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } +#- { key: G, mode: Vi|~Search, action: ScrollToTop } +#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } +#- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } +#- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } +#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } +#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } +#- { key: Y, mode: Vi|~Search, action: Copy } +#- { key: Y, mode: Vi|~Search, action: ClearSelection } +#- { key: Copy, mode: Vi|~Search, action: ClearSelection } +#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } +#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } +#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } +#- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } +#- { key: Return, mode: Vi|~Search, action: Open } +#- { key: K, mode: Vi|~Search, action: Up } +#- { key: J, mode: Vi|~Search, action: Down } +#- { key: H, mode: Vi|~Search, action: Left } +#- { key: L, mode: Vi|~Search, action: Right } +#- { key: Up, mode: Vi|~Search, action: Up } +#- { key: Down, mode: Vi|~Search, action: Down } +#- { key: Left, mode: Vi|~Search, action: Left } +#- { key: Right, mode: Vi|~Search, action: Right } +#- { key: Key0, mode: Vi|~Search, action: First } +#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } +#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } +#- { key: H, mods: Shift, mode: Vi|~Search, action: High } +#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } +#- { key: L, mods: Shift, mode: Vi|~Search, action: Low } +#- { key: B, mode: Vi|~Search, action: SemanticLeft } +#- { key: W, mode: Vi|~Search, action: SemanticRight } +#- { key: E, mode: Vi|~Search, action: SemanticRightEnd } +#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } +#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } +#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } +#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } +#- { key: Slash, mode: Vi|~Search, action: SearchForward } +#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } +#- { key: N, mode: Vi|~Search, action: SearchNext } +#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } +# Search Mode +#- { key: Return, mode: Search|Vi, action: SearchConfirm } +#- { key: Escape, mode: Search, action: SearchCancel } +#- { key: C, mods: Control, mode: Search, action: SearchCancel } +#- { key: U, mods: Control, mode: Search, action: SearchClear } +#- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } +#- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } +#- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } +#- { key: Up, mode: Search, action: SearchHistoryPrevious } +#- { key: Down, mode: Search, action: SearchHistoryNext } +#- { key: Return, mode: Search|~Vi, action: SearchFocusNext } +#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } +# (Windows, Linux, and BSD only) +#- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } +#- { key: C, mods: Control|Shift, action: Copy } +#- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } +#- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } +#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } +#- { key: Insert, mods: Shift, action: PasteSelection } +#- { key: Key0, mods: Control, action: ResetFontSize } +#- { key: Equals, mods: Control, action: IncreaseFontSize } +#- { key: Plus, mods: Control, action: IncreaseFontSize } +#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } +#- { key: Minus, mods: Control, action: DecreaseFontSize } +#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } +# (Windows only) +#- { key: Return, mods: Alt, action: ToggleFullscreen } +# (macOS only) +#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } +#- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } +#- { key: Key0, mods: Command, action: ResetFontSize } +#- { key: Equals, mods: Command, action: IncreaseFontSize } +#- { key: Plus, mods: Command, action: IncreaseFontSize } +#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } +#- { key: Minus, mods: Command, action: DecreaseFontSize } +#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } +#- { key: V, mods: Command, action: Paste } +#- { key: C, mods: Command, action: Copy } +#- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } +#- { key: H, mods: Command, action: Hide } +#- { key: H, mods: Command|Alt, action: HideOtherApplications } +#- { key: M, mods: Command, action: Minimize } +#- { key: Q, mods: Command, action: Quit } +#- { key: W, mods: Command, action: Quit } +#- { key: N, mods: Command, action: SpawnNewInstance } +#- { key: F, mods: Command|Control, action: ToggleFullscreen } +#- { key: F, mods: Command, mode: ~Search, action: SearchForward } +#- { key: B, mods: Command, mode: ~Search, action: SearchBackward } +#debug: +# Display the time it takes to redraw each frame. +#render_timer: false +# Keep the log file after quitting Alacritty. +#persistent_logging: false +# Log level +# +# Values for `log_level`: +# - Off +# - Error +# - Warn +# - Info +# - Debug +# - Trace +#log_level: Warn +# Print all received window events. +#print_events: false From efa2f54c744726364f08c17abd6b6d43c3d3942b Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 22 May 2022 14:48:06 -0400 Subject: [PATCH 30/48] emacs: changed doom config to literate format --- emacs/doom/{config.el => config.org} | 143 +++++++++++++++++---------- emacs/doom/init.el | 2 +- 2 files changed, 94 insertions(+), 51 deletions(-) rename emacs/doom/{config.el => config.org} (87%) diff --git a/emacs/doom/config.el b/emacs/doom/config.org similarity index 87% rename from emacs/doom/config.el rename to emacs/doom/config.org index aac9db1..d7cade8 100644 --- a/emacs/doom/config.el +++ b/emacs/doom/config.org @@ -1,8 +1,30 @@ -;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- +#+title: Doom Emacs Config -;; Place your private configuration here! Remember, you do not need to run 'doom -;; sync' after modifying this file! +* Main +#+PROPERTY: header-args :results silent +** Help +#+begin_src emacs-lisp :tangle yes +;; Here are some additional functions/macros that could help you configure Doom: +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. +#+end_src + +** Overall config +#+begin_src emacs-lisp :tangle yes ;; Some functionality uses this to identify you, e.g. GPG configuration, email ;; clients, file templates and snippets. @@ -28,38 +50,15 @@ ;; `load-theme' function. This is the default: (setq doom-theme 'doom-one) -;; If you use `org' and don't want your org files in the default location below, -;; change `org-directory'. It must be set before org loads! -(setq org-directory "~/Nextcloud/org" - org-roam-directory "~/Nextcloud/org-roam") - -;; (map! :nv "SPC r" "SPC n r") - ;; This determines the style of line numbers in effect. If set to `nil', line ;; numbers are disabled. For relative line numbers, set this to `relative'. (setq display-line-numbers-type 'relative) +#+end_src - -;; Here are some additional functions/macros that could help you configure Doom: -;; -;; - `load!' for loading external *.el files relative to this one -;; - `use-package!' for configuring packages -;; - `after!' for running code after a package has loaded -;; - `add-load-path!' for adding directories to the `load-path', relative to -;; this file. Emacs searches the `load-path' when you load packages with -;; `require' or `use-package'. -;; - `map!' for binding new keys -;; -;; To get information about any of these functions/macros, move the cursor over -;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). -;; This will open documentation for it, including demos of how they are used. -;; -;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how -;; they are implemented. +#+begin_src emacs-lisp :tangle yes ;; Open external terminal -;; (map! :map doom-leader-open-map :desc "Open" "t" (cmd! (call-process-shell-command "terminal&" nil 0))) -(map! :leader :desc "Open external terminal" "o t" (cmd! (call-process-shell-command "xfce4-terminal&" nil 0))) +(map! :leader :desc "Open external terminal" "o t" (cmd! (call-process-shell-command "xfce4-terminal &" nil 0))) ;; Remap font scaling keybindings to make more sense (map! :desc "Increase font size" :n "C-+" #'text-scale-increase) @@ -70,6 +69,7 @@ (map! :desc "Flycheck previous error" :nv "g N" #'flycheck-previous-error) (map! :desc "Format and save" :nvi "C-s" #'fd-format-and-save) +(map! :leader "w 1" #'delete-other-windows) ;; Org-mode custom keybindings (map! :map org-mode-map :nvi "C-k" #'org-backward-element) @@ -77,6 +77,39 @@ (map! :map org-mode-map :nvi "C-h" #'org-up-element) (map! :map org-mode-map :nvi "C-l" #'org-down-element) +(defun fd-format-and-save() + (interactive) + (company-abort) + (evil-force-normal-state) + (+format/buffer) + (save-buffer)) +#+end_src + +** Org +#+begin_src emacs-lisp :tangle yes + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/Nextcloud/org" + org-roam-directory "~/Nextcloud/org-roam") + +;; (setq org-agenda-files (list "~/org")) +;; (custom-set-variables +;; '(org-directory "~/org") +;; '(org-agenda-files (list org-directory))) + +;; (add-to-list 'org-agenda-files "~/org/anothertest.org" 'append) + +;; Adding my org-agenda files +(after! org + (setq org-agenda-files (expand-file-name "org-agenda-files" doom-private-dir))) + +;; (map! :nv "SPC r" "SPC n r") + +#+end_src + +** Spell Checking +#+begin_src emacs-lisp :tangle yes ;; Spell checking settings ;; TODO make toggling of spell checking ('SPC t s') use flyspell-mode in text modesm and flyspell-prog-mode in programming modes (see hooks below) @@ -96,7 +129,6 @@ #'flyspell-prog-mode) (setq ispell-dictionary "english") -(setq lsp-dart-flutter-sdk-dir "/home/julian/snap/flutter/common/flutter") (map! :map doom-leader-toggle-map :desc "Toggle dictionary" "d" #'fd-switch-dictionary) @@ -107,14 +139,15 @@ (ispell-change-dictionary change) (message "Dictionary switched from %s to %s" dic change) )) +#+end_src -(defun fd-format-and-save() - (interactive) - (evil-force-normal-state) - (+format/buffer) - (save-buffer)) +** Flutter +#+begin_src emacs-lisp :tangle yes -(add-hook 'tetris-mode-hook #'turn-off-evil-mode) +(setq lsp-dart-flutter-sdk-dir "/home/julian/snap/flutter/common/flutter") +#+end_src +** Evil snipe +#+begin_src emacs-lisp :tangle yes ;; Make sniping simpler for german keyboard (setq evil-snipe-scope 'visible) @@ -123,11 +156,10 @@ (map! :map evil-snipe-parent-transient-map "," #'evil-snipe-repeat) (map! :map evil-snipe-parent-transient-map ";" #'evil-snipe-repeat-reverse) +#+end_src -;; (when evil-snipe-override-evil-repeat-keys -;; (evil-define-key 'motion map -;; "," 'evil-snipe-repeat -;; ";" 'evil-snipe-repeat-reverse)) +** Python +#+begin_src emacs-lisp :tangle yes ;; Python settings ;; (add-hook 'python-mode-hook (lambda () @@ -138,6 +170,10 @@ ;; (when (flycheck-may-enable-checker 'lsp) ;; (flycheck-select-checker 'python-pylint)))) +#+end_src + +** Matlab +#+begin_src emacs-lisp :tangle yes ;; (autoload 'matlab-mode "matlab" "Matlab Editing Mode" t) ;; (add-to-list @@ -145,17 +181,11 @@ ;; '("\\.m$" . matlab-mode)) ;; (setq matlab-indent-function t) ;; (setq matlab-shell-command "/urs/local/bin/matlab") +#+end_src -;; (setq org-agenda-files (list "~/org")) -;; (custom-set-variables -;; '(org-directory "~/org") -;; '(org-agenda-files (list org-directory))) - -;; (add-to-list 'org-agenda-files "~/org/anothertest.org" 'append) - -;; Adding my org-agenda files -(after! org - (setq org-agenda-files (expand-file-name "org-agenda-files" doom-private-dir))) +** Features +*** Toggle word case +#+begin_src elisp :tangle yes (map! :desc "Toggle case of word" :nv "g C" #'toggle-word-case) @@ -179,6 +209,19 @@ ((string= "Lu" first-char-prop) ; Upper case (downcase-region $p1 (+ $p1 1))) (t (message "Word does not start with a alphabetic character")))))) +#+end_src + +*** Tetris +#+begin_src emacs-lisp :tangle yes + +(add-hook 'tetris-mode-hook #'turn-off-evil-mode) +#+end_src +** Company +#+begin_src emacs-lisp :tangle yes ;; Add company-quickhelp (company-quickhelp-mode) + +(map! :map company-active-map "TAB" nil) +(map! :map company-active-map "" nil) +#+end_src diff --git a/emacs/doom/init.el b/emacs/doom/init.el index f331dd1..128ef59 100644 --- a/emacs/doom/init.el +++ b/emacs/doom/init.el @@ -184,5 +184,5 @@ ;;twitter ; twitter client https://twitter.com/vnought :config - ;;literate + literate (default +bindings +smartparens)) From a502df7f11793b50ab7d7e42e0263c42f2176224 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 22 May 2022 14:49:11 -0400 Subject: [PATCH 31/48] nvim: not using plugins anymore; separated vim and nvim config --- .dotter/global.toml | 2 ++ .dotter/local.toml | 2 +- vim/init.vim | 10 +++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.dotter/global.toml b/.dotter/global.toml index 87f368e..e655996 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -12,6 +12,8 @@ mc = "~/.config/mc" [vim.files] # type symbolic prevents interpreting '{{' as template "vim/.vimrc" = { target = "~/.vimrc", type = "symbolic" } + +[nvim.files] "vim/init.vim" = { target = "~/.config/nvim/init.vim", type = "symbolic" } [i3.files] diff --git a/.dotter/local.toml b/.dotter/local.toml index 26ded92..bfe400e 100644 --- a/.dotter/local.toml +++ b/.dotter/local.toml @@ -1,2 +1,2 @@ # includes = [] -packages = ["mc", "vim", "emacs", "i3", "alacritty"] +packages = ["mc", "nvim", "emacs", "i3", "alacritty"] diff --git a/vim/init.vim b/vim/init.vim index 6c47b76..b0b90e2 100644 --- a/vim/init.vim +++ b/vim/init.vim @@ -31,13 +31,13 @@ endif let mapleader = " " " Plugins -call plug#begin('~/.vim/plugged') +" call plug#begin('~/.vim/plugged') -Plug 'itchyny/lightline.vim' -Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +" Plug 'itchyny/lightline.vim' +" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " Plug 'Valloric/YouCompleteMe' " Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} -Plug 'https://github.com/ap/vim-css-color.git' +" Plug 'https://github.com/ap/vim-css-color.git' " Collection of common configurations for the Nvim LSP client " Plug 'neovim/nvim-lspconfig' @@ -57,7 +57,7 @@ Plug 'https://github.com/ap/vim-css-color.git' " Plug 'tpope/vim-commentary' -call plug#end() +" call plug#end() "------------------------------------------------------------ " Must have options {{{1 From 934b19045a387ac8e43d763f32a35f032ba624f7 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 22 May 2022 14:49:37 -0400 Subject: [PATCH 32/48] emacs: changed spacemacs config --- emacs/spacemacs/.spacemacs | 72 +++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 21 deletions(-) diff --git a/emacs/spacemacs/.spacemacs b/emacs/spacemacs/.spacemacs index 827c090..0056f9d 100644 --- a/emacs/spacemacs/.spacemacs +++ b/emacs/spacemacs/.spacemacs @@ -32,35 +32,39 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - '( + '(csv + python ;; ---------------------------------------------------------------- ;; Example of useful layers you may want to use right away. ;; Uncomment some layer names and press `SPC f e R' (Vim style) or ;; `M-m f e R' (Emacs style) to install them. ;; ---------------------------------------------------------------- ;; (dart :variables dart-server-sdk-path "/bin/cache/dart-sdk/") + (csharp :variables + csharp-backend nil) rust tabs auto-completion (auto-completion :variables - auto-completion-return-key-behavior 'complete - auto-completion-tab-key-behavior 'cycle - auto-completion-complete-with-key-sequence nil - auto-completion-complete-with-key-sequence-delay 0.1 - auto-completion-minimum-prefix-length 2 - auto-completion-idle-delay 0.2 - auto-completion-private-snippets-directory nil - auto-completion-enable-snippets-in-popup nil - auto-completion-enable-help-tooltip t - auto-completion-use-company-box nil - auto-completion-enable-sort-by-usage nil) + auto-completion-return-key-behavior 'complete + auto-completion-tab-key-behavior 'cycle + auto-completion-complete-with-key-sequence nil + auto-completion-complete-with-key-sequence-delay 0.1 + auto-completion-minimum-prefix-length 2 + auto-completion-idle-delay 0.2 + auto-completion-private-snippets-directory nil + auto-completion-enable-snippets-in-popup nil + auto-completion-enable-help-tooltip 't + auto-completion-use-company-box nil + auto-completion-enable-sort-by-usage nil) ;; better-defaults emacs-lisp - git + (git :variables + git-magit-status-fullscreen t) helm (lsp :variables - lsp-lens-enable t - lsp-ui-doc-enable t) + lsp-lens-enable t + lsp-ui-doc-enable t) ;; markdown multiple-cursors org @@ -68,10 +72,13 @@ This function should only modify configuration layer settings." ;; shell-default-height 30 ;; shell-default-position 'bottom) (spell-checking :variables - spell-checking-enable-by-default nil) + spell-checking-enable-by-default nil) syntax-checking ;; version-control - treemacs) + treemacs + json + (evil-snipe :variables evil-snipe-enable-alternate-f-and-t-behaviors t) + ) ;; List of additional packages that will be installed without being wrapped @@ -82,7 +89,7 @@ This function should only modify configuration layer settings." ;; `dotspacemacs/user-config'. To use a local version of a package, use the ;; `:location' property: '(your-package :location "~/path/to/your-package/") ;; Also include the dependencies as they will not be resolved automatically. - dotspacemacs-additional-packages '() + dotspacemacs-additional-packages '(format-all) ;; A list of packages that cannot be updated. dotspacemacs-frozen-packages '() @@ -268,7 +275,7 @@ It should only modify the values of Spacemacs settings." ;; a non-negative integer (pixel size), or a floating-point (point size). ;; Point size is recommended, because it's device independent. (default 10.0) dotspacemacs-default-font '("Source Code Pro" - :size 12.0 + :size 11.0 :weight normal :width normal) @@ -572,23 +579,45 @@ This function is called at the very end of Spacemacs startup, after layer configuration. Put your configuration code here, except for variables that should be set before packages are loaded." + (setq rust-format-on-save t) ;; (global-set-key (kbd "M-1") 'evil-jump-forward) ;; (setq centaur-tabs-show-count t) (define-key winum-keymap (kbd "M-1") 'tab-bar-switch-to-tab) ;; (evil-define-key '(normal) nil (kbd "C-i") 'evil-jump-forward) (define-key evil-motion-state-map (kbd "C-i") 'evil-jump-forward) + (evil-define-key* '(normal insert visual) 'global (kbd "C-s") 'escape-and-save) + (evil-define-key* '(normal visual) 'global (kbd "gD") 'lsp-find-references) + + (global-set-key (kbd "C--") 'spacemacs/scale-down-font) + (global-set-key (kbd "C-+") 'spacemacs/scale-up-font) + (global-set-key (kbd "C-=") 'spacemacs/reset-font-size) (spacemacs/set-leader-keys "." 'lazy-helm/spacemacs/helm-find-files) + (spacemacs/set-leader-keys ":" 'helm-projectile-find-file) (spacemacs/declare-prefix "o" "open external") (spacemacs/set-leader-keys "ot" 'open-external-terminal) + (spacemacs/set-leader-keys "gg" 'magit-status) + (spacemacs/set-leader-keys "ee" 'flycheck-explain-error-at-point) + ;; (spacemacs/set-leader-keys "br" '(revert-buffer nil nil)) + (setq evil-escape-key-sequence "kj") (defun open-external-terminal () "Open external terminal" (interactive) (call-process-shell-command "alacritty&" nil 0)) -) + + (defun escape-and-save() + "Evil escape and then save buffer" + (interactive) + (evil-escape) + (condition-case nil + (format-all-buffer) + (error nil)) + (save-buffer)) + + ) ;; Do not write anything past this comment. This is where Emacs will ;; auto-generate custom variable definitions. @@ -603,8 +632,9 @@ This function is called at the very end of Spacemacs initialization." ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(evil-want-Y-yank-to-eol nil) + '(org-babel-load-languages '((csharp . t) (emacs-lisp))) '(package-selected-packages - '(company-quickhelp stickyfunc-enhance srefactor yasnippet-snippets treemacs-magit smeargle orgit-forge orgit org-rich-yank org-projectile org-category-capture org-present org-pomodoro alert log4e gntp org-mime org-download org-contrib org-cliplink org lsp-ui lsp-origami origami htmlize helm-org-rifle helm-lsp helm-git-grep helm-company helm-c-yasnippet gnuplot gitignore-templates git-timemachine git-modes git-messenger git-link fuzzy forge yaml magit ghub closql emacsql-sqlite emacsql treepy magit-section git-commit with-editor transient flyspell-correct-helm flyspell-correct flycheck-pos-tip evil-org centaur-tabs auto-yasnippet yasnippet auto-dictionary ac-ispell auto-complete toml-mode ron-mode racer pos-tip rust-mode helm-gtags ggtags flycheck-rust dap-mode lsp-treemacs bui lsp-mode counsel-gtags counsel swiper ivy company cargo markdown-mode ws-butler writeroom-mode winum which-key volatile-highlights vi-tilde-fringe uuidgen use-package undo-tree treemacs-projectile treemacs-persp treemacs-icons-dired treemacs-evil toc-org symon symbol-overlay string-inflection string-edit spaceline-all-the-icons restart-emacs request rainbow-delimiters quickrun popwin pcre2el password-generator paradox overseer org-superstar open-junk-file nameless multi-line macrostep lorem-ipsum link-hint inspector info+ indent-guide hybrid-mode hungry-delete hl-todo highlight-parentheses highlight-numbers highlight-indentation hide-comnt helm-xref helm-themes helm-swoop helm-purpose helm-projectile helm-org helm-mode-manager helm-make helm-ls-git helm-flx helm-descbinds helm-ag google-translate golden-ratio font-lock+ flycheck-package flycheck-elsa flx-ido fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-textobj-line evil-terminal-cursor-changer evil-surround evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-easymotion evil-collection evil-cleverparens evil-args evil-anzu eval-sexp-fu emr elisp-slime-nav elisp-def editorconfig dumb-jump drag-stuff dotenv-mode dired-quick-sort diminish devdocs define-word column-enforce-mode clean-aindent-mode centered-cursor-mode auto-highlight-symbol auto-compile aggressive-indent ace-link ace-jump-helm-line))) + '(csv-mode yapfify sphinx-doc pytest pyenv-mode pydoc py-isort poetry pippel pipenv pyvenv pip-requirements nose lsp-python-ms lsp-pyright live-py-mode importmagic epc ctable concurrent deferred helm-pydoc helm-cscope xcscope cython-mode company-anaconda blacken anaconda-mode pythonic evil-snipe omnisharp csharp-mode web-beautify prettier-js json-reformat json-navigator hierarchy json-mode json-snatcher format-all language-id inheritenv company-quickhelp stickyfunc-enhance srefactor yasnippet-snippets treemacs-magit smeargle orgit-forge orgit org-rich-yank org-projectile org-category-capture org-present org-pomodoro alert log4e gntp org-mime org-download org-contrib org-cliplink org lsp-ui lsp-origami origami htmlize helm-org-rifle helm-lsp helm-git-grep helm-company helm-c-yasnippet gnuplot gitignore-templates git-timemachine git-modes git-messenger git-link fuzzy forge yaml magit ghub closql emacsql-sqlite emacsql treepy magit-section git-commit with-editor transient flyspell-correct-helm flyspell-correct flycheck-pos-tip evil-org centaur-tabs auto-yasnippet yasnippet auto-dictionary ac-ispell auto-complete toml-mode ron-mode racer pos-tip rust-mode helm-gtags ggtags flycheck-rust dap-mode lsp-treemacs bui lsp-mode counsel-gtags counsel swiper ivy company cargo markdown-mode ws-butler writeroom-mode winum which-key volatile-highlights vi-tilde-fringe uuidgen use-package undo-tree treemacs-projectile treemacs-persp treemacs-icons-dired treemacs-evil toc-org symon symbol-overlay string-inflection string-edit spaceline-all-the-icons restart-emacs request rainbow-delimiters quickrun popwin pcre2el password-generator paradox overseer org-superstar open-junk-file nameless multi-line macrostep lorem-ipsum link-hint inspector info+ indent-guide hybrid-mode hungry-delete hl-todo highlight-parentheses highlight-numbers highlight-indentation hide-comnt helm-xref helm-themes helm-swoop helm-purpose helm-projectile helm-org helm-mode-manager helm-make helm-ls-git helm-flx helm-descbinds helm-ag google-translate golden-ratio font-lock+ flycheck-package flycheck-elsa flx-ido fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-textobj-line evil-terminal-cursor-changer evil-surround evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-easymotion evil-collection evil-cleverparens evil-args evil-anzu eval-sexp-fu emr elisp-slime-nav elisp-def editorconfig dumb-jump drag-stuff dotenv-mode dired-quick-sort diminish devdocs define-word column-enforce-mode clean-aindent-mode centered-cursor-mode auto-highlight-symbol auto-compile aggressive-indent ace-link ace-jump-helm-line))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. From 34046aae4b05c59a45ea9bdf11098b9fdc2897af Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sun, 22 May 2022 14:50:07 -0400 Subject: [PATCH 33/48] i3: tried running rofi on mod key --- i3/i3/config | 1 + 1 file changed, 1 insertion(+) diff --git a/i3/i3/config b/i3/i3/config index 93f83a7..d74efdd 100644 --- a/i3/i3/config +++ b/i3/i3/config @@ -57,6 +57,7 @@ bindsym Mod1+F4 kill # start dmenu (a program launcher) bindsym $mod+d exec rofi -show run #dmenu_recency -i +# bindsym $mod exec rofi -show run #dmenu_recency -i # 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. From cce626d687aaf8de62348852fc8dc5e2c6870e6a Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 2 Jun 2022 15:13:42 +0000 Subject: [PATCH 34/48] shell: added zsh and starship --- .dotter/global.toml | 6 +++ .dotter/local.toml | 2 +- starship/starship.toml | 13 +++++ zsh/.zshrc | 114 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 starship/starship.toml create mode 100644 zsh/.zshrc diff --git a/.dotter/global.toml b/.dotter/global.toml index e655996..1207504 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -30,3 +30,9 @@ mc = "~/.config/mc" [alacritty.files] alacritty = "~/.config/alacritty" + +[starship.files] +starship = "~/.config/" + +[zsh.files] +zsh = "~/" \ No newline at end of file diff --git a/.dotter/local.toml b/.dotter/local.toml index bfe400e..baed2bc 100644 --- a/.dotter/local.toml +++ b/.dotter/local.toml @@ -1,2 +1,2 @@ # includes = [] -packages = ["mc", "nvim", "emacs", "i3", "alacritty"] +packages = ["mc", "nvim", "emacs", "i3", "alacritty", "starship", "zsh"] diff --git a/starship/starship.toml b/starship/starship.toml new file mode 100644 index 0000000..69cbbd6 --- /dev/null +++ b/starship/starship.toml @@ -0,0 +1,13 @@ +add_newline = false +#format = "$all$directory$character" + +[line_break] +disabled = true + +[directory] +fish_style_pwd_dir_length = 1 + +[status] +map_symbol = true +format = '[$symbol$status $common_meaning$signal_name$maybe_int]($style) ' +disabled = false diff --git a/zsh/.zshrc b/zsh/.zshrc new file mode 100644 index 0000000..4eac54b --- /dev/null +++ b/zsh/.zshrc @@ -0,0 +1,114 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH + +# Path to your oh-my-zsh installation. +export ZSH="$HOME/.oh-my-zsh" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time oh-my-zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +# ZSH_THEME="robbyrussell" +# ZSH_THEME="random" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +# zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=(colored-man-pages zsh-interactive-cd) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# Set personal aliases, overriding those provided by oh-my-zsh libs, +# plugins, and themes. Aliases can be placed here, though oh-my-zsh +# users are encouraged to define aliases within the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" + +alias vi="nvim" +alias ls="ls --color" +alias grep="grep --color" +alias la="ls -Alh --color" + +mkcd () +{ + mkdir -p -- "$1" && cd -P -- "$1" +} + +eval "$(starship init zsh)" From 1487887f74da57cf389b8874bab2460ce4fcd409 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Thu, 2 Jun 2022 15:47:04 +0000 Subject: [PATCH 35/48] zsh: finished setting up path and plugins --- zsh/.zshrc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/zsh/.zshrc b/zsh/.zshrc index 4eac54b..18b31d3 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,5 +1,7 @@ # If you come from bash you might have to change your $PATH. # export PATH=$HOME/bin:/usr/local/bin:$PATH +export PATH=/home/julian/emacs/doom-emacs/bin:$PATH +export PATH=/home/julian/.cargo/bin:$PATH # Path to your oh-my-zsh installation. export ZSH="$HOME/.oh-my-zsh" @@ -71,7 +73,7 @@ export ZSH="$HOME/.oh-my-zsh" # Custom plugins may be added to $ZSH_CUSTOM/plugins/ # Example format: plugins=(rails git textmate ruby lighthouse) # Add wisely, as too many plugins slow down shell startup. -plugins=(colored-man-pages zsh-interactive-cd) +plugins=(zsh-z colored-man-pages zsh-interactive-cd) source $ZSH/oh-my-zsh.sh @@ -112,3 +114,6 @@ mkcd () } eval "$(starship init zsh)" + +# pacman -S zsh-syntax-highlighting +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh From 5377574b868ab523c9bb90f752a9b5e8e6ba8703 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Fri, 17 Jun 2022 10:23:26 +0000 Subject: [PATCH 36/48] doom: updated init.el --- emacs/doom/init.el | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/emacs/doom/init.el b/emacs/doom/init.el index 128ef59..350e4dc 100644 --- a/emacs/doom/init.el +++ b/emacs/doom/init.el @@ -4,8 +4,8 @@ ;; in. Remember to run 'doom sync' after modifying it! ;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's -;; documentation. There you'll find a "Module Index" link where you'll find -;; a comprehensive list of Doom's modules and what flags they support. +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. ;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or ;; 'C-c c k' for non-vim users) to view its documentation. This works on @@ -15,6 +15,7 @@ ;; directory (for easy access to its source code). (doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh ;;chinese ;;japanese ;;layout ; auie,ctsrnm is the superior home row @@ -23,15 +24,15 @@ company ; the ultimate code completion backend ;;helm ; the *other* search engine for love and life ;;ido ; the other *other* search engine... - ivy ; a search engine for love and life + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future :ui ;;deft ; notational velocity for Emacs doom ; what makes DOOM look the way it does doom-dashboard ; a nifty splash screen for Emacs - doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;doom-quit ; DOOM quit-message prompts when you quit Emacs ;;(emoji +unicode) ; 🙂 - ;;fill-column ; a `fill-column' indicator hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW ;;hydra ;;indent-guides ; highlighted indent columns @@ -39,11 +40,11 @@ ;;minimap ; show a map of the code on the side modeline ; snazzy, Atom-inspired modeline, plus API ;;nav-flash ; blink cursor line after big motions - neotree ; a project drawer, like NERDTree for vim + ;;neotree ; a project drawer, like NERDTree for vim ophints ; highlight the region an operation acts on (popup +defaults) ; tame sudden yet inevitable temporary windows ;;tabs ; a tab bar for Emacs - ;; treemacs ; a project drawer, like neotree but cooler + ;;treemacs ; a project drawer, like neotree but cooler ;;unicode ; extended unicode support for various languages vc-gutter ; vcs diff in the fringe vi-tilde-fringe ; fringe tildes to mark beyond EOB @@ -85,6 +86,7 @@ :tools ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) ;;debugger ; FIXME stepping through code, to help you add bugs ;;direnv ;;docker @@ -93,9 +95,9 @@ (eval +overlay) ; run code, run (also, repls) ;;gist ; interacting with github gists lookup ; navigate your code and its documentation - lsp + lsp ; M-x vscode magit ; a git porcelain for Emacs - ;;make ; run make tasks from Emacs + make ; run make tasks from Emacs ;;pass ; password manager for nerds ;;pdf ; pdf enhancements ;;prodigy ; FIXME managing external services & code builders @@ -112,14 +114,15 @@ :lang ;;agda ; types of types of types of types... ;;beancount ; mind the GAAP - (cc) ; C > C++ == 1 + (cc +lsp) ; C > C++ == 1 ;;clojure ; java with a lisp ;;common-lisp ; if you've seen one lisp, you've seen them all ;;coq ; proofs-as-programs ;;crystal ; ruby at the speed of c ;;csharp ; unity, .NET, and mono shenanigans ;;data ; config/data formats - (dart +flutter +lsp) ; paint ui and not much else + ;;(dart +flutter) ; paint ui and not much else + ;;dhall ;;elixir ; erlang done right ;;elm ; care for a cup of TEA? emacs-lisp ; drown in parentheses @@ -127,17 +130,19 @@ ;;ess ; emacs speaks statistics ;;factor ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) ;;fsharp ; ML stands for Microsoft's Language ;;fstar ; (dependent) types and (monadic) effects and Z3 - gdscript ; the language you waited for + ;;gdscript ; the language you waited for ;;(go +lsp) ; the hipster dialect - ;;(haskell +dante) ; a language that's lazier than I am + ;;(graphql +lsp) ; Give queries a REST + (haskell +lsp) ; a language that's lazier than I am ;;hy ; readability of scheme w/ speed of python ;;idris ; a language you can depend on - ;;json ; At least it ain't XML - ;;(java +meghanada) ; the poster child for carpal tunnel syndrome + json ; At least it ain't XML + ;;(java +lsp) ; the poster child for carpal tunnel syndrome ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) - ;; julia ; a better, faster MATLAB + ;;julia ; a better, faster MATLAB ;;kotlin ; a better, slicker Java(Script) latex ; writing papers in Emacs has never been so fun ;;lean ; for folks with too much to prove @@ -171,7 +176,7 @@ ;;zig ; C, but simpler :email - ;;(mu4e +gmail) + ;;(mu4e +org +gmail) ;;notmuch ;;(wanderlust +gmail) From 5b0960b26b6b49e3b16b8e93eb95adb8065b6e89 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Fri, 17 Jun 2022 10:24:19 +0000 Subject: [PATCH 37/48] i3: use dynamic layouts with i3-layouts --- i3/i3/config | 129 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 90 insertions(+), 39 deletions(-) diff --git a/i3/i3/config b/i3/i3/config index d74efdd..0e80e65 100644 --- a/i3/i3/config +++ b/i3/i3/config @@ -13,17 +13,13 @@ set $mod Mod4 set $scripts ~/.config/i3/scripts set $lock "i3lock --ignore-empty-password --color=000000" -# Font for window titles. Will also be used by the bar unless a different font -# is used in the bar {} block below. -font pango:monospace 12 +# Font for window titles +font pango:FuraCode Nerd Font 12 # 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 12 -# 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 $lock to lock the # screen before suspend. Use loginctl lock-session to lock your screen. exec --no-startup-id xss-lock --transfer-sleep-lock -- $lock --nofork @@ -76,30 +72,28 @@ bindsym $mod+Up focus up bindsym $mod+Right focus right # move focused window -bindsym $mod+Shift+h move left -bindsym $mod+Shift+j move down -bindsym $mod+Shift+k move up -bindsym $mod+Shift+l move right +bindsym $mod+Shift+h exec i3l move left +bindsym $mod+Shift+j exec i3l move down +bindsym $mod+Shift+k exec i3l move up +bindsym $mod+Shift+l exec i3l 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+Shift+Left exec i3l move left +bindsym $mod+Shift+Down exec i3l move down +bindsym $mod+Shift+Up exec i3l move up +bindsym $mod+Shift+Right exec i3l move right -# split in horizontal orientation -bindsym $mod+Shift+v split h - -# split in vertical orientation -bindsym $mod+v split v +# split in horizontal / vertical orientation +# bindsym $mod+Shift+v split h +# bindsym $mod+v split v # enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle # change container layout (stacked, tabbed, toggle split) -bindsym $mod+Shift+w layout stacking -bindsym $mod+w layout tabbed -bindsym $mod+e layout toggle split +# bindsym $mod+Shift+w layout stacking +# bindsym $mod+w layout tabbed +# bindsym $mod+e layout toggle split # toggle tiling / floating bindsym $mod+Shift+space floating toggle @@ -108,11 +102,14 @@ bindsym $mod+Shift+space floating toggle bindsym $mod+space focus mode_toggle # focus the parent container -bindsym $mod+a focus parent +# bindsym $mod+a focus parent # focus the child container #bindsym $mod+d focus child +# The middle button over a titlebar kills the window +bindsym --release button2 kill + # 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" @@ -126,6 +123,17 @@ set $ws8 "8" set $ws9 "9" set $ws10 "10" +set $i3l vstack to workspace $ws1 +set $i3l vstack to workspace $ws2 +set $i3l vstack to workspace $ws3 +set $i3l vstack to workspace $ws4 +set $i3l vstack to workspace $ws5 +set $i3l vstack to workspace $ws6 +set $i3l vstack to workspace $ws7 +set $i3l vstack to workspace $ws8 +set $i3l vstack to workspace $ws9 +set $i3l vstack to workspace $ws10 + # switch to workspace bindsym $mod+1 workspace number $ws1 bindsym $mod+2 workspace number $ws2 @@ -198,12 +206,12 @@ bindsym $mod+r mode "resize" # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) -bar { - status_command i3blocks - position bottom - i3bar_command i3bar --transparency - bindsym button3 exec --no-startup-id jgmenu_run -} +#bar { +# status_command i3blocks +# position bottom +# i3bar_command i3bar --transparency +# bindsym button3 exec --no-startup-id jgmenu_run +#} set $mode_system System (l) lock, (e) logout, (r) reboot, (s) shutdown @@ -243,30 +251,65 @@ mode "$mode_screenshot_clipboard" { } bindsym $mod+Print mode "$mode_screenshot_clipboard" -bindsym $mod+Ctrl+Right move workspace to output right -bindsym $mod+Ctrl+Left move workspace to output right +set $mode_choose_layout Layout (h) vstack-left, (l) vstack-right, (k) hstack-top, (j) hstack-bottom, (c) 2columns +mode "$mode_choose_layout" { + bindsym h exec i3l vstack 0.5 right, mode "default" + bindsym l exec i3l vstack 0.5 left, mode "default" + bindsym j exec i3l hstack 0.5 up, mode "default" + bindsym k exec i3l hstack 0.5 down, mode "default" + bindsym c exec i3l 2columns left, mode "default" + + # back to normal: Escape + bindsym Escape mode "default" +} +bindsym $mod+G mode "$mode_choose_layout" + +bindsym $mod+Ctrl+h exec i3l vstack 0.5 right, mode "default" +bindsym $mod+Ctrl+l exec i3l vstack 0.5 left, mode "default" +bindsym $mod+Ctrl+j exec i3l hstack 0.5 up, mode "default" +bindsym $mod+Ctrl+k exec i3l hstack 0.5 down, mode "default" + +bindsym $mod+Ctrl+Left exec i3l vstack 0.5 right, mode "default" +bindsym $mod+Ctrl+Right exec i3l vstack 0.5 left, mode "default" +bindsym $mod+Ctrl+Down exec i3l hstack 0.5 up, mode "default" +bindsym $mod+Ctrl+Up exec i3l hstack 0.5 down, mode "default" + +#bindsym $mod+Ctrl+Right move workspace to output right +#bindsym $mod+Ctrl+Left move workspace to output right #bindsym $mod+c exec xfce4-terminal --role floating --hide-scrollbar --title Calculator -e qalc bindsym $mod+c exec qalculate-gtk -bindsym $mod+p exec xwacomcalibrate -bindsym $mod+t exec thunar +# bindsym $mod+p exec xwacomcalibrate +# bindsym $mod+t exec thunar +bindsym $mod+t exec krusader #bindsym $mod+m exec xfce4-terminal -x mc bindsym $mod+Shift+c exec $scripts/jupyter-calculator bindsym $mod+b exec firefox -bindsym $mod+s exec pavucontrol +#bindsym $mod+s exec pavucontrol bindsym $mod+u exec pamac-manager +bindsym $mod+p [con_mark="i3l::previous"] focus +bindsym $mod+m [con_mark="i3l:[^:]+:main" workspace="__focused__"] focus +# bindsym $mod+Shift+m [con_mark="i3l:[^:]+:main" workspace="__focused__"] focus; exec i3l swap container with mark "i3l::previous" +#exec $scripts/i3l-swap-master +# bindsym $mod+Shift+m exec i3l [con_mark="i3l:[^:]+:main" workspace="__focused__"] swap container with mark "i3l::current" +# bindsym $mod+Shift+m exec i3l swap container with mark "__focused__:main" + # read 1 character and mark the current window with this character -bindsym $mod+m exec i3-input -F 'mark %s' -l 1 -P 'Mark: ' +# bindsym $mod+m exec i3-input -F 'mark %s' -l 1 -P 'Mark: ' # read 1 character and go to the window with the character -bindsym $mod+Shift+m exec i3-input -F '[con_mark="%s"] focus' -l 1 -P 'Goto: ' +# bindsym $mod+Shift+m exec i3-input -F '[con_mark="%s"] focus' -l 1 -P 'Goto: ' workspace_auto_back_and_forth yes -default_border pixel +# default_border pixel +default_border normal default_floating_border normal +hide_edge_borders smart -focus_on_window_activation focus +show_marks no + +focus_on_window_activation smart assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1 assign [class="TelegramDesktop"] workspace $ws9 @@ -276,7 +319,7 @@ assign [class="Element"] workspace $ws9 assign [class="Thunderbird"] workspace $ws10 assign [class="zoom"] workspace $ws5 -for_window [class="firefox"] focus +for_window [class="firefox" urgent="latest"] focus #for_window [class="Thunderbird"] focus #for_window [class="TelegramDesktop"] no_focus #for_window [class="Rocket.Chat"] no_focus @@ -307,7 +350,9 @@ exec_always ~/.screenlayout/one-screen.sh #exec element-desktop no_focus #exec telegram-desktop no_focus +exec_always --no-startup-id i3-layouts # Rightclick menu +exec_always --no-startup-id ~/.config/polybar/startup.sh exec --no-startup-id jgmenu --at-pointer --hide-on-startup exec --no-startup-id nm-applet exec --no-startup-id blueman-applet @@ -332,3 +377,9 @@ exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd #exec --no-startup-id i3-msg workspace $ws1 #exec --no-startup-id i3-msg workspace $ws10 +#bindsym $mod+Ctrl+q exec i3l 'vstack right' && notify-send 'Layout vstack right' +#bindsym $mod+Ctrl+w exec i3l 'vstack left' && notify-send 'Layout vstack left' +#bindsym $mod+Ctrl+e exec 'i3l hstack down' && notify-send 'Layout hstack down' +#bindsym $mod+Ctrl+r exec 'i3l hstack up' && notify-send 'Layout hstack up' +#bindsym $mod+Ctrl+t exec i3l 3columns right && notify-send 'Layout 3columns' +#bindsym $mod+Ctrl+z exec i3l 2columns left && notify-send 'Layout 2columns' From cf9c14562815b5ba231b0aa2e4c9c3cf96a5c3cb Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Fri, 17 Jun 2022 10:24:45 +0000 Subject: [PATCH 38/48] polybar: Added polybar --- polybar/config.ini | 171 +++++++++++++++++++++++++++++++++++++++++++++ polybar/startup.sh | 8 +++ 2 files changed, 179 insertions(+) create mode 100644 polybar/config.ini create mode 100755 polybar/startup.sh diff --git a/polybar/config.ini b/polybar/config.ini new file mode 100644 index 0000000..94e85f4 --- /dev/null +++ b/polybar/config.ini @@ -0,0 +1,171 @@ +;========================================================== +; +; +; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ +; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ +; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ +; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ +; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ +; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +; +; +; To learn more about how to configure Polybar +; go to https://github.com/polybar/polybar +; +; The README contains a lot of information +; +;========================================================== + +[colors] +background = #282A2E +background-alt = #373B41 +foreground = #C5C8C6 +primary = #F0C674 +secondary = #8ABEB7 +alert = #A54242 +disabled = #707880 + +[bar/main] +monitor = ${env:monitor} +width = 100% +height = 24pt +line-size = 5 +bottom = true +fixed-center = true + +background = ${colors.background} +foreground = ${colors.foreground} + +padding-left = 0 +padding-right = 1 +module-margin = 1 + +font-0 = monospace;2 +; https://feathericons.com/ +; https://github.com/AT-UI/feather-font +font-1 = feather;2 + +modules-left = i3 +modules-center = cpu memory filesystem +modules-right = volume sep date +tray-position = right +tray-detached = false + +enable-ipc = true + +click-right = jgmenu_run + +[module/sep] +type = custom/text +content = | +content-foreground = ${colors.foreground} + +[module/i3] +type = internal/i3 +enable-click = true +enable-scroll = true +pin_workspaces = true + +format = + +label-mode =  %mode% +label-mode-padding = 1 +label-mode-background = ${colors.background-alt} +label-mode-foreground = ${colors.primary} +label-mode-prefix = +label-mode-prefix-foreground = ${colors.primary} + +label-focused = %name% +label-focused-background = ${colors.background-alt} +label-focused-padding = 1 + +label-unfocused = %name% +label-unfocused-padding = 1 + +label-urgent = %name% +label-urgent-underline = ${colors.alert} +label-urgent-padding = 1 + +label-visible = %name% +label-visible-foreground = ${colors.disabled} +label-visible-padding = 1 + +[module/xworkspaces] +type = internal/xworkspaces +enable-click = true +enable-scroll = true + +label-active = %name% +label-active-background = ${colors.background-alt} +label-active-underline= ${colors.primary} +label-active-padding = 1 + +label-occupied = %name% +label-occupied-padding = 1 + +label-urgent = %name% +label-urgent-background = ${colors.alert} +label-urgent-padding = 1 + +label-empty = %name% +label-empty-foreground = ${colors.disabled} +label-empty-padding = 1 + +[module/filesystem] +type = internal/fs +interval = 25 + +mount-0 = / + +label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%% + +label-unmounted = %mountpoint% not mounted +label-unmounted-foreground = ${colors.disabled} + +[module/volume] +type = internal/pulseaudio +format-volume = + +label-volume = %percentage%% +format-volume-prefix-foreground = ${colors.primary} + +ramp-volume-0 =  +ramp-volume-1 =  +ramp-volume-2 =  +ramp-volume-foreground = ${colors.primary} + +label-muted = MUTED +label-muted-foreground = ${colors.primary} + +click-right = pavucontrol + +[module/memory] +type = internal/memory +interval = 2 +format-prefix = "RAM " +format-prefix-foreground = ${colors.primary} +label = %percentage_used:2%% + +[module/cpu] +type = internal/cpu +interval = 2 +format-prefix =  +format-prefix-foreground = ${colors.primary} +label = %percentage:2%% + +[module/date] +type = internal/date +interval = 0.5 + +date = %A, %d.%m.%Y +time = at %H:%M:%S + +label = %date% %time% +label-foreground = ${colors.foreground} + +format-prefix = " " +format-prefix-foreground = ${colors.primary} + +[settings] +screenchange-reload = true +pseudo-transparency = false diff --git a/polybar/startup.sh b/polybar/startup.sh new file mode 100755 index 0000000..8862b26 --- /dev/null +++ b/polybar/startup.sh @@ -0,0 +1,8 @@ +#!/bin/bash +#boot a polybar for each monitor +pkill polybar + +polybar -m | sed s/:.*// | tac | while read -r monitor +do + monitor=$monitor polybar main &> /dev/null & +done From 0d9a76a12f0ac205c907061c67faaddc4889e6ac Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Fri, 17 Jun 2022 10:25:17 +0000 Subject: [PATCH 39/48] Added xmonad and leftwm configs --- .dotter/global.toml | 11 +- .dotter/local.toml | 2 +- leftwm/config.toml | 376 ++++++++++++++++++++++++++++++ leftwm/scripts/dzen_exit_menu.pl | 21 ++ leftwm/themes.toml | 211 +++++++++++++++++ leftwm/themes/current | 1 + xmonad/build-x86_64-linux/Main.hi | Bin 0 -> 3483 bytes xmonad/build-x86_64-linux/Main.o | Bin 0 -> 151000 bytes xmonad/scripts/dzen_exit_menu.pl | 21 ++ xmonad/xmonad-x86_64-linux | Bin 0 -> 128216 bytes xmonad/xmonad.errors | 1 + xmonad/xmonad.hi | Bin 0 -> 3925 bytes xmonad/xmonad.hs | 205 ++++++++++++++++ xmonad/xmonad.o | Bin 0 -> 133184 bytes 14 files changed, 847 insertions(+), 2 deletions(-) create mode 100644 leftwm/config.toml create mode 100755 leftwm/scripts/dzen_exit_menu.pl create mode 100644 leftwm/themes.toml create mode 160000 leftwm/themes/current create mode 100644 xmonad/build-x86_64-linux/Main.hi create mode 100644 xmonad/build-x86_64-linux/Main.o create mode 100755 xmonad/scripts/dzen_exit_menu.pl create mode 100755 xmonad/xmonad-x86_64-linux create mode 100644 xmonad/xmonad.errors create mode 100644 xmonad/xmonad.hi create mode 100644 xmonad/xmonad.hs create mode 100644 xmonad/xmonad.o diff --git a/.dotter/global.toml b/.dotter/global.toml index 1207504..721a40f 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -35,4 +35,13 @@ alacritty = "~/.config/alacritty" starship = "~/.config/" [zsh.files] -zsh = "~/" \ No newline at end of file +zsh = "~/" + +[polybar.files] +polybar = "~/.config/polybar" + +[leftwm.files] +leftwm = "~/.config/leftwm" + +[xmonad.files] +xmonad = "~/.xmonad" diff --git a/.dotter/local.toml b/.dotter/local.toml index baed2bc..c79d861 100644 --- a/.dotter/local.toml +++ b/.dotter/local.toml @@ -1,2 +1,2 @@ # includes = [] -packages = ["mc", "nvim", "emacs", "i3", "alacritty", "starship", "zsh"] +packages = ["mc", "nvim", "emacs", "i3", "alacritty", "starship", "zsh", "polybar"] diff --git a/leftwm/config.toml b/leftwm/config.toml new file mode 100644 index 0000000..422bc40 --- /dev/null +++ b/leftwm/config.toml @@ -0,0 +1,376 @@ +modkey = "Mod4" +mousekey = "Mod4" +workspaces = [] +tags = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ] +layouts = [ + "MainAndVertStack", + "MainAndHorizontalStack", + # "MainAndDeck", + #"GridHorizontal", + # "EvenHorizontal", + # "EvenVertical", + # "Fibonacci", + # "LeftMain", + # "CenterMain", + # "CenterMainBalanced", + # "CenterMainFluid", + # "Monocle", + # "RightWiderLeftStack", + # "LeftWiderRightStack" +] +layout_mode = "Tag" +insert_behavior = "Bottom" +disable_current_tag_swap = false +disable_tile_drag = true +focus_behaviour = "Sloppy" +focus_new_windows = true +disable_window_snap = true +window_rules = [ + {window_class = "firefox", window_title = "Mozilla Firefox$", spawn_on_tag = 1}, + {window_class = "TelegramDesktop", spawn_on_tag = 9}, + {window_class = "Signal", spawn_on_tag = 9}, + {window_class = "Rocket.Chat", spawn_on_tag = 9}, + {window_class = "Element", spawn_on_tag = 9}, + {window_class = "Thunderbird", spawn_on_tag = 10}, + {window_class = "zoom", spawn_on_tag = 5}, + + # {window_title = "Manjaro Settings Manager", spawn_floating = true}, + # {window_class = "Pamac-manager", spawn_floating = true}, + # {window_class = "Pamac-updater", spawn_floating = true}, + # {window_class = "Qalculate-gtk", spawn_floating = true}, +] + +[[keybind]] +command = "SetLayout" +value = "Monocle" +modifier = ["modkey"] +key = "m" + +[[scratchpad]] +name = "calculator" +value = "qalculate-gtk" + +[[keybind]] +command = "ToggleScratchPad" +value = "calculator" +modifier = ["modkey"] +key = "c" + +[[keybind]] +command = "Execute" +value = "~/.config/leftwm/scripts/dzen_exit_menu.pl" +modifier = ["modkey", "Shift"] +key = "e" + +[[keybind]] +command = "Execute" +value = "firefox" +modifier = ["modkey"] +key = "b" + +[[keybind]] +command = "Execute" +value = "krusader" +modifier = ["modkey"] +key = "t" + +[[keybind]] +command = "Execute" +value = "rofi -show run #dmenu_recency -i" +modifier = ["modkey"] +key = "d" + +[[keybind]] +command = "Execute" +value = "alacritty" +modifier = ["modkey"] +key = "Return" + +[[keybind]] +command = "ToggleFullScreen" +value = "" +modifier = ["modkey"] +key = "f" + +[[keybind]] +command = "ToggleFloating" +value = "" +modifier = ["modkey", "Shift"] +key = "space" + +[[keybind]] +command = "CloseWindow" +value = "" +modifier = ["modkey"] +key = "q" + +[[keybind]] +command = "CloseWindow" +value = "" +modifier = ["modkey"] +key = "x" + +[[keybind]] +command ="SoftReload" +value = "" +modifier = ["modkey", "Shift"] +key = "r" + +#[[keybind]] +#command = "MoveToLastWorkspace" +#value = "" +#modifier = ["modkey", "Shift"] +#key = "w" + +#[[keybind]] +#command = "SwapTags" +#value = "" +#modifier = ["modkey"] +#key = "w" + +#[[keybind]] +#command = "MoveWindowUp" +#value = "" +#modifier = ["modkey", "Shift"] +#key = "k" + +#[[keybind]] +#command = "MoveWindowDown" +#value = "" +#modifier = ["modkey", "Shift"] +#key = "j" + +#[[keybind]] +#command = "MoveWindowTop" +#value = "" +#modifier = ["modkey", "Shift"] +#key = "Return" + +#[[keybind]] +#command = "FocusWindowUp" +#value = "" +#modifier = ["modkey"] +#key = "k" + +#[[keybind]] +#command = "FocusWindowDown" +#value = "" +#modifier = ["modkey"] +#key = "j" + +#[[keybind]] +#command = "NextLayout" +#value = "" +#modifier = ["modkey", "Control"] +#key = "k" + +#[[keybind]] +#command = "PreviousLayout" +#value = "" +#modifier = ["modkey", "Control"] +#key = "j" + +#[[keybind]] +#command = "FocusWorkspaceNext" +#value = "" +#modifier = ["modkey"] +#key = "l" + +#[[keybind]] +#command = "FocusWorkspacePrevious" +#value = "" +#modifier = ["modkey"] +#key = "h" + + +[[keybind]] +command = "FocusWindowUp" +value = "" +modifier = ["modkey"] +key = "Up" + +[[keybind]] +command = "FocusWindowDown" +value = "" +modifier = ["modkey"] +key = "Down" + +[[keybind]] +command = "FocusWindowTop" +value = "true" +modifier = ["modkey"] +key = "Left" + +[[keybind]] +command = "FocusWindowTop" +value = "true" +modifier = ["modkey"] +key = "Right" + +[[keybind]] +command = "MoveWindowUp" +value = "" +modifier = ["modkey", "Shift"] +key = "Up" + +[[keybind]] +command = "MoveWindowDown" +value = "" +modifier = ["modkey", "Shift"] +key = "Down" + +[[keybind]] +command = "MoveWindowTop" +value = "" +modifier = ["modkey", "Shift"] +key = "Left" + +[[keybind]] +command = "MoveWindowTop" +value = "" +modifier = ["modkey", "Shift"] +key = "Right" + +[[keybind]] +command = "NextLayout" +value = "" +modifier = ["modkey", "Control"] +key = "Up" + +[[keybind]] +command = "RotateTag" +value = "" +modifier = ["modkey", "Control"] +key = "Down" + +#[[keybind]] +#command = "FocusWorkspaceNext" +#value = "" +#modifier = ["modkey"] +#key = "Right" + +#[[keybind]] +#command = "FocusWorkspacePrevious" +#value = "" +#modifier = ["modkey"] +#key = "Left" + +[[keybind]] +command = "GotoTag" +value = "1" +modifier = ["modkey"] +key = "1" + +[[keybind]] +command = "GotoTag" +value = "2" +modifier = ["modkey"] +key = "2" + +[[keybind]] +command = "GotoTag" +value = "3" +modifier = ["modkey"] +key = "3" + +[[keybind]] +command = "GotoTag" +value = "4" +modifier = ["modkey"] +key = "4" + +[[keybind]] +command = "GotoTag" +value = "5" +modifier = ["modkey"] +key = "5" + +[[keybind]] +command = "GotoTag" +value = "6" +modifier = ["modkey"] +key = "6" + +[[keybind]] +command = "GotoTag" +value = "7" +modifier = ["modkey"] +key = "7" + +[[keybind]] +command = "GotoTag" +value = "8" +modifier = ["modkey"] +key = "8" + +[[keybind]] +command = "GotoTag" +value = "9" +modifier = ["modkey"] +key = "9" + +[[keybind]] +command = "GotoTag" +value = "10" +modifier = ["modkey"] +key = "0" + +[[keybind]] +command = "MoveToTag" +value = "1" +modifier = ["modkey", "Shift"] +key = "1" + +[[keybind]] +command = "MoveToTag" +value = "2" +modifier = ["modkey", "Shift"] +key = "2" + +[[keybind]] +command = "MoveToTag" +value = "3" +modifier = ["modkey", "Shift"] +key = "3" + +[[keybind]] +command = "MoveToTag" +value = "4" +modifier = ["modkey", "Shift"] +key = "4" + +[[keybind]] +command = "MoveToTag" +value = "5" +modifier = ["modkey", "Shift"] +key = "5" + +[[keybind]] +command = "MoveToTag" +value = "6" +modifier = ["modkey", "Shift"] +key = "6" + +[[keybind]] +command = "MoveToTag" +value = "7" +modifier = ["modkey", "Shift"] +key = "7" + +[[keybind]] +command = "MoveToTag" +value = "8" +modifier = ["modkey", "Shift"] +key = "8" + +[[keybind]] +command = "MoveToTag" +value = "9" +modifier = ["modkey", "Shift"] +key = "9" + +[[keybind]] +command = "MoveToTag" +value = "10" +modifier = ["modkey", "Shift"] +key = "0" diff --git a/leftwm/scripts/dzen_exit_menu.pl b/leftwm/scripts/dzen_exit_menu.pl new file mode 100755 index 0000000..3b713a5 --- /dev/null +++ b/leftwm/scripts/dzen_exit_menu.pl @@ -0,0 +1,21 @@ +#!/bin/perl +use strict; +use warnings; + +my $message="System (l) lock, (e) logout, (r) reboot, (s) shutdown"; +my $screen_height=1080; +my $message_height=34; + +my %actions; +$actions{"l"} = "i3lock --ignore-empty-password --color 000000"; +$actions{"e"} = "pkill leftwm"; +$actions{"r"} = "systemctl reboot"; +$actions{"s"} = "systemctl poweroff"; + +my @dzen_actions; +while ((my $key, my $action) = each (%actions)){ + push @dzen_actions, "key_$key=exit,exec:$action"; +} +my $joined_actions = join(";", @dzen_actions); +print "$joined_actions"; +`echo "$message" | dzen2 -h $message_height -p -y $screen_height -e "onstart=grabkeys;key_Escape=exit;key_Return=exit;button1=exit;$joined_actions"`; diff --git a/leftwm/themes.toml b/leftwm/themes.toml new file mode 100644 index 0000000..cb2160d --- /dev/null +++ b/leftwm/themes.toml @@ -0,0 +1,211 @@ +[[repos]] +url = "https://raw.githubusercontent.com/leftwm/leftwm-community-themes/master/known.toml" +name = "community" +definitions_version = 1 + +[[repos.themes]] +name = "Orange Forest" +repository = "https://github.com/PVautour/leftwm-theme-orange-forest/" +commit = "*" +version = "0.0.2" +leftwm_versions = "^0.3.0" +current = false + +[[repos.themes]] +name = "Coffee" +repository = "https://github.com/lex148/leftwm-coffee/" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "Soothe" +repository = "https://github.com/b4skyx/leftwm-soothe/" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false +relative_directory = "theme/" + +[[repos.themes]] +name = "TNG" +repository = "https://github.com/lex148/leftwm-tng/" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "Windows XP" +repository = "https://github.com/lex148/leftwm-windowsxp/" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "Dracula Rounded" +directory = "/home/julian/.config/leftwm/themes/Dracula Rounded" +repository = "https://github.com/AethanFoot/leftwm-theme-dracula-rounded/" +commit = "*" +version = "0.0.3" +leftwm_versions = "^0.3.0" +current = false + +[[repos.themes]] +name = "Forest" +directory = "/home/julian/.config/leftwm/themes/Forest" +repository = "https://github.com/lex148/forest/" +commit = "*" +version = "0.0.1" +leftwm_versions = "^0.3.0" +current = true + +[[repos.themes]] +name = "Ground Zero" +repository = "https://github.com/Qwart376/Ground-Zero/" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "Red Moon" +repository = "https://github.com/Qwart376/Red-Moon" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "Blue Coffee" +directory = "/home/julian/.config/leftwm/themes/Blue Coffee" +repository = "https://github.com/Qwart376/Blue-Coffee/" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "sunflower" +repository = "https://github.com/mautamu/leftwm-sunflower/" +commit = "*" +version = "0.1.2" +leftwm_versions = "^0.2.11, <0.3.0" +current = false + +[[repos.themes]] +name = "Bumblebee" +repository = "https://github.com/mfdorst/leftwm-bumblebee/" +commit = "*" +version = "0.0.1" +leftwm_versions = "^0.2.8, <0.3.0" +current = false + +[[repos.themes]] +name = "Sunset" +repository = "https://github.com/Syudagye/leftwm-sunset" +commit = "*" +version = "0.0.1" +leftwm_versions = "<0.3.0" +current = false + +[[repos.themes]] +name = "Garden" +directory = "/home/julian/.config/leftwm/themes/Garden" +repository = "https://github.com/taylor85345/leftwm-theme-garden" +commit = "*" +version = "0.0.4" +leftwm_versions = ">0.2.7" +current = false + +[[repos.themes]] +name = "Epitaph" +directory = "/home/julian/.config/leftwm/themes/Epitaph" +repository = "https://github.com/VentGrey/Epitaph" +commit = "*" +version = "0.0.2" +leftwm_versions = "*" +current = false + +[[repos.themes]] +name = "Ocean-night" +directory = "/home/julian/.config/leftwm/themes/Ocean-night" +repository = "https://github.com/TheRoniOne/ocean-night" +commit = "*" +version = "0.0.1" +leftwm_versions = "*" +current = false + +[[repos.themes]] +name = "Flamingo" +repository = "https://github.com/necaris/leftwm-theme-flamingo" +commit = "*" +version = "0.0.1" +leftwm_versions = ">0.2.7, <0.3.0" +current = false + +[[repos.themes]] +name = "Amber" +repository = "https://github.com/di-effe/amber" +commit = "*" +version = "0.2.2" +leftwm_versions = ">0.2.10, <0.3.0" +current = false + +[[repos.themes]] +name = "Catppuccin" +repository = "https://github.com/di-effe/catppuccin" +commit = "*" +version = "0.1.1" +leftwm_versions = ">0.2.10, <0.3.0" +current = false + +[[repos.themes]] +name = "Molese" +repository = "https://github.com/m0lese/leftwm-config" +commit = "*" +version = "2.1.0" +leftwm_versions = ">0.2.10, <0.3.0" +current = false + +[[repos.themes]] +name = "Double Bar" +directory = "/home/julian/.config/leftwm/themes/Double Bar" +repository = "https://github.com/PeterDauwe/doublebar/" +commit = "*" +version = "0.0.2" +leftwm_versions = "^0.3.0" +current = false + +[[repos.themes]] +name = "SpaceJelly" +repository = "https://gitlab.com/jchand99/space_jelly" +commit = "*" +version = "1.0.0" +leftwm_versions = ">0.2.10, <0.3.0" +current = false + +[[repos.themes]] +name = "Ascent" +directory = "/home/julian/.config/leftwm/themes/Ascent" +repository = "https://gitlab.com/mWalrus/ascent" +commit = "*" +version = "1.0.0" +leftwm_versions = ">0.2.7" +current = false + +[[repos.themes]] +name = "Zexanima" +repository = "https://github.com/calebgasser/zexanima-leftwm-theme/tree/develop" +commit = "*" +version = "0.0.1" +leftwm_versions = ">0.3.0" +current = false + +[[repos]] +url = "localhost" +name = "LOCAL" +definitions_version = 1 +themes = [] diff --git a/leftwm/themes/current b/leftwm/themes/current new file mode 160000 index 0000000..129901d --- /dev/null +++ b/leftwm/themes/current @@ -0,0 +1 @@ +Subproject commit 129901d8aa23bbbcacebb44aebe62aaee441c9cf diff --git a/xmonad/build-x86_64-linux/Main.hi b/xmonad/build-x86_64-linux/Main.hi new file mode 100644 index 0000000000000000000000000000000000000000..d701a381bfe4a9a696d432ee8cbc805e430a39f5 GIT binary patch literal 3483 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 B#^L|~ literal 0 HcmV?d00001 diff --git a/xmonad/xmonad.errors b/xmonad/xmonad.errors new file mode 100644 index 0000000..6767361 --- /dev/null +++ b/xmonad/xmonad.errors @@ -0,0 +1 @@ +$ ghc --make xmonad.hs -i -ilib -fforce-recomp -main-is main -dynamic -v0 -outputdir /home/julian/.xmonad/build-x86_64-linux -o /home/julian/.xmonad/xmonad-x86_64-linux diff --git a/xmonad/xmonad.hi b/xmonad/xmonad.hi new file mode 100644 index 0000000000000000000000000000000000000000..e665423547d928fc2c5d06687068762559601982 GIT binary patch literal 3925 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 qJciT>4P", setLayout $ XMonad.layoutHook conf), -- Reset the layouts on the current workspace to default + ("M-n", refresh), -- Resize viewed windows to the correct size + ("M-", windows W.focusDown), -- Move focus to the next window + ("M-j", windows W.focusDown), -- Move focus to the next window + ("M-k", windows W.focusUp), -- Move focus to the previous window + ("M-m", windows W.focusMaster), -- Move focus to the master window + -- Swap the focused window and the master window + -- ((modm, xK_Return), windows W.swapMaster), + ("M-S-j", windows W.swapDown), -- Swap the focused window with the next window + ("M-S-k", windows W.swapUp), -- Swap the focused window with the previous window + ("M-S-e", spawn "~/.xmonad/scripts/dzen_exit_menu.pl"), + -- My keybound programs + ("M-d", spawn "rofi -show run #dmenu_recency -i"), + ("M-", spawn myTerminal), + ("M-b", spawn "firefox"), + ("M-t", spawn "krusader"), + ("M-u", spawn "pamac-manager"), + ("M-c", spawn "qalculate-gtk"), + ("", spawn "amixer set Master toggle"), + ("", spawn "amixer set Master 10%- unmute"), + ("", spawn "amixer set Master 10%+ unmute") + ] + -- Switch to workspace + ++ [ ("M-" ++ key, windows $ W.greedyView workspace) + | (key, workspace) <- zip myWorkspaceKeys myWorkspaces + ] + -- Move window to workspace and follow + ++ [ ( "M-S-" ++ key, + do + windows $ W.shift workspace + windows $ + W.greedyView workspace + ) + | (key, workspace) <- zip myWorkspaceKeys myWorkspaces + ] + -- Move window to workspace + ++ [ ("M-C-" ++ key, windows $ W.shift workspace) + | (key, workspace) <- zip myWorkspaceKeys myWorkspaces + ] + +myKeys conf@(XConfig {XMonad.modMask = modm}) = + M.fromList $ + [ -- Reset the layouts on the current workspace to default + ((modm .|. shiftMask, xK_space), setLayout $ XMonad.layoutHook conf), + -- Quit xmonad + ((modm .|. shiftMask, xK_q), io exitSuccess) + ] + +myMouseBindings (XConfig {XMonad.modMask = modm}) = + M.fromList + -- mod-button1, Set the window to floating mode and move by dragging + [ ( (modm, button1), + \w -> + focus w >> mouseMoveWindow w + >> windows W.shiftMaster + ), + -- mod-button2, Raise the window to the top of the stack + ((modm, button2), \w -> focus w >> windows W.shiftMaster), + -- mod-button3, Set the window to floating mode and resize by dragging + ( (modm, button3), + \w -> + focus w >> mouseResizeWindow w + >> windows W.shiftMaster + ) + -- you may also bind events to the mouse scroll wheel (button4 and button5) + ] + +myLayouts = T.toggleLayouts Full $ tiledRight ||| tiledBottom ||| tiledLeft ||| tiledTop ||| Full + where + tiledRight = renamed [Replace "TiledRight"] $ Tall nmaster delta ratio + tiledBottom = renamed [Replace "TiledBottom"] $ Mirror $ Tall nmaster delta ratio + tiledLeft = renamed [Replace "TiledLeft"] $ reflectHoriz $ Tall nmaster delta ratio + tiledTop = renamed [Replace "TiledTop"] $ Mirror $ reflectHoriz $ Tall nmaster delta ratio + + -- The default number of windows in the master pane + nmaster = 1 + -- Default proportion of screen occupied by master pane + ratio = 1 / 2 + -- Percent of screen to increment by when resizing panes + delta = 3 / 100 + +-- To match on the WM_NAME, you can use 'title' in the same way that +-- 'className' and 'resource' are used below. +myManageHook = + composeAll + [ className =? "Qalculate-gtk" --> doCenterFloat, + resource =? "desktop_window" --> doIgnore, + resource =? "kdesktop" --> doIgnore, + className =? "firefox" <&&> title =? "Mozilla Firefox" --> doShift "1" <+> doF (W.greedyView "1"), + className =? "TelegramDesktop" --> doShift "9", + className =? "Signal" --> doShift "9", + className =? "Rocket.Chat" --> doShift "9", + className =? "Element" --> doShift "9", + className =? "Thunderbird" --> doShift "10", + className =? "zoom" --> doShift "5" + -- isFullscreen --> doFullFloat + ] + +myStartupHook = do + spawn "~/.config/polybar/startup.sh" + spawnOnce "picom" + spawnOnce "nm-applet" + spawnOnce "blueman-applet" + spawnOnce "xfce4-power-manager" + spawnOnce "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1" + spawnOnce "start-pulseaudio-x11" + spawnOnce "feh --bg-fill /home/julian/Bilder/background.jpg" + spawnOnce "/usr/lib/xfce4/notifyd/xfce4-notifyd" + spawnOnce "jgmenu --at-pointer --hide-on-startup" + + -- Very important return()!!! + return () >> checkKeymap myConfig myAddKeys + +main = + xmonad $ + ewmhFullscreen $ ewmh $ docks myConfig + +myConfig = + def + { terminal = myTerminal, + focusFollowsMouse = myFocusFollowsMouse, + borderWidth = myBorderWidth, + modMask = myModMask, + workspaces = myWorkspaces, + normalBorderColor = myNormalBorderColor, + focusedBorderColor = myFocusedBorderColor, + -- key bindings + keys = myKeys, + mouseBindings = myMouseBindings, + -- hooks, layouts + layoutHook = smartBorders $ avoidStruts $ smartSpacingWithEdge 2 $ myLayouts, + manageHook = insertPosition Below Newer <+> myManageHook, + -- handleEventHook = + -- logHook = + startupHook = myStartupHook + } + `additionalKeysP` myAddKeys + +-- Local Variables: +-- lsp-lens-enable: nil +-- End: diff --git a/xmonad/xmonad.o b/xmonad/xmonad.o new file mode 100644 index 0000000000000000000000000000000000000000..a7bc8fba8df1da13dee507374883ceee21e48be3 GIT binary patch literal 133184 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 literal 0 HcmV?d00001 From 08252a504eb197985b7d3b24ad26748cc67e9ddc Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Wed, 24 Aug 2022 16:22:29 +0200 Subject: [PATCH 40/48] zsh: Clean up, add plugins and functions --- zsh/.zshrc | 51 +++++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/zsh/.zshrc b/zsh/.zshrc index 18b31d3..8ab99bd 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -2,6 +2,7 @@ # export PATH=$HOME/bin:/usr/local/bin:$PATH export PATH=/home/julian/emacs/doom-emacs/bin:$PATH export PATH=/home/julian/.cargo/bin:$PATH +export PATH=/home/julian/perl5/bin:$PATH # Path to your oh-my-zsh installation. export ZSH="$HOME/.oh-my-zsh" @@ -73,47 +74,37 @@ export ZSH="$HOME/.oh-my-zsh" # Custom plugins may be added to $ZSH_CUSTOM/plugins/ # Example format: plugins=(rails git textmate ruby lighthouse) # Add wisely, as too many plugins slow down shell startup. -plugins=(zsh-z colored-man-pages zsh-interactive-cd) +plugins=( + zsh-z + web-search + dirhistory + # colored-man-pages + # zsh-interactive-cd + # jsontools + + # make it behave like fish + zsh-autosuggestions + zsh-history-substring-search + zsh-syntax-highlighting +) source $ZSH/oh-my-zsh.sh -# User configuration - -# export MANPATH="/usr/local/man:$MANPATH" - -# You may need to manually set your language environment -# export LANG=en_US.UTF-8 - -# Preferred editor for local and remote sessions -# if [[ -n $SSH_CONNECTION ]]; then -# export EDITOR='vim' -# else -# export EDITOR='mvim' -# fi - -# Compilation flags -# export ARCHFLAGS="-arch x86_64" - -# Set personal aliases, overriding those provided by oh-my-zsh libs, -# plugins, and themes. Aliases can be placed here, though oh-my-zsh -# users are encouraged to define aliases within the ZSH_CUSTOM folder. -# For a full list of active aliases, run `alias`. -# -# Example aliases -# alias zshconfig="mate ~/.zshrc" -# alias ohmyzsh="mate ~/.oh-my-zsh" - alias vi="nvim" alias ls="ls --color" alias grep="grep --color" alias la="ls -Alh --color" +alias g="git status" +alias bat="bat --paging=never" mkcd () { mkdir -p -- "$1" && cd -P -- "$1" } -eval "$(starship init zsh)" +follow_du () { + /usr/local/bin/follow_du "$@" + cd $(cat /tmp/follow_du_workdir) +} -# pacman -S zsh-syntax-highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh +eval "$(starship init zsh)" From 51985d6a7c59251b9156f1b7b2903ceb7288f9c2 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Wed, 24 Aug 2022 16:23:15 +0200 Subject: [PATCH 41/48] emacs: clean up doom config --- emacs/doom/config.org | 50 +++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/emacs/doom/config.org b/emacs/doom/config.org index d7cade8..e063a22 100644 --- a/emacs/doom/config.org +++ b/emacs/doom/config.org @@ -71,11 +71,7 @@ (map! :desc "Format and save" :nvi "C-s" #'fd-format-and-save) (map! :leader "w 1" #'delete-other-windows) -;; Org-mode custom keybindings -(map! :map org-mode-map :nvi "C-k" #'org-backward-element) -(map! :map org-mode-map :nvi "C-j" #'org-forward-element) -(map! :map org-mode-map :nvi "C-h" #'org-up-element) -(map! :map org-mode-map :nvi "C-l" #'org-down-element) +(setq-default evil-escape-key-sequence "kj") (defun fd-format-and-save() (interactive) @@ -104,8 +100,14 @@ (after! org (setq org-agenda-files (expand-file-name "org-agenda-files" doom-private-dir))) +(setq org-export-allow-bind-keywords t) + ;; (map! :nv "SPC r" "SPC n r") +(map! :map org-mode-map :nvi "C-k" #'org-backward-element) +(map! :map org-mode-map :nvi "C-j" #'org-forward-element) +(map! :map org-mode-map :nvi "C-h" #'org-up-element) +(map! :map org-mode-map :nvi "C-l" #'org-down-element) #+end_src ** Spell Checking @@ -158,20 +160,6 @@ #+end_src -** Python -#+begin_src emacs-lisp :tangle yes - -;; Python settings -;; (add-hook 'python-mode-hook (lambda () -;; (setq flycheck-checker 'python-pylint))) - -;; (add-hook 'pyhon-mode-local-vars-hook -;; (lambda () -;; (when (flycheck-may-enable-checker 'lsp) -;; (flycheck-select-checker 'python-pylint)))) - -#+end_src - ** Matlab #+begin_src emacs-lisp :tangle yes @@ -225,3 +213,27 @@ (map! :map company-active-map "TAB" nil) (map! :map company-active-map "" nil) #+end_src + +** More +#+begin_src emacs-lisp :tangle yes +(defun fd-pretty-print-dirty-json() + (interactive) + (let ((new-buffer-contents (shell-command-to-string (format "echo '%s' | newliner" (buffer-string))))) + (erase-buffer) + (insert new-buffer-contents) + (evil-indent (buffer-end -1) (buffer-end +1))) + ) +#+end_src +** Python +#+begin_src emacs-lisp :tangle yes + +;; Python settings +;; (add-hook 'python-mode-hook (lambda () +;; (setq flycheck-checker 'python-pylint))) + +;; (add-hook 'pyhon-mode-local-vars-hook +;; (lambda () +;; (when (flycheck-may-enable-checker 'lsp) +;; (flycheck-select-checker 'python-pylint)))) + +#+end_src From 7e37870ce6bb067fb7852218b220866831df7628 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Wed, 24 Aug 2022 16:23:55 +0200 Subject: [PATCH 42/48] vim: add autoformat plugin --- vim/init.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vim/init.vim b/vim/init.vim index b0b90e2..b78349a 100644 --- a/vim/init.vim +++ b/vim/init.vim @@ -31,13 +31,15 @@ endif let mapleader = " " " Plugins -" call plug#begin('~/.vim/plugged') +call plug#begin() + " Plug 'itchyny/lightline.vim' " Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " Plug 'Valloric/YouCompleteMe' " Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} -" Plug 'https://github.com/ap/vim-css-color.git' +Plug 'https://github.com/ap/vim-css-color.git' +Plug 'vim-autoformat/vim-autoformat' " Collection of common configurations for the Nvim LSP client " Plug 'neovim/nvim-lspconfig' @@ -57,7 +59,7 @@ let mapleader = " " " Plug 'tpope/vim-commentary' -" call plug#end() +call plug#end() "------------------------------------------------------------ " Must have options {{{1 From d198b662b08edd677d80c3f9eb9223029e032815 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Wed, 24 Aug 2022 16:39:59 +0200 Subject: [PATCH 43/48] Add zsh custom plugins --- .dotter/global.toml | 3 ++- zsh/custom-plugins/last-working-dir.zsh | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 zsh/custom-plugins/last-working-dir.zsh diff --git a/.dotter/global.toml b/.dotter/global.toml index 721a40f..8f69cee 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -35,7 +35,8 @@ alacritty = "~/.config/alacritty" starship = "~/.config/" [zsh.files] -zsh = "~/" +"zsh/.zshrc" = "~/.zshrc" +"zsh/custom-plugins" = "~/.oh-my-zsh/custom" [polybar.files] polybar = "~/.config/polybar" diff --git a/zsh/custom-plugins/last-working-dir.zsh b/zsh/custom-plugins/last-working-dir.zsh new file mode 100644 index 0000000..bc0afbb --- /dev/null +++ b/zsh/custom-plugins/last-working-dir.zsh @@ -0,0 +1,17 @@ +#!/usr/bin/zsh +# +# My version of the last-working-dir plugin (https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/last-working-dir/last-working-dir.plugin.zsh) +# +# Updates the last directory once directory is changed +autoload -U add-zsh-hook +add-zsh-hook chpwd chpwd_last_working_dir +chpwd_last_working_dir() { + # Don't run in subshells + [[ "$ZSH_SUBSHELL" -eq 0 ]] || return 0 + pwd > ~/.last-working-dir +} + +# Changes directory to the last working directory +lwd() { + [[ -r ~/.last-working-dir ]] && cd $(cat ~/.last-working-dir) +} From a2841e1ca8e8d459022383861c1901b9acb17ec9 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Wed, 24 Aug 2022 17:19:03 +0200 Subject: [PATCH 44/48] leftwm: add theme as submodule --- .gitmodules | 2 + leftwm/themes/current.diff | 134 +++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 .gitmodules create mode 100644 leftwm/themes/current.diff diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..7c48031 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,2 @@ +[submodule "current"] + url = https://github.com/lex148/forest diff --git a/leftwm/themes/current.diff b/leftwm/themes/current.diff new file mode 100644 index 0000000..8dc3d15 --- /dev/null +++ b/leftwm/themes/current.diff @@ -0,0 +1,134 @@ +Submodule leftwm/themes/current contains modified content +diff --git a/leftwm/themes/current/down b/leftwm/themes/current/down +index 81fcae4..8dce89e 100755 +--- a/leftwm/themes/current/down ++++ b/leftwm/themes/current/down +@@ -14,4 +14,3 @@ pkill picom + pkill polybar + pkill dunst + pkill lxsession +- +diff --git a/leftwm/themes/current/polybar/bars.ini b/leftwm/themes/current/polybar/bars.ini +index 368f5e5..80d09d4 100644 +--- a/leftwm/themes/current/polybar/bars.ini ++++ b/leftwm/themes/current/polybar/bars.ini +@@ -46,6 +46,7 @@ bar-volume-empty = ${bar.empty} + bar-volume-empty-font = 2 + bar-volume-empty-foreground = ${color.sep} + ramp-headphones-0 =  ++click-right = pavucontrol + + [module/brightness] + type = internal/backlight +diff --git a/leftwm/themes/current/polybar/config.ini b/leftwm/themes/current/polybar/config.ini +index 88747c3..e81ff69 100644 +--- a/leftwm/themes/current/polybar/config.ini ++++ b/leftwm/themes/current/polybar/config.ini +@@ -18,7 +18,7 @@ monitor = ${env:monitor} + monitor-fallback = + monitor-strict = false + override-redirect = false +-bottom = false ++bottom = true + fixed-center = true + width = 100% + height = 34 +@@ -39,8 +39,8 @@ font-0 = "Iosevka Nerd Font:size=10;4" + font-1 = "Iosevka Nerd Font:size=10;3" + font-2 = "feather:size=12;3" + modules-left = workspaces sep cpu memory filesystem +-modules-center = mpd sep date +-modules-right = battery network sep volume brightness sep sysmenu sep ++modules-center = ++modules-right = battery network volume brightness sep date + separator = + dim-value = 1.0 + wm-name = +@@ -50,7 +50,7 @@ tray-detached = false + enable-ipc = true + click-left = + click-middle = +-click-right = ++click-right = jgmenu_run + scroll-up = + scroll-down = + double-click-left = +diff --git a/leftwm/themes/current/polybar/modules.ini b/leftwm/themes/current/polybar/modules.ini +index 0b2ff0e..0491e61 100644 +--- a/leftwm/themes/current/polybar/modules.ini ++++ b/leftwm/themes/current/polybar/modules.ini +@@ -76,11 +76,11 @@ label = " %percentage%%" + + [module/date] + type = internal/date +-interval = 1.0 +-date = %A, %d %B +-time = at %I:%M %p ++interval = 0.5 ++date = %A, %d.%m.%Y ++time = at %H:%M:%S + date-alt = It's %A, %d %B %Y +-time-alt = at %k:%M:%S ++time-alt = at %H:%M:%S + format =