From 4d9b8a55f828949fea1a30983adf13b6dfbfe8ce Mon Sep 17 00:00:00 2001 From: Clay Gomera Date: Fri, 8 Sep 2023 14:43:08 -0400 Subject: [PATCH] massive update --- user/.bash_profile | 12 +- user/.bashrc | 6 - .../Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.svg | 5597 -------------- .../gruvbox-fallnn.kvconfig} | 314 +- .../Kvantum/gruvbox-fallnn/gruvbox-fallnn.svg | 6796 +++++++++++++++++ user/.config/Kvantum/kvantum.kvconfig | 2 +- user/.config/btop/btop.conf | 4 +- user/.config/doom/config.el | 562 -- user/.config/doom/config.org | 1123 --- user/.config/doom/emacs-dash.txt | 19 - user/.config/doom/eshell/aliases | 26 - user/.config/doom/eshell/profile | 1 - user/.config/doom/init.el | 191 - user/.config/doom/packages.el | 90 - user/.config/fish/config.fish | 17 +- user/.config/git/config | 2 +- user/.config/gtk-2.0/gtkfilechooser.ini | 4 +- user/.config/gtk-2.0/gtkrc-2.0 | 11 +- user/.config/gtk-3.0/settings.ini | 8 +- user/.config/hypr/hyprland.conf | 257 +- user/.config/lvim/config.lua | 129 + user/.config/neofetch/config.conf | 118 + user/.config/neofetch/img1.png | Bin 0 -> 66730 bytes user/.config/qutebrowser/bookmarks/urls | 21 + user/.config/qutebrowser/config.py | 248 + user/.config/qutebrowser/gruvbox.py | 333 + user/.config/rofi/config.rasi | 104 - user/.config/rofi/scripts/rofi_power | 68 - user/.config/rofi/scripts/rofi_scrot | 93 - user/.config/rofi/scripts/rofi_wall | 25 - user/.config/rofi/scripts/rofi_wifi | 99 - user/.config/rofi/themes/gruvbox-dark.rasi | 16 - user/.config/tut/config.toml | 1284 ++++ user/.config/waybar/config | 42 +- user/.config/wofi/config | 9 + user/.config/wofi/style.css | 56 + .../scripts/rofi_blue => .local/bin/rs_blue} | 7 +- .../rofi_emoji => .local/bin/rs_emoji} | 4 +- .../rofi_mount => .local/bin/rs_mount} | 6 +- user/.local/bin/rs_power | 103 + user/.local/bin/rs_scrot | 331 + user/.local/bin/rs_wall | 18 + user/.local/bin/rs_wifi | 166 + user/.winitrc | 11 +- user/dependencies.md | 54 +- 45 files changed, 9970 insertions(+), 8417 deletions(-) delete mode 100644 user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.svg rename user/.config/Kvantum/{Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.kvconfig => gruvbox-fallnn/gruvbox-fallnn.kvconfig} (63%) create mode 100644 user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.svg delete mode 100644 user/.config/doom/config.el delete mode 100644 user/.config/doom/config.org delete mode 100644 user/.config/doom/emacs-dash.txt delete mode 100644 user/.config/doom/eshell/aliases delete mode 100644 user/.config/doom/eshell/profile delete mode 100644 user/.config/doom/init.el delete mode 100644 user/.config/doom/packages.el create mode 100644 user/.config/lvim/config.lua create mode 100644 user/.config/neofetch/config.conf create mode 100644 user/.config/neofetch/img1.png create mode 100644 user/.config/qutebrowser/bookmarks/urls create mode 100644 user/.config/qutebrowser/config.py create mode 100644 user/.config/qutebrowser/gruvbox.py delete mode 100644 user/.config/rofi/config.rasi delete mode 100755 user/.config/rofi/scripts/rofi_power delete mode 100755 user/.config/rofi/scripts/rofi_scrot delete mode 100755 user/.config/rofi/scripts/rofi_wall delete mode 100755 user/.config/rofi/scripts/rofi_wifi delete mode 100644 user/.config/rofi/themes/gruvbox-dark.rasi create mode 100644 user/.config/tut/config.toml create mode 100644 user/.config/wofi/config create mode 100644 user/.config/wofi/style.css rename user/{.config/rofi/scripts/rofi_blue => .local/bin/rs_blue} (97%) rename user/{.config/rofi/scripts/rofi_emoji => .local/bin/rs_emoji} (99%) rename user/{.config/rofi/scripts/rofi_mount => .local/bin/rs_mount} (88%) create mode 100755 user/.local/bin/rs_power create mode 100755 user/.local/bin/rs_scrot create mode 100755 user/.local/bin/rs_wall create mode 100755 user/.local/bin/rs_wifi diff --git a/user/.bash_profile b/user/.bash_profile index 2d1714f8f..ee100ca48 100644 --- a/user/.bash_profile +++ b/user/.bash_profile @@ -9,13 +9,13 @@ ### STARTING XSESSION if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ] then - sh $HOME/.winitrc + sh "$HOME/.winitrc" logout fi # environment variables -export EDITOR="emacsclient -t -a ''" -export VISUAL="emacsclient -c -a 'emacs'" +export EDITOR="$HOME/.local/bin/lvim" +export VISUAL="neovide --neovim-bin $HOME/.local/bin/lvim" # clean home export XDG_DATA_HOME="$HOME/.local/share" @@ -25,8 +25,12 @@ export W3M_DIR="$XDG_DATA_HOME/w3m" export GTK2_RC_FILES="$HOME/.config/gtk-2.0/gtkrc-2.0" export WGETRC="$HOME/.config/wget/wgetrc" export INPUTRC="$HOME/.config/inputrc" -export GNUPGHOME="$HOME/.local/share/gnupg" export LESSHISTFILE=- +export MEDIA_DIR="$HOME/Media" +export TEMP_DIR="$HOME/Temporal" +export RUNNER="wofi --dmenu" +export RUNNER_EX="wofi -p ' Run'" + ### BASHRC source "$HOME"/.bashrc # Load the bashrc diff --git a/user/.bashrc b/user/.bashrc index 93cd3fabc..53c18a2f8 100644 --- a/user/.bashrc +++ b/user/.bashrc @@ -35,9 +35,6 @@ fi if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi -if [ -d "$HOME/Applications" ] ; - then PATH="$HOME/Applications:$PATH" -fi ### CHANGE TITLE OF TERMINALS ### case ${TERM} in @@ -125,9 +122,6 @@ alias \ # bat as cat [ -x "$(command -v bat)" ] && alias cat="bat" -# pfetch as neofetch -[ -x "$(command -v pfetch)" ] && alias neofetch="pfetch" - # Changing "ls" to "exa" alias \ ls="exa -al --icons --color=always --group-directories-first" \ diff --git a/user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.svg b/user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.svg deleted file mode 100644 index 3c29a5f27..000000000 --- a/user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.svg +++ /dev/null @@ -1,5597 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.kvconfig b/user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.kvconfig similarity index 63% rename from user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.kvconfig rename to user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.kvconfig index 87cb82f5e..beaf6b56e 100644 --- a/user/.config/Kvantum/Gruvbox-Dark-Brown/Gruvbox-Dark-Brown.kvconfig +++ b/user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.kvconfig @@ -1,25 +1,26 @@ [%General] -author=sachnr, based on KvAdapta -comment=Gruvbox Dark theme with brown highlights +author=Sourav Gope +comment=Medium Dark Gruvbox kvantum theme x11drag=menubar_and_primary_toolbar alt_mnemonic=true left_tabs=true -attach_active_tab=false +attach_active_tab=true mirror_doc_tabs=true group_toolbar_buttons=false -toolbar_item_spacing=0 -toolbar_interior_spacing=2 +toolbar_item_spacing=1 +toolbar_interior_spacing=3 spread_progressbar=true composite=true menu_shadow_depth=5 -tooltip_shadow_depth=2 +menu_separator_height=6 +tooltip_shadow_depth=6 splitter_width=4 -scroll_width=9 +scroll_width=6 scroll_arrows=false scroll_min_extent=60 slider_width=2 -slider_handle_width=22 -slider_handle_length=22 +slider_handle_width=18 +slider_handle_length=18 center_toolbar_handle=true check_size=14 textless_progressbar=false @@ -27,11 +28,11 @@ progressbar_thickness=2 menubar_mouse_tracking=true toolbutton_style=1 double_click=false -translucent_windows=false -blurring=false -popup_blurring=false +translucent_windows=true +blurring=true +popup_blurring=true vertical_spin_indicators=false -spin_button_width=24 +spin_button_width=32 fill_rubberband=false merge_menubar_with_toolbar=true small_icon_size=16 @@ -39,14 +40,14 @@ large_icon_size=32 button_icon_size=16 toolbar_icon_size=22 combo_as_lineedit=true -animate_states=true +animate_states=false button_contents_shift=false combo_menu=true hide_combo_checkboxes=true -combo_focus_rect=false +combo_focus_rect=true groupbox_top_label=true -inline_spin_indicators=true -joined_inactive_tabs=true +inline_spin_indicators=false +joined_inactive_tabs=false layout_spacing=6 layout_margin=9 scrollbar_in_view=true @@ -55,96 +56,91 @@ transient_groove=false submenu_overlap=0 tooltip_delay=-1 tree_branch_line=true -no_window_pattern=false -opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam +dark_titlebar=true +opaque=QMPlay2,kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam reduce_window_opacity=0 -respect_DE=true scrollable_menu=false submenu_delay=250 +no_inactiveness=false +no_window_pattern=false +reduce_menu_opacity=0 +respect_DE=true +contrast=1.00 +dialog_button_layout=0 +intensity=1.00 +saturation=1.00 [GeneralColors] -window.color=#232323 +window.color=#282828 base.color=#282828 alt.base.color=#282828 -button.color=#2e2e2e -light.color=#504945 -mid.light.color=#3f3f3f -dark.color=#1d2021 -mid.color=##202324 -highlight.color=#665c54cc -inactive.highlight.color=#665c54bb -text.color=#ebdbb2 -window.text.color=#ebdbb2 -button.text.color=#ebdbb2 -disabled.text.color=#a89984 +button.color=#fbf1c7 +light.color=#282828 +mid.light.color=#282828 +dark.color=#282828 +mid.color=#282828 +highlight.color=#a89984 +inactive.highlight.color=#282828 +text.color=#fbf1c7 +window.text.color=#fbf1c7 +button.text.color=#fbf1c7 +disabled.text.color=#d5c4a1 tooltip.text.color=#fbf1c7 -highlight.text.color=#3c3836 -link.color=#b8bb26 -link.visited.color=#98971a -progress.indicator.text.color=#fbf1c7 +highlight.text.color=#ebdbb2 +link.color=#fbf1c7 +link.visited.color=#7f8c8d +progress.indicator.text.color=#d5c4a1 [Hacks] transparent_ktitle_label=true -transparent_dolphin_view=false +transparent_dolphin_view=true transparent_pcmanfm_sidepane=true -blur_translucent=false +blur_translucent=true transparent_menutitle=true -respect_darkness=false +respect_darkness=true kcapacitybar_as_progressbar=true force_size_grip=true -iconless_pushbutton=true +iconless_pushbutton=false iconless_menu=false disabled_icon_opacity=70 lxqtmainmenu_iconsize=22 normal_default_pushbutton=true single_top_toolbar=true tint_on_mouseover=0 -transparent_pcmanfm_view=false -no_selection_tint=true -transparent_arrow_button=true +transparent_pcmanfm_view=true +middle_click_scroll=false +no_selection_tint=false +opaque_colors=false +scroll_jump_workaround=false [PanelButtonCommand] frame=true frame.element=button -frame.top=4 -frame.bottom=4 -frame.left=4 -frame.right=4 +frame.top=3 +frame.bottom=3 +frame.left=3 +frame.right=3 interior=true interior.element=button indicator.size=8 -text.normal.color=#ebdbb2 -text.focus.color=#3c3836 -text.press.color=#ebdbb2 -text.toggle.color=#fbf1c7 +text.normal.color=#d8dee9 +text.focus.color=#d8dee9 +text.press.color=#d8dee9 +text.toggle.color=#d8dee9 text.shadow=0 text.margin=1 text.iconspacing=4 indicator.element=arrow text.margin.top=2 -text.margin.bottom=4 +text.margin.bottom=2 text.margin.left=2 text.margin.right=2 min_width=+0.3font min_height=+0.3font -frame.expansion=14 +frame.expansion=6 [PanelButtonTool] inherits=PanelButtonCommand -text.normal.color=#ebdbb2 -text.bold=false -indicator.element=arrow -indicator.size=0 - -[ToolbarButton] -frame.element=tbutton -interior.element=tbutton -indicator.element=tarrow -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -text.press.color=#fbf1c7 -text.toggle.color=#fbf1c7 -text.bold=false [Dock] inherits=PanelButtonCommand @@ -154,49 +150,38 @@ frame.top=1 frame.bottom=1 frame.left=1 frame.right=1 -text.normal.color=#ebdbb2 +text.normal.color=#d8dee9 [DockTitle] inherits=PanelButtonCommand frame=false interior=false -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca text.bold=false [IndicatorSpinBox] inherits=PanelButtonCommand frame=true interior=true -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 +frame.left=1 indicator.element=spin -indicator.size=8 -text.normal.color=#ebdbb2 -text.margin.top=2 -text.margin.bottom=2 -text.margin.left=2 -text.margin.right=2 +indicator.size=10 +text.normal.color=#d8dee9 [RadioButton] inherits=PanelButtonCommand frame=false interior.element=radio -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -min_width=+0.3font -min_height=+0.3font +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca [CheckBox] inherits=PanelButtonCommand frame=false interior.element=checkbox -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -min_width=+0.3font -min_height=+0.3font +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca [Focus] inherits=PanelButtonCommand @@ -214,25 +199,17 @@ frame=true interior=false frame.element=common interior.element=common -frame.top=3 -frame.bottom=3 -frame.left=3 -frame.right=3 +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 [LineEdit] inherits=PanelButtonCommand frame.element=lineedit interior.element=lineedit -interior=false -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 -text.margin.top=2 -text.margin.bottom=2 -text.margin.left=2 -text.margin.right=2 -frame.expansion=0 +text.margin.left=0 +text.margin.right=0 [DropDownButton] inherits=PanelButtonCommand @@ -244,9 +221,9 @@ indicator.size=8 [ToolboxTab] inherits=PanelButtonCommand -text.normal.color=#ebdbb2 -text.press.color=#ebdbb2 -text.focus.color=#fbf1c7 +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca +text.press.color=#d2d2d4 [Tab] inherits=PanelButtonCommand @@ -257,28 +234,27 @@ text.margin.top=2 text.margin.bottom=2 frame.element=tab indicator.element=tab -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 -text.normal.color=#ebdbb2 -text.focus.color=#ebdbb2 -text.toggle.color=#ebdbb2 +frame.top=4 +frame.bottom=4 +frame.left=4 +frame.right=4 +text.normal.color=#d8dee9 +text.focus.color=#d8dee9 +text.toggle.color=#d8dee9 frame.expansion=0 -text.bold=false [TabFrame] inherits=PanelButtonCommand frame.element=tabframe interior.element=tabframe -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 +frame.top=4 +frame.bottom=4 +frame.left=4 +frame.right=4 [TreeExpander] inherits=PanelButtonCommand -indicator.size=8 +indicator.size=12 indicator.element=tree [HeaderSection] @@ -289,10 +265,11 @@ frame.top=1 frame.bottom=1 frame.left=1 frame.right=1 -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -text.press.color=#fbf1c7 -text.toggle.color=#fbf1c7 +text.bold=false +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca +text.press.color=#d2d2d4 +text.toggle.color=#d2d2d4 frame.expansion=0 [SizeGrip] @@ -303,14 +280,15 @@ inherits=PanelButtonCommand indicator.element=toolbar indicator.size=5 text.margin=0 +frame=true interior.element=menubar frame.element=menubar -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca frame.left=0 frame.right=0 frame.top=0 -frame.bottom=4 +frame.bottom=1 frame.expansion=0 [Slider] @@ -332,10 +310,10 @@ inherits=PanelButtonCommand frame.element=progress interior.element=progress text.margin=0 -text.normal.color=#ebdbb2 -text.focus.color=#ebdbb2 -text.press.color=#ebdbb2 -text.toggle.color=#cfd8dc +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca +text.press.color=#d2d2d4 +text.toggle.color=#d8dee9 text.bold=false frame.expansion=8 @@ -358,10 +336,10 @@ text.margin.top=2 text.margin.bottom=2 text.margin.left=4 text.margin.right=4 -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -text.press.color=#fbf1c7 -text.toggle.color=#fbf1c7 +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca +text.press.color=#d8dee9 +text.toggle.color=#d8dee9 min_width=+0.3font min_height=+0.3font frame.expansion=0 @@ -379,14 +357,14 @@ inherits=PanelButtonCommand interior.element=scrollbarslider interior=true frame=false -indicator.element=grip -indicator.size=13 frame.expansion=48 [ScrollbarGroove] inherits=PanelButtonCommand -interior=false +interior.element=scrollbargroove +interior=true frame=false +frame.expansion=48 [MenuItem] inherits=PanelButtonCommand @@ -394,16 +372,16 @@ frame=true frame.element=menuitem interior.element=menuitem indicator.element=menuitem -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca text.margin.top=1 text.margin.bottom=1 text.margin.left=4 text.margin.right=4 -frame.top=0 -frame.bottom=0 -frame.left=0 -frame.right=0 +frame.top=3 +frame.bottom=3 +frame.left=3 +frame.right=3 text.bold=false min_width=+0.3font min_height=+0.3font @@ -413,10 +391,9 @@ frame.expansion=0 inherits=PanelButtonCommand frame.element=menubar interior.element=menubar +text.normal.color=#d8dee9 frame.bottom=0 -text.normal.color=#ebdbb2 frame.expansion=0 -text.bold=false [MenuBarItem] inherits=PanelButtonCommand @@ -431,11 +408,8 @@ text.margin.left=4 text.margin.right=4 text.margin.top=0 text.margin.bottom=0 -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -text.bold=false -min_width=+0.3font -min_height=+0.3font +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca frame.expansion=0 [TitleBar] @@ -448,29 +422,18 @@ text.margin.right=2 interior.element=titlebar indicator.size=16 indicator.element=mdi -text.normal.color=#d5c4a1 -text.focus.color=#ebdbb2 -text.bold=false -text.italic=true +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca +text.bold=true +text.italic=false frame.expansion=0 [ComboBox] inherits=PanelButtonCommand -frame.element=combo interior.element=combo -interior=false -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 -text.margin.top=2 -text.margin.bottom=2 -text.margin.left=2 -text.margin.right=2 -text.focus.color=#fbf1c7 -text.press.color=#ebdbb2 -text.toggle.color=#fbf1c7 -frame.expansion=0 +frame.element=combo +text.press.color=#d2d2d4 +indicator.element=carrow [Menu] inherits=PanelButtonCommand @@ -480,7 +443,7 @@ frame.left=1 frame.right=1 frame.element=menu interior.element=menu -text.normal.color=#ebdbb2 +text.normal.color=#d8dee9 text.shadow=false frame.expansion=0 @@ -489,9 +452,9 @@ inherits=GenericFrame frame=false text.shadow=0 text.margin=0 -text.normal.color=#ebdbb2 -text.focus.color=#fbf1c7 -text.bold=false +text.normal.color=#d8dee9 +text.focus.color=#c8c8ca +text.bold=true frame.expansion=0 [TabBarFrame] @@ -499,10 +462,10 @@ inherits=GenericFrame frame=true frame.element=tabBarFrame interior=false -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 +frame.top=4 +frame.bottom=4 +frame.left=4 +frame.right=4 [ToolTip] inherits=GenericFrame @@ -521,6 +484,7 @@ frame.expansion=0 inherits=GenericFrame frame=false interior=false +interior=false [Window] interior=true diff --git a/user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.svg b/user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.svg new file mode 100644 index 000000000..ee2dcb899 --- /dev/null +++ b/user/.config/Kvantum/gruvbox-fallnn/gruvbox-fallnn.svg @@ -0,0 +1,6796 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/user/.config/Kvantum/kvantum.kvconfig b/user/.config/Kvantum/kvantum.kvconfig index 62defb799..f75f53a75 100644 --- a/user/.config/Kvantum/kvantum.kvconfig +++ b/user/.config/Kvantum/kvantum.kvconfig @@ -1,2 +1,2 @@ [General] -theme=Gruvbox-Dark-Brown +theme=gruvbox-fallnn diff --git a/user/.config/btop/btop.conf b/user/.config/btop/btop.conf index cf427fc49..c1669d15c 100644 --- a/user/.config/btop/btop.conf +++ b/user/.config/btop/btop.conf @@ -54,7 +54,7 @@ update_ms = 200 #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. -proc_sorting = "cpu lazy" +proc_sorting = "pid" #* Reverse sorting order, True or False. proc_reversed = False @@ -209,4 +209,4 @@ selected_battery = "Auto" #* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". #* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. -log_level = "WARNING" +log_level = "WARNING" \ No newline at end of file diff --git a/user/.config/doom/config.el b/user/.config/doom/config.el deleted file mode 100644 index 6cd90196a..000000000 --- a/user/.config/doom/config.el +++ /dev/null @@ -1,562 +0,0 @@ -(beacon-mode 1) - -(map! :leader - (:prefix ("b". "buffer") - :desc "List bookmarks" "L" #'list-bookmarks - :desc "Save current bookmarks to bookmark file" "w" #'bookmark-save)) - -(global-auto-revert-mode 1) -(setq global-auto-revert-non-file-buffers t) - -(evil-define-key 'normal ibuffer-mode-map - (kbd "f c") 'ibuffer-filter-by-content - (kbd "f d") 'ibuffer-filter-by-directory - (kbd "f f") 'ibuffer-filter-by-filename - (kbd "f m") 'ibuffer-filter-by-mode - (kbd "f n") 'ibuffer-filter-by-name - (kbd "f x") 'ibuffer-filter-disable - (kbd "g h") 'ibuffer-do-kill-lines - (kbd "g H") 'ibuffer-update) - -;; https://stackoverflow.com/questions/9547912/emacs-calendar-show-more-than-3-months -(defun dt/year-calendar (&optional year) - (interactive) - (require 'calendar) - (let* ( - (current-year (number-to-string (nth 5 (decode-time (current-time))))) - (month 0) - (year (if year year (string-to-number (format-time-string "%Y" (current-time)))))) - (switch-to-buffer (get-buffer-create calendar-buffer)) - (when (not (eq major-mode 'calendar-mode)) - (calendar-mode)) - (setq displayed-month month) - (setq displayed-year year) - (setq buffer-read-only nil) - (erase-buffer) - ;; horizontal rows - (dotimes (j 4) - ;; vertical columns - (dotimes (i 3) - (calendar-generate-month - (setq month (+ month 1)) - year - ;; indentation / spacing between months - (+ 5 (* 25 i)))) - (goto-char (point-max)) - (insert (make-string (- 10 (count-lines (point-min) (point-max))) ?\n)) - (widen) - (goto-char (point-max)) - (narrow-to-region (point-max) (point-max))) - (widen) - (goto-char (point-min)) - (setq buffer-read-only t))) - -(defun dt/scroll-year-calendar-forward (&optional arg event) - "Scroll the yearly calendar by year in a forward direction." - (interactive (list (prefix-numeric-value current-prefix-arg) - last-nonmenu-event)) - (unless arg (setq arg 0)) - (save-selected-window - (if (setq event (event-start event)) (select-window (posn-window event))) - (unless (zerop arg) - (let* ( - (year (+ displayed-year arg))) - (dt/year-calendar year))) - (goto-char (point-min)) - (run-hooks 'calendar-move-hook))) - -(defun dt/scroll-year-calendar-backward (&optional arg event) - "Scroll the yearly calendar by year in a backward direction." - (interactive (list (prefix-numeric-value current-prefix-arg) - last-nonmenu-event)) - (dt/scroll-year-calendar-forward (- (or arg 1)) event)) - -(map! :leader - :desc "Scroll year calendar backward" "" #'dt/scroll-year-calendar-backward - :desc "Scroll year calendar forward" "" #'dt/scroll-year-calendar-forward) - -(defalias 'year-calendar 'dt/year-calendar) - -(use-package! calfw) -(use-package! calfw-org) - -(use-package dashboard - :init ;; tweak dashboard config before loading it - (setq dashboard-set-heading-icons t) - (setq dashboard-set-file-icons t) - (setq dashboard-banner-logo-title "\nKEYBINDINGS:\ -\nFind file (SPC .) \ -Open buffer list (SPC b i)\ -\nFind recent files (SPC f r) \ -Open the eshell (SPC e s)\ -\nOpen dired file manager (SPC d d) \ -List of keybindings (SPC h b b)") - ;;(setq dashboard-startup-banner 'logo) ;; use standard emacs logo as banner - (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) - (setq dashboard-startup-banner "~/.config/doom/emacs-dash.txt") ;; use custom image as banner - (setq dashboard-center-content nil) ;; set to 't' for centered content - (setq dashboard-items '((recents . 5) - (agenda . 5 ) - (bookmarks . 5) - (projects . 5) - (registers . 5))) - :config - (dashboard-setup-startup-hook) - (dashboard-modify-heading-icons '((recents . "file-text") - (bookmarks . "book")))) - -(setq doom-fallback-buffer "*dashboard*") - -(map! :leader - (:prefix ("d" . "dired") - :desc "Open dired" "d" #'dired - :desc "Dired jump to current" "j" #'dired-jump) - (:after dired - (:map dired-mode-map - :desc "Peep-dired image previews" "d p" #'peep-dired - :desc "Dired view file" "d v" #'dired-view-file))) - -(evil-define-key 'normal dired-mode-map - (kbd "M-RET") 'dired-display-file - (kbd "h") 'dired-up-directory - (kbd "l") 'dired-open-file ; use dired-find-file instead of dired-open. - (kbd "m") 'dired-mark - (kbd "t") 'dired-toggle-marks - (kbd "u") 'dired-unmark - (kbd "C") 'dired-do-copy - (kbd "D") 'dired-do-delete - (kbd "J") 'dired-goto-file - (kbd "M") 'dired-do-chmod - (kbd "O") 'dired-do-chown - (kbd "P") 'dired-do-print - (kbd "R") 'dired-do-rename - (kbd "T") 'dired-do-touch - (kbd "Y") 'dired-copy-filenamecopy-filename-as-kill ; copies filename to kill ring. - (kbd "+") 'dired-create-directory - (kbd "-") 'dired-up-directory - (kbd "% l") 'dired-downcase - (kbd "% u") 'dired-upcase - (kbd "; d") 'epa-dired-do-decrypt - (kbd "; e") 'epa-dired-do-encrypt) -;; Get file icons in dired -(add-hook 'dired-mode-hook 'all-the-icons-dired-mode) -;; With dired-open plugin, you can launch external programs for certain extensions -;; For example, I set all .png files to open in 'sxiv' and all .mp4 files to open in 'mpv' -(setq dired-open-extensions '(("gif" . "sxiv") - ("jpg" . "sxiv") - ("png" . "sxiv") - ("mkv" . "mpv") - ("mp4" . "mpv"))) - -(evil-define-key 'normal peep-dired-mode-map - (kbd "j") 'peep-dired-next-file - (kbd "k") 'peep-dired-prev-file) -(add-hook 'peep-dired-hook 'evil-normalize-keymaps) - -(setq delete-by-moving-to-trash t - trash-directory "~/.local/share/Trash/files/") - -(setq doom-theme 'doom-gruvbox) -(map! :leader - :desc "Load new theme" "h t" #'counsel-load-theme) - -(use-package emojify - :hook (after-init . global-emojify-mode)) - -(map! :leader - (:prefix ("e". "evaluate/EWW") - :desc "Evaluate elisp in buffer" "b" #'eval-buffer - :desc "Evaluate defun" "d" #'eval-defun - :desc "Evaluate elisp expression" "e" #'eval-expression - :desc "Evaluate last sexpression" "l" #'eval-last-sexp - :desc "Evaluate elisp in region" "r" #'eval-region)) - -(setq browse-url-browser-function 'eww-browse-url) -(map! :leader - :desc "Search web for text between BEG/END" - "s w" #'eww-search-words - (:prefix ("e" . "evaluate/EWW") - :desc "Eww web browser" "w" #'eww - :desc "Eww reload page" "R" #'eww-reload)) - -(setq doom-font (font-spec :family "mononoki Nerd Font" :size 15) - doom-variable-pitch-font (font-spec :family "mononoki Nerd Font" :size 15) - doom-big-font (font-spec :family "mononoki Nerd Font" :size 20)) -(after! doom-themes - (setq doom-themes-enable-bold t - doom-themes-enable-italic t)) -(custom-set-faces! - '(font-lock-comment-face :slant italic) - '(font-lock-keyword-face :slant italic)) - -(setq imenu-list-focus-after-activation t) - -(map! :leader - (:prefix ("s" . "Search") - :desc "Menu to jump to places in buffer" "i" #'counsel-imenu)) - -(map! :leader - (:prefix ("t" . "Toggle") - :desc "Toggle imenu shown in a sidebar" "i" #'imenu-list-smart-toggle)) - -(defun dt/insert-todays-date (prefix) - (interactive "P") - (let ((format (cond - ((not prefix) "%A, %B %d, %Y") - ((equal prefix '(4)) "%m-%d-%Y") - ((equal prefix '(16)) "%Y-%m-%d")))) - (insert (format-time-string format)))) - -(require 'calendar) -(defun dt/insert-any-date (date) - "Insert DATE using the current locale." - (interactive (list (calendar-read-date))) - (insert (calendar-date-string date))) - -(map! :leader - (:prefix ("i d" . "Insert date") - :desc "Insert any date" "a" #'dt/insert-any-date - :desc "Insert todays date" "t" #'dt/insert-todays-date)) - -(setq ivy-posframe-display-functions-alist - '((swiper . ivy-posframe-display-at-point) - (complete-symbol . ivy-posframe-display-at-point) - (counsel-M-x . ivy-display-function-fallback) - (counsel-esh-history . ivy-posframe-display-at-window-center) - (counsel-describe-function . ivy-display-function-fallback) - (counsel-describe-variable . ivy-display-function-fallback) - (counsel-find-file . ivy-display-function-fallback) - (counsel-recentf . ivy-display-function-fallback) - (counsel-register . ivy-posframe-display-at-frame-bottom-window-center) - (dmenu . ivy-posframe-display-at-frame-top-center) - (nil . ivy-posframe-display)) - ivy-posframe-height-alist - '((swiper . 20) - (dmenu . 20) - (t . 10))) -(ivy-posframe-mode 1) ; 1 enables posframe-mode, 0 disables it. - -(map! :leader - (:prefix ("v" . "Ivy") - :desc "Ivy push view" "v p" #'ivy-push-view - :desc "Ivy switch view" "v s" #'ivy-switch-view)) - -(setq display-line-numbers-type t) -(map! :leader - :desc "Comment or uncomment lines" "TAB TAB" #'comment-line - (:prefix ("t" . "toggle") - :desc "Toggle line numbers" "l" #'doom/toggle-line-numbers - :desc "Toggle line highlight in frame" "h" #'hl-line-mode - :desc "Toggle line highlight globally" "H" #'global-hl-line-mode - :desc "Toggle truncate lines" "t" #'toggle-truncate-lines)) - -(custom-set-faces - '(markdown-header-face ((t (:inherit font-lock-function-name-face :weight bold :family "variable-pitch")))) - '(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.7)))) - '(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.6)))) - '(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.5)))) - '(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.4)))) - '(markdown-header-face-5 ((t (:inherit markdown-header-face :height 1.3)))) - '(markdown-header-face-6 ((t (:inherit markdown-header-face :height 1.2))))) - -(setq minimap-window-location 'right) -(map! :leader - (:prefix ("t" . "toggle") - :desc "Toggle minimap-mode" "m" #'minimap-mode)) - -(set-face-attribute 'mode-line nil :font "mononoki Nerd Font-13") -(setq doom-modeline-height 30 ;; sets modeline height - doom-modeline-bar-width 5 ;; sets right bar width - doom-modeline-persp-name t ;; adds perspective name to modeline - doom-modeline-persp-icon t) ;; adds folder icon next to persp name - -(xterm-mouse-mode 1) - -(after! neotree - (setq neo-smart-open t - neo-window-fixed-size nil)) -(after! doom-themes - (setq doom-neotree-enable-variable-pitch t)) -(map! :leader - :desc "Toggle neotree file viewer" "t n" #'neotree-toggle - :desc "Open directory in neotree" "d n" #'neotree-dir) - -(map! :leader - (:prefix ("=" . "open file") - :desc "Edit agenda file" "a" #'(lambda () (interactive) (find-file "~/Org/agenda.org")) - :desc "Edit doom config.org" "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org")) - :desc "Edit doom init.el" "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el")) - :desc "Edit doom packages.el" "p" #'(lambda () (interactive) (find-file "~/.config/doom/packages.el")))) -(map! :leader - (:prefix ("= e" . "open eshell files") - :desc "Edit eshell aliases" "a" #'(lambda () (interactive) (find-file "~/.config/doom/eshell/aliases")) - :desc "Edit eshell profile" "p" #'(lambda () (interactive) (find-file "~/.config/doom/eshell/profile")))) - -(map! :leader - :desc "Org babel tangle" "m B" #'org-babel-tangle) -(after! org - (setq org-directory "~/nc/Org/" - org-agenda-files '("~/nc/Org/agenda.org") - org-default-notes-file (expand-file-name "notes.org" org-directory) - org-ellipsis " ▼ " - org-superstar-headline-bullets-list '("◉" "●" "○" "◆" "●" "○" "◆") - org-superstar-item-bullet-alist '((?+ . ?➤) (?- . ?✦)) ; changes +/- symbols in item lists - org-log-done 'time - org-hide-emphasis-markers t - ;; ex. of org-link-abbrev-alist in action - ;; [[arch-wiki:Name_of_Page][Description]] - org-link-abbrev-alist ; This overwrites the default Doom org-link-abbrev-list - '(("google" . "http://www.google.com/search?q=") - ("arch-wiki" . "https://wiki.archlinux.org/index.php/") - ("ddg" . "https://duckduckgo.com/?q=") - ("wiki" . "https://en.wikipedia.org/wiki/")) - org-todo-keywords ; This overwrites the default Doom org-todo-keywords - '((sequence - "TODO(t)" ; A task that is ready to be tackled - "BLOG(b)" ; Blog writing assignments - "GYM(g)" ; Things to accomplish at the gym - "PROJ(p)" ; A project that contains other tasks - "VIDEO(v)" ; Video assignments - "WAIT(w)" ; Something is holding up this task - "|" ; The pipe necessary to separate "active" states and "inactive" states - "DONE(d)" ; Task has been completed - "CANCELLED(c)" )))) ; Task has been cancelled - -(defun dt/org-colors-doom-one () - "Enable Doom One colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#51afef" ultra-bold) - (org-level-2 1.6 "#c678dd" extra-bold) - (org-level-3 1.5 "#98be65" bold) - (org-level-4 1.4 "#da8548" semi-bold) - (org-level-5 1.3 "#5699af" normal) - (org-level-6 1.2 "#a9a1e1" normal) - (org-level-7 1.1 "#46d9ff" normal) - (org-level-8 1.0 "#ff6c6b" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-dracula () - "Enable Dracula colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#8be9fd" ultra-bold) - (org-level-2 1.6 "#bd93f9" extra-bold) - (org-level-3 1.5 "#50fa7b" bold) - (org-level-4 1.4 "#ff79c6" semi-bold) - (org-level-5 1.3 "#9aedfe" normal) - (org-level-6 1.2 "#caa9fa" normal) - (org-level-7 1.1 "#5af78e" normal) - (org-level-8 1.0 "#ff92d0" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-gruvbox-dark () - "Enable Gruvbox Dark colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#458588" ultra-bold) - (org-level-2 1.6 "#b16286" extra-bold) - (org-level-3 1.5 "#98971a" bold) - (org-level-4 1.4 "#fb4934" semi-bold) - (org-level-5 1.3 "#83a598" normal) - (org-level-6 1.2 "#d3869b" normal) - (org-level-7 1.1 "#d79921" normal) - (org-level-8 1.0 "#8ec07c" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-monokai-pro () - "Enable Monokai Pro colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#78dce8" ultra-bold) - (org-level-2 1.6 "#ab9df2" extra-bold) - (org-level-3 1.5 "#a9dc76" bold) - (org-level-4 1.4 "#fc9867" semi-bold) - (org-level-5 1.3 "#ff6188" normal) - (org-level-6 1.2 "#ffd866" normal) - (org-level-7 1.1 "#78dce8" normal) - (org-level-8 1.0 "#ab9df2" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-nord () - "Enable Nord colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#81a1c1" ultra-bold) - (org-level-2 1.6 "#b48ead" extra-bold) - (org-level-3 1.5 "#a3be8c" bold) - (org-level-4 1.4 "#ebcb8b" semi-bold) - (org-level-5 1.3 "#bf616a" normal) - (org-level-6 1.2 "#88c0d0" normal) - (org-level-7 1.1 "#81a1c1" normal) - (org-level-8 1.0 "#b48ead" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-oceanic-next () - "Enable Oceanic Next colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#6699cc" ultra-bold) - (org-level-2 1.6 "#c594c5" extra-bold) - (org-level-3 1.5 "#99c794" bold) - (org-level-4 1.4 "#fac863" semi-bold) - (org-level-5 1.3 "#5fb3b3" normal) - (org-level-6 1.2 "#ec5f67" normal) - (org-level-7 1.1 "#6699cc" normal) - (org-level-8 1.0 "#c594c5" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-palenight () - "Enable Palenight colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#82aaff" ultra-bold) - (org-level-2 1.6 "#c792ea" extra-bold) - (org-level-3 1.5 "#c3e88d" bold) - (org-level-4 1.4 "#ffcb6b" semi-bold) - (org-level-5 1.3 "#a3f7ff" normal) - (org-level-6 1.2 "#e1acff" normal) - (org-level-7 1.1 "#f07178" normal) - (org-level-8 1.0 "#ddffa7" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-solarized-dark () - "Enable Solarized Dark colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#268bd2" ultra-bold) - (org-level-2 1.6 "#d33682" extra-bold) - (org-level-3 1.5 "#859900" bold) - (org-level-4 1.4 "#b58900" semi-bold) - (org-level-5 1.3 "#cb4b16" normal) - (org-level-6 1.2 "#6c71c4" normal) - (org-level-7 1.1 "#2aa198" normal) - (org-level-8 1.0 "#657b83" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-solarized-light () - "Enable Solarized Light colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#268bd2" ultra-bold) - (org-level-2 1.6 "#d33682" extra-bold) - (org-level-3 1.5 "#859900" bold) - (org-level-4 1.4 "#b58900" semi-bold) - (org-level-5 1.3 "#cb4b16" normal) - (org-level-6 1.2 "#6c71c4" normal) - (org-level-7 1.1 "#2aa198" normal) - (org-level-8 1.0 "#657b83" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-tomorrow-night () - "Enable Tomorrow Night colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#81a2be" ultra-bold) - (org-level-2 1.6 "#b294bb" extra-bold) - (org-level-3 1.5 "#b5bd68" bold) - (org-level-4 1.4 "#e6c547" semi-bold) - (org-level-5 1.3 "#cc6666" normal) - (org-level-6 1.2 "#70c0ba" normal) - (org-level-7 1.1 "#b77ee0" normal) - (org-level-8 1.0 "#9ec400" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -;; Load our desired dt/org-colors-* theme on startup -(dt/org-colors-tomorrow-night) - -(use-package ox-man) -(use-package ox-gemini) - -(setq org-journal-dir "~/nc/Org/journal/" - org-journal-date-prefix "* " - org-journal-time-prefix "** " - org-journal-date-format "%B %d, %Y (%A) " - org-journal-file-format "%Y-%m-%d.org") - -(setq org-publish-use-timestamps-flag nil) -(setq org-export-with-broken-links t) - -(use-package! org-auto-tangle - :defer t - :hook (org-mode . org-auto-tangle-mode) - :config - (setq org-auto-tangle-default t)) - -(map! :leader - :desc "Switch to perspective NAME" "DEL" #'persp-switch - :desc "Switch to buffer in perspective" "," #'persp-switch-to-buffer - :desc "Switch to next perspective" "]" #'persp-next - :desc "Switch to previous perspective" "[" #'persp-prev - :desc "Add a buffer current perspective" "+" #'persp-add-buffer - :desc "Remove perspective by name" "-" #'persp-remove-by-name) - -(define-globalized-minor-mode global-rainbow-mode rainbow-mode - (lambda () (rainbow-mode 1))) -(global-rainbow-mode 1 ) - -(map! :leader - (:prefix ("r" . "registers") - :desc "Copy to register" "c" #'copy-to-register - :desc "Frameset to register" "f" #'frameset-to-register - :desc "Insert contents of register" "i" #'insert-register - :desc "Jump to register" "j" #'jump-to-register - :desc "List registers" "l" #'list-registers - :desc "Number to register" "n" #'number-to-register - :desc "Interactively choose a register" "r" #'counsel-register - :desc "View a register" "v" #'view-register - :desc "Window configuration to register" "w" #'window-configuration-to-register - :desc "Increment register" "+" #'increment-register - :desc "Point to register" "SPC" #'point-to-register)) - -(setq shell-file-name "/bin/bash" - vterm-max-scrollback 5000) -(setq eshell-rc-script "~/.config/doom/eshell/profile" - eshell-aliases-file "~/.config/doom/eshell/aliases" - eshell-history-size 5000 - eshell-buffer-maximum-lines 5000 - eshell-hist-ignoredups t - eshell-scroll-to-bottom-on-input t - eshell-destroy-buffer-when-process-dies t - eshell-visual-commands'("bash" "fish" "htop" "ssh" "top" "zsh")) -(map! :leader - :desc "Eshell" "e s" #'eshell - :desc "Eshell popup toggle" "e t" #'+eshell/toggle - :desc "Counsel eshell history" "e h" #'counsel-esh-history - :desc "Vterm popup toggle" "v t" #'+vterm/toggle) - -(defun prefer-horizontal-split () - (set-variable 'split-height-threshold nil t) - (set-variable 'split-width-threshold 40 t)) ; make this as low as needed -(add-hook 'markdown-mode-hook 'prefer-horizontal-split) -(map! :leader - :desc "Clone indirect buffer other window" "b c" #'clone-indirect-buffer-other-window) - -(map! :leader - (:prefix ("w" . "window") - :desc "Winner redo" "" #'winner-redo - :desc "Winner undo" "" #'winner-undo)) - -(map! :leader - :desc "Zap to char" "z" #'zap-to-char - :desc "Zap up to char" "Z" #'zap-up-to-char) diff --git a/user/.config/doom/config.org b/user/.config/doom/config.org deleted file mode 100644 index 2fec5f2c7..000000000 --- a/user/.config/doom/config.org +++ /dev/null @@ -1,1123 +0,0 @@ -#+TITLE: DRK's Doom Emacs Config -#+AUTHOR: Clay Gomera (Drake) -#+DESCRIPTION: DRK's personal Doom Emacs config. -#+STARTUP: showeverything -#+PROPERTY: header-args :tangle config.el - -* TABLE OF CONTENTS :toc: -- [[#about-this-config][About this config]] -- [[#beacon][Beacon]] -- [[#bookmarks-and-buffers][Bookmarks and buffers]] - - [[#bookmarks][Bookmarks]] - - [[#buffers][Buffers]] - - [[#global-auto-revert][Global Auto Revert]] - - [[#keybindings-within-ibuffer-mode][Keybindings within ibuffer mode]] -- [[#calendar][Calendar]] -- [[#dashboard][Dashboard]] - - [[#configuring-dashboard][Configuring Dashboard]] - - [[#dashboard-in-emacsclient][Dashboard in Emacsclient]] -- [[#dired][Dired]] - - [[#keybindings-to-open-dired][Keybindings To Open Dired]] - - [[#keybindings-within-dired][Keybindings Within Dired]] - - [[#keybindings-within-dired-with-peep-dired-mode-enabled][Keybindings Within Dired With Peep-Dired-Mode Enabled]] - - [[#making-deleted-files-go-to-trash-can][Making deleted files go to trash can]] -- [[#doom-theme][Doom theme]] -- [[#emojis][Emojis]] -- [[#evaluate-elisp-expressions][Evaluate elisp expressions]] -- [[#eww][Eww]] -- [[#fonts][Fonts]] -- [[#imenu][Imenu]] -- [[#insert-date][Insert date]] -- [[#ivy][Ivy]] - - [[#ivy-posframe][Ivy-posframe]] - - [[#ivy-keybindings][Ivy keybindings]] -- [[#line-settings][Line settings]] -- [[#markdown][Markdown]] -- [[#minimap][Minimap]] -- [[#modeline][Modeline]] -- [[#mouse-support][Mouse support]] -- [[#neotree][Neotree]] -- [[#open-specific-files][Open specific files]] -- [[#org-mode][Org mode]] - - [[#org-fonts][Org fonts]] - - [[#org-export][Org-export]] - - [[#org-journal][Org-journal]] - - [[#org-publish][Org-publish]] - - [[#org-auto-tangle][Org-auto-tangle]] -- [[#perspective][Perspective]] -- [[#rainbow-mode][Rainbow mode]] -- [[#registers][Registers]] -- [[#shells][Shells]] -- [[#splits][Splits]] -- [[#winner-mode][Winner mode]] -- [[#zap-to-char][Zap to char]] - -* About this config -This is my personal Doom Emacs config. Doom Emacs is a distribution of Emacs -that uses the "evil" keybindings (Vim keybindings) and includes a number of nice -extensions and a bit of configuration out of the box. I am maintaining this -config not just for myself, but also for those that want to explore some of what -is possible with Emacs. I will add a lot of examples of plugins and settings, -some of them I may not even use personally. This config is a fork of -DistroTube's config. - -* Beacon -Never lose your cursor. When you scroll, your cursor will shine! This is a -global minor-mode. Turn it on everywhere with: - -#+begin_src emacs-lisp -(beacon-mode 1) -#+end_src - -* Bookmarks and buffers -Doom Emacs uses 'SPC b' for keybindings related to bookmarks and buffers. - -** Bookmarks -Bookmarks are somewhat like registers in that they record positions you can jump -to. Unlike registers, they have long names, and they persist automatically from -one Emacs session to the next. The prototypical use of bookmarks is to record -where you were reading in various files. - -#+BEGIN_SRC emacs-lisp -(map! :leader - (:prefix ("b". "buffer") - :desc "List bookmarks" "L" #'list-bookmarks - :desc "Save current bookmarks to bookmark file" "w" #'bookmark-save)) -#+END_SRC - -** Buffers -Regarding /buffers/, the text you are editing in Emacs resides in an object called -a /buffer/. Each time you visit a file, a buffer is used to hold the file’s text. -Each time you invoke Dired, a buffer is used to hold the directory listing. -/Ibuffer/ is a program that lists all of your Emacs /buffers/, allowing you to -navigate between them and filter them. - -| COMMAND | DESCRIPTION | KEYBINDING | -|-----------------+----------------------+------------| -| ibuffer | Launch ibuffer | SPC b i | -| kill-buffer | Kill current buffer | SPC b k | -| next-buffer | Goto next buffer | SPC b n | -| previous-buffer | Goto previous buffer | SPC b p | -| save-buffer | Save current buffer | SPC b s | - -** Global Auto Revert -A buffer can get out of sync with respect to its visited file on disk if that -file is changed by another program. To keep it up to date, you can enable Auto -Revert mode by typing M-x auto-revert-mode, or you can set it to be turned on -globally with 'global-auto-revert-mode'. I have also turned on Global Auto -Revert on non-file buffers, which is especially useful for 'dired' buffers. - -#+begin_src emacs-lisp -(global-auto-revert-mode 1) -(setq global-auto-revert-non-file-buffers t) -#+end_src - -** Keybindings within ibuffer mode -| COMMAND | DESCRIPTION | KEYBINDING | -|-----------------------------------+----------------------------------------+------------| -| ibuffer-mark-forward | Mark the buffer | m | -| ibuffer-unmark-forward | Unmark the buffer | u | -| ibuffer-do-kill-on-deletion-marks | Kill the marked buffers | x | -| ibuffer-filter-by-content | Ibuffer filter by content | f c | -| ibuffer-filter-by-directory | Ibuffer filter by directory | f d | -| ibuffer-filter-by-filename | Ibuffer filter by filename (full path) | f f | -| ibuffer-filter-by-mode | Ibuffer filter by mode | f m | -| ibuffer-filter-by-name | Ibuffer filter by name | f n | -| ibuffer-filter-disable | Disable ibuffer filter | f x | -| ibuffer-do-kill-lines | Hide marked buffers | g h | -| ibuffer-update | Restore hidden buffers | g H | - -#+begin_src emacs-lisp -(evil-define-key 'normal ibuffer-mode-map - (kbd "f c") 'ibuffer-filter-by-content - (kbd "f d") 'ibuffer-filter-by-directory - (kbd "f f") 'ibuffer-filter-by-filename - (kbd "f m") 'ibuffer-filter-by-mode - (kbd "f n") 'ibuffer-filter-by-name - (kbd "f x") 'ibuffer-filter-disable - (kbd "g h") 'ibuffer-do-kill-lines - (kbd "g H") 'ibuffer-update) -#+end_src - -* Calendar -Let's make a 12-month calendar available so we can have a calendar app that, -when we click on time/date in xmobar, we get a nice 12-month calendar to view. - -This is a modification of: http://homepage3.nifty.com/oatu/emacs/calendar.html -See also: https://stackoverflow.com/questions/9547912/emacs-calendar-show-more-than-3-months - -#+begin_src emacs-lisp -;; https://stackoverflow.com/questions/9547912/emacs-calendar-show-more-than-3-months -(defun dt/year-calendar (&optional year) - (interactive) - (require 'calendar) - (let* ( - (current-year (number-to-string (nth 5 (decode-time (current-time))))) - (month 0) - (year (if year year (string-to-number (format-time-string "%Y" (current-time)))))) - (switch-to-buffer (get-buffer-create calendar-buffer)) - (when (not (eq major-mode 'calendar-mode)) - (calendar-mode)) - (setq displayed-month month) - (setq displayed-year year) - (setq buffer-read-only nil) - (erase-buffer) - ;; horizontal rows - (dotimes (j 4) - ;; vertical columns - (dotimes (i 3) - (calendar-generate-month - (setq month (+ month 1)) - year - ;; indentation / spacing between months - (+ 5 (* 25 i)))) - (goto-char (point-max)) - (insert (make-string (- 10 (count-lines (point-min) (point-max))) ?\n)) - (widen) - (goto-char (point-max)) - (narrow-to-region (point-max) (point-max))) - (widen) - (goto-char (point-min)) - (setq buffer-read-only t))) - -(defun dt/scroll-year-calendar-forward (&optional arg event) - "Scroll the yearly calendar by year in a forward direction." - (interactive (list (prefix-numeric-value current-prefix-arg) - last-nonmenu-event)) - (unless arg (setq arg 0)) - (save-selected-window - (if (setq event (event-start event)) (select-window (posn-window event))) - (unless (zerop arg) - (let* ( - (year (+ displayed-year arg))) - (dt/year-calendar year))) - (goto-char (point-min)) - (run-hooks 'calendar-move-hook))) - -(defun dt/scroll-year-calendar-backward (&optional arg event) - "Scroll the yearly calendar by year in a backward direction." - (interactive (list (prefix-numeric-value current-prefix-arg) - last-nonmenu-event)) - (dt/scroll-year-calendar-forward (- (or arg 1)) event)) - -(map! :leader - :desc "Scroll year calendar backward" "" #'dt/scroll-year-calendar-backward - :desc "Scroll year calendar forward" "" #'dt/scroll-year-calendar-forward) - -(defalias 'year-calendar 'dt/year-calendar) -#+end_src - -Let's also play around with calfw. -#+begin_src emacs-lisp -(use-package! calfw) -(use-package! calfw-org) -#+end_src - -* Dashboard -Emacs Dashboard is an extensible startup screen showing you recent files, -bookmarks, agenda items and an Emacs banner. - -** Configuring Dashboard -#+begin_src emacs-lisp -(use-package dashboard - :init ;; tweak dashboard config before loading it - (setq dashboard-set-heading-icons t) - (setq dashboard-set-file-icons t) - (setq dashboard-banner-logo-title "\nKEYBINDINGS:\ -\nFind file (SPC .) \ -Open buffer list (SPC b i)\ -\nFind recent files (SPC f r) \ -Open the eshell (SPC e s)\ -\nOpen dired file manager (SPC d d) \ -List of keybindings (SPC h b b)") - ;;(setq dashboard-startup-banner 'logo) ;; use standard emacs logo as banner - (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) - (setq dashboard-startup-banner "~/.config/doom/emacs-dash.txt") ;; use custom image as banner - (setq dashboard-center-content nil) ;; set to 't' for centered content - (setq dashboard-items '((recents . 5) - (agenda . 5 ) - (bookmarks . 5) - (projects . 5) - (registers . 5))) - :config - (dashboard-setup-startup-hook) - (dashboard-modify-heading-icons '((recents . "file-text") - (bookmarks . "book")))) -#+end_src - -** Dashboard in Emacsclient -This setting ensures that emacsclient always opens on *dashboard* rather than *scratch*. -#+begin_src emacs-lisp -(setq doom-fallback-buffer "*dashboard*") -#+end_src - -* Dired -Dired is the file manager within Emacs. Below, I setup keybindings for image -previews (peep-dired). Doom Emacs does not use 'SPC d' for any of its -keybindings, so I've chosen the format of 'SPC d' plus 'key'. - -** Keybindings To Open Dired - -| COMMAND | DESCRIPTION | KEYBINDING | -|------------+------------------------------------+------------| -| dired | /Open dired file manager/ | SPC d d | -| dired-jump | /Jump to current directory in dired/ | SPC d j | - -** Keybindings Within Dired -*** Basic dired commands - -| COMMAND | DESCRIPTION | KEYBINDING | -|-------------------------+---------------------------------------------+------------| -| dired-view-file | /View file in dired/ | SPC d v | -| dired-up-directory | /Go up in directory tree/ | h | -| dired-find-file | /Go down in directory tree (or open if file)/ | l | -| dired-next-line | Move down to next line | j | -| dired-previous-line | Move up to previous line | k | -| dired-mark | Mark file at point | m | -| dired-unmark | Unmark file at point | u | -| dired-do-copy | Copy current file or marked files | C | -| dired-do-rename | Rename current file or marked files | R | -| dired-hide-details | Toggle detailed listings on/off | ( | -| dired-git-info-mode | Toggle git information on/off | ) | -| dired-create-directory | Create new empty directory | + | -| dired-diff | Compare file at point with another | = | -| dired-subtree-toggle | Toggle viewing subtree at point | TAB | - -*** Dired commands using regex - -| COMMAND | DESCRIPTION | KEYBINDING | -|-------------------------+----------------------------+------------| -| dired-mark-files-regexp | Mark files using regex | % m | -| dired-do-copy-regexp | Copy files using regex | % C | -| dired-do-rename-regexp | Rename files using regex | % R | -| dired-mark-files-regexp | Mark all files using regex | * % | - -*** File permissions and ownership - -| COMMAND | DESCRIPTION | KEYBINDING | -|-----------------+----------------------------------+------------| -| dired-do-chgrp | Change the group of marked files | g G | -| dired-do-chmod | Change the mode of marked files | M | -| dired-do-chown | Change the owner of marked files | O | -| dired-do-rename | Rename file or all marked files | R | - -#+begin_src emacs-lisp -(map! :leader - (:prefix ("d" . "dired") - :desc "Open dired" "d" #'dired - :desc "Dired jump to current" "j" #'dired-jump) - (:after dired - (:map dired-mode-map - :desc "Peep-dired image previews" "d p" #'peep-dired - :desc "Dired view file" "d v" #'dired-view-file))) - -(evil-define-key 'normal dired-mode-map - (kbd "M-RET") 'dired-display-file - (kbd "h") 'dired-up-directory - (kbd "l") 'dired-open-file ; use dired-find-file instead of dired-open. - (kbd "m") 'dired-mark - (kbd "t") 'dired-toggle-marks - (kbd "u") 'dired-unmark - (kbd "C") 'dired-do-copy - (kbd "D") 'dired-do-delete - (kbd "J") 'dired-goto-file - (kbd "M") 'dired-do-chmod - (kbd "O") 'dired-do-chown - (kbd "P") 'dired-do-print - (kbd "R") 'dired-do-rename - (kbd "T") 'dired-do-touch - (kbd "Y") 'dired-copy-filenamecopy-filename-as-kill ; copies filename to kill ring. - (kbd "+") 'dired-create-directory - (kbd "-") 'dired-up-directory - (kbd "% l") 'dired-downcase - (kbd "% u") 'dired-upcase - (kbd "; d") 'epa-dired-do-decrypt - (kbd "; e") 'epa-dired-do-encrypt) -;; Get file icons in dired -(add-hook 'dired-mode-hook 'all-the-icons-dired-mode) -;; With dired-open plugin, you can launch external programs for certain extensions -;; For example, I set all .png files to open in 'sxiv' and all .mp4 files to open in 'mpv' -(setq dired-open-extensions '(("gif" . "sxiv") - ("jpg" . "sxiv") - ("png" . "sxiv") - ("mkv" . "mpv") - ("mp4" . "mpv"))) -#+end_src - -** Keybindings Within Dired With Peep-Dired-Mode Enabled -If peep-dired is enabled, you will get image previews as you go up/down with 'j' -and 'k' - -| COMMAND | DESCRIPTION | KEYBINDING | -|----------------------+------------------------------------------+------------| -| peep-dired | /Toggle previews within dired/ | SPC d p | -| peep-dired-next-file | /Move to next file in peep-dired-mode/ | j | -| peep-dired-prev-file | /Move to previous file in peep-dired-mode/ | k | - -#+BEGIN_SRC emacs-lisp -(evil-define-key 'normal peep-dired-mode-map - (kbd "j") 'peep-dired-next-file - (kbd "k") 'peep-dired-prev-file) -(add-hook 'peep-dired-hook 'evil-normalize-keymaps) -#+END_SRC - -** Making deleted files go to trash can -#+begin_src emacs-lisp -(setq delete-by-moving-to-trash t - trash-directory "~/.local/share/Trash/files/") -#+end_src - -* Doom theme -Setting the theme to doom-gruvbox. To try out new themes, I set a keybinding for -counsel-load-theme with 'SPC h t'. - -#+BEGIN_SRC emacs-lisp -(setq doom-theme 'doom-gruvbox) -(map! :leader - :desc "Load new theme" "h t" #'counsel-load-theme) -#+END_SRC - -* Emojis -Emojify is an Emacs extension to display emojis. It can display github style -emojis like :smile: or plain ascii ones like :). - -#+begin_src emacs-lisp -(use-package emojify - :hook (after-init . global-emojify-mode)) -#+end_src - -* Evaluate elisp expressions -Changing some keybindings from their defaults to better fit with Doom Emacs, and -to avoid conflicts with my window managers which sometimes use the control key -in their keybindings. By default, Doom Emacs does not use 'SPC e' for anything, -so I choose to use the format 'SPC e' plus 'key' for these (I also use 'SPC e' -for 'eww' keybindings). - -| COMMAND | DESCRIPTION | KEYBINDING | -|-----------------+----------------------------------------------+------------| -| eval-buffer | /Evaluate elisp in buffer/ | SPC e b | -| eval-defun | /Evaluate the defun containing or after point/ | SPC e d | -| eval-expression | /Evaluate an elisp expression/ | SPC e e | -| eval-last-sexp | /Evaluate elisp expression before point/ | SPC e l | -| eval-region | /Evaluate elisp in region/ | SPC e r | - -#+Begin_src emacs-lisp -(map! :leader - (:prefix ("e". "evaluate/EWW") - :desc "Evaluate elisp in buffer" "b" #'eval-buffer - :desc "Evaluate defun" "d" #'eval-defun - :desc "Evaluate elisp expression" "e" #'eval-expression - :desc "Evaluate last sexpression" "l" #'eval-last-sexp - :desc "Evaluate elisp in region" "r" #'eval-region)) -#+END_SRC - -* Eww -EWW is the Emacs Web Wowser, the builtin browser in Emacs. Below I set urls to -open in a specific browser (eww) with browse-url-browser-function. By default, -Doom Emacs does not use 'SPC e' for anything, so I choose to use the format 'SPC -e' plus 'key' for these (I also use 'SPC e' for 'eval' keybindings). I chose to -use 'SPC s w' for eww-search-words because Doom Emacs uses 'SPC s' for 'search' -commands. - -#+BEGIN_SRC emacs-lisp -(setq browse-url-browser-function 'eww-browse-url) -(map! :leader - :desc "Search web for text between BEG/END" - "s w" #'eww-search-words - (:prefix ("e" . "evaluate/EWW") - :desc "Eww web browser" "w" #'eww - :desc "Eww reload page" "R" #'eww-reload)) -#+END_SRC - -* Fonts -Settings related to fonts within Doom Emacs: -+ 'doom-font' -- standard monospace font that is used for most things in Emacs. -+ 'doom-variable-pitch-font' -- variable font which is useful in some Emacs plugins. -+ 'doom-big-font' -- used in doom-big-font-mode; useful for presentations. -+ 'font-lock-comment-face' -- for comments. -+ 'font-lock-keyword-face' -- for keywords with special significanclike 'setq' in elisp. - -#+BEGIN_SRC emacs-lisp -(setq doom-font (font-spec :family "mononoki Nerd Font" :size 15) - doom-variable-pitch-font (font-spec :family "mononoki Nerd Font" :size 15) - doom-big-font (font-spec :family "mononoki Nerd Font" :size 20)) -(after! doom-themes - (setq doom-themes-enable-bold t - doom-themes-enable-italic t)) -(custom-set-faces! - '(font-lock-comment-face :slant italic) - '(font-lock-keyword-face :slant italic)) -#+END_SRC - -* Imenu -Imenu produces menus for accessing locations in documents, typically in the -current buffer. You can access the locations using an ordinary menu (menu bar or -other) or using minibuffer completion, or you can install 'imenu-list' and have -the imenu displayed as a vertical split that you can toggle show/hide. - -| COMMAND | DESCRIPTION | KEYBINDING | -|-------------------------+----------------------------------+------------| -| counsel-imenu | /Menu to jump to places in buffer/ | SPC s i | -| imenu-list-smart-toggle | /Toggle imenu shown in a sidebar/ | SPC t i | - -#+BEGIN_SRC emacs-lisp -(setq imenu-list-focus-after-activation t) - -(map! :leader - (:prefix ("s" . "Search") - :desc "Menu to jump to places in buffer" "i" #'counsel-imenu)) - -(map! :leader - (:prefix ("t" . "Toggle") - :desc "Toggle imenu shown in a sidebar" "i" #'imenu-list-smart-toggle)) - -#+END_SRC - -* Insert date -Some custom functions to insert the date. The function 'insert-todays-date' can -be used one of three different ways: (1) just the keybinding without the -universal argument prefix, (2) with one universal argument prefix, or (3) with -two universal argument prefixes. The universal argument prefix is 'SPC-u' in -Doom Emacs (C-u in standard GNU Emacs). The function 'insert-any-date' only -outputs to one format, which is the same format as 'insert-todays-date' without -a prefix. - -| COMMAND | EXAMPLE OUTPUT | KEYBINDING | -|-----------------------+---------------------------+-----------------------| -| dt/insert-todays-date | Friday, November 19, 2021 | SPC i d t | -| dt/insert-todays-date | 11-19-2021 | SPC u SPC i d t | -| dt/insert-todays-date | 2021-11-19 | SPC u SPC u SPC i d t | -| dt/insert-any-date | Friday, November 19, 2021 | SPC i d a | - -#+begin_src emacs-lisp -(defun dt/insert-todays-date (prefix) - (interactive "P") - (let ((format (cond - ((not prefix) "%A, %B %d, %Y") - ((equal prefix '(4)) "%m-%d-%Y") - ((equal prefix '(16)) "%Y-%m-%d")))) - (insert (format-time-string format)))) - -(require 'calendar) -(defun dt/insert-any-date (date) - "Insert DATE using the current locale." - (interactive (list (calendar-read-date))) - (insert (calendar-date-string date))) - -(map! :leader - (:prefix ("i d" . "Insert date") - :desc "Insert any date" "a" #'dt/insert-any-date - :desc "Insert todays date" "t" #'dt/insert-todays-date)) -#+end_src - -* Ivy -Ivy is a generic completion mechanism for Emacs. - -** Ivy-posframe -Ivy-posframe is an ivy extension, which lets ivy use posframe to show its -candidate menu. Some of the settings below involve: -+ ivy-posframe-display-functions-alist -- sets the display position for specific - programs -+ ivy-posframe-height-alist -- sets the height of the list displayed for - specific programs - -# Available functions (positions) for 'ivy-posframe-display-functions-alist' -+ ivy-posframe-display-at-frame-center -+ ivy-posframe-display-at-window-center -+ ivy-posframe-display-at-frame-bottom-left -+ ivy-posframe-display-at-window-bottom-left -+ ivy-posframe-display-at-frame-bottom-window-center -+ ivy-posframe-display-at-point -+ ivy-posframe-display-at-frame-top-center - -=NOTE:= If the setting for 'ivy-posframe-display' is set to 'nil' (false), -anything that is set to 'ivy-display-function-fallback' will just default to -their normal position in Doom Emacs (usually a bottom split). However, if this -is set to 't' (true), then the fallback position will be centered in the window. - -#+BEGIN_SRC emacs-lisp -(setq ivy-posframe-display-functions-alist - '((swiper . ivy-posframe-display-at-point) - (complete-symbol . ivy-posframe-display-at-point) - (counsel-M-x . ivy-display-function-fallback) - (counsel-esh-history . ivy-posframe-display-at-window-center) - (counsel-describe-function . ivy-display-function-fallback) - (counsel-describe-variable . ivy-display-function-fallback) - (counsel-find-file . ivy-display-function-fallback) - (counsel-recentf . ivy-display-function-fallback) - (counsel-register . ivy-posframe-display-at-frame-bottom-window-center) - (dmenu . ivy-posframe-display-at-frame-top-center) - (nil . ivy-posframe-display)) - ivy-posframe-height-alist - '((swiper . 20) - (dmenu . 20) - (t . 10))) -(ivy-posframe-mode 1) ; 1 enables posframe-mode, 0 disables it. -#+END_SRC - -** Ivy keybindings -By default, Doom Emacs does not use 'SPC v', so the format I use for these -bindings is 'SPC v' plus 'key'. - -#+BEGIN_SRC emacs-lisp -(map! :leader - (:prefix ("v" . "Ivy") - :desc "Ivy push view" "v p" #'ivy-push-view - :desc "Ivy switch view" "v s" #'ivy-switch-view)) -#+END_SRC - -* Line settings -I set comment-line to 'SPC TAB TAB' which is a rather comfortable keybinding for -me on my ZSA Moonlander keyboard. The standard Emacs keybinding for -comment-line is 'C-x C-;'. The other keybindings are for commands that toggle -on/off various line-related settings. Doom Emacs uses 'SPC t' for "toggle" -commands, so I choose 'SPC t' plus 'key' for those bindings. - -| COMMAND | DESCRIPTION | KEYBINDING | -|--------------------------+-------------------------------------------+-------------| -| comment-line | /Comment or uncomment lines/ | SPC TAB TAB | -| hl-line-mode | /Toggle line highlighting in current frame/ | SPC t h | -| global-hl-line-mode | /Toggle line highlighting globally/ | SPC t H | -| doom/toggle-line-numbers | /Toggle line numbers/ | SPC t l | -| toggle-truncate-lines | /Toggle truncate lines/ | SPC t t | - -#+BEGIN_SRC emacs-lisp -(setq display-line-numbers-type t) -(map! :leader - :desc "Comment or uncomment lines" "TAB TAB" #'comment-line - (:prefix ("t" . "toggle") - :desc "Toggle line numbers" "l" #'doom/toggle-line-numbers - :desc "Toggle line highlight in frame" "h" #'hl-line-mode - :desc "Toggle line highlight globally" "H" #'global-hl-line-mode - :desc "Toggle truncate lines" "t" #'toggle-truncate-lines)) -#+END_SRC - -* Markdown - -#+begin_src emacs-lisp -(custom-set-faces - '(markdown-header-face ((t (:inherit font-lock-function-name-face :weight bold :family "variable-pitch")))) - '(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.7)))) - '(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.6)))) - '(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.5)))) - '(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.4)))) - '(markdown-header-face-5 ((t (:inherit markdown-header-face :height 1.3)))) - '(markdown-header-face-6 ((t (:inherit markdown-header-face :height 1.2))))) -#+end_src - -* Minimap -A minimap sidebar displaying a smaller version of the current buffer on either -the left or right side. It highlights the currently shown region and updates its -position automatically. Be aware that this minimap program does not work in Org -documents. This is not unusual though because I have tried several minimap -programs and none of them can handle Org. - -| COMMAND | DESCRIPTION | KEYBINDING | -|--------------+-------------------------------------------+------------| -| minimap-mode | /Toggle minimap-mode/ | SPC t m | - -#+begin_src emacs-lisp -(setq minimap-window-location 'right) -(map! :leader - (:prefix ("t" . "toggle") - :desc "Toggle minimap-mode" "m" #'minimap-mode)) -#+end_src - -* Modeline -The modeline is the bottom status bar that appears in Emacs windows. For more -information on what is available to configure in the Doom modeline, check out: -https://github.com/seagle0128/doom-modeline - -#+begin_src emacs-lisp -(set-face-attribute 'mode-line nil :font "mononoki Nerd Font-13") -(setq doom-modeline-height 30 ;; sets modeline height - doom-modeline-bar-width 5 ;; sets right bar width - doom-modeline-persp-name t ;; adds perspective name to modeline - doom-modeline-persp-icon t) ;; adds folder icon next to persp name -#+end_src - -* Mouse support -Adding mouse support in the terminal version of Emacs. - -#+begin_src emacs-lisp -(xterm-mouse-mode 1) -#+end_src - -* Neotree -Neotree is a file tree viewer. When you open neotree, it jumps to the current -file thanks to neo-smart-open. The neo-window-fixed-size setting makes the -neotree width be adjustable. Doom Emacs had no keybindings set for neotree. -Since Doom Emacs uses 'SPC t' for 'toggle' keybindings, I used 'SPC t n' for -toggle-neotree. - -| COMMAND | DESCRIPTION | KEYBINDING | -|----------------+---------------------------+------------| -| neotree-toggle | /Toggle neotree/ | SPC t n | -| neotree- dir | /Open directory in neotree/ | SPC d n | - -#+BEGIN_SRC emacs-lisp -(after! neotree - (setq neo-smart-open t - neo-window-fixed-size nil)) -(after! doom-themes - (setq doom-neotree-enable-variable-pitch t)) -(map! :leader - :desc "Toggle neotree file viewer" "t n" #'neotree-toggle - :desc "Open directory in neotree" "d n" #'neotree-dir) -#+END_SRC - -* Open specific files -Keybindings to open files that I work with all the time using the find-file -command, which is the interactive file search that opens with 'C-x C-f' in GNU -Emacs or 'SPC f f' in Doom Emacs. These keybindings use find-file -non-interactively since we specify exactly what file to open. The format I use -for these bindings is 'SPC =' plus 'key' since Doom Emacs does not use 'SPC ='. - -| PATH TO FILE | DESCRIPTION | KEYBINDING | -|--------------------------------+-----------------------+------------| -| ~/Org/agenda.org | /Edit agenda file/ | SPC = a | -| ~/.config/doom/config.org" | /Edit doom config.org/ | SPC = c | -| ~/.config/doom/init.el" | /Edit doom init.el/ | SPC = i | -| ~/.config/doom/packages.el" | /Edit doom packages.el/ | SPC = p | -| ~/.config/doom/eshell/aliases" | /Edit eshell aliases/ | SPC = e a | -| ~/.config/doom/eshell/profile" | /Edit eshell profile/ | SPC = e p | - -#+BEGIN_SRC emacs-lisp -(map! :leader - (:prefix ("=" . "open file") - :desc "Edit agenda file" "a" #'(lambda () (interactive) (find-file "~/Org/agenda.org")) - :desc "Edit doom config.org" "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org")) - :desc "Edit doom init.el" "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el")) - :desc "Edit doom packages.el" "p" #'(lambda () (interactive) (find-file "~/.config/doom/packages.el")))) -(map! :leader - (:prefix ("= e" . "open eshell files") - :desc "Edit eshell aliases" "a" #'(lambda () (interactive) (find-file "~/.config/doom/eshell/aliases")) - :desc "Edit eshell profile" "p" #'(lambda () (interactive) (find-file "~/.config/doom/eshell/profile")))) -#+END_SRC - -* Org mode -I wrapped most of this block in (after! org). Without this, my settings might -be evaluated too early, which will result in my settings being overwritten by -Doom's defaults. I have also enabled org-journal, org-superstar and org-roam by -adding (+journal +pretty +roam2) to the org section of my Doom Emacs init.el. - -=NOTE:= I have the location of my Org directory and Roam directory in $HOME/nc/ -which is a Nextcloud folder that allows me to instantly sync all of my Org work -between my home computer and my office computer. - -#+BEGIN_SRC emacs-lisp -(map! :leader - :desc "Org babel tangle" "m B" #'org-babel-tangle) -(after! org - (setq org-directory "~/nc/Org/" - org-agenda-files '("~/nc/Org/agenda.org") - org-default-notes-file (expand-file-name "notes.org" org-directory) - org-ellipsis " ▼ " - org-superstar-headline-bullets-list '("◉" "●" "○" "◆" "●" "○" "◆") - org-superstar-item-bullet-alist '((?+ . ?➤) (?- . ?✦)) ; changes +/- symbols in item lists - org-log-done 'time - org-hide-emphasis-markers t - ;; ex. of org-link-abbrev-alist in action - ;; [[arch-wiki:Name_of_Page][Description]] - org-link-abbrev-alist ; This overwrites the default Doom org-link-abbrev-list - '(("google" . "http://www.google.com/search?q=") - ("arch-wiki" . "https://wiki.archlinux.org/index.php/") - ("ddg" . "https://duckduckgo.com/?q=") - ("wiki" . "https://en.wikipedia.org/wiki/")) - org-todo-keywords ; This overwrites the default Doom org-todo-keywords - '((sequence - "TODO(t)" ; A task that is ready to be tackled - "BLOG(b)" ; Blog writing assignments - "GYM(g)" ; Things to accomplish at the gym - "PROJ(p)" ; A project that contains other tasks - "VIDEO(v)" ; Video assignments - "WAIT(w)" ; Something is holding up this task - "|" ; The pipe necessary to separate "active" states and "inactive" states - "DONE(d)" ; Task has been completed - "CANCELLED(c)" )))) ; Task has been cancelled -#+END_SRC - -** Org fonts -I have created an interactive function for each color scheme (M-x -dt/org-colors-*). These functions will set appropriate colors and font -attributes for org-level fonts and the org-table font. - -#+begin_src emacs-lisp - -(defun dt/org-colors-doom-one () - "Enable Doom One colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#51afef" ultra-bold) - (org-level-2 1.6 "#c678dd" extra-bold) - (org-level-3 1.5 "#98be65" bold) - (org-level-4 1.4 "#da8548" semi-bold) - (org-level-5 1.3 "#5699af" normal) - (org-level-6 1.2 "#a9a1e1" normal) - (org-level-7 1.1 "#46d9ff" normal) - (org-level-8 1.0 "#ff6c6b" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-dracula () - "Enable Dracula colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#8be9fd" ultra-bold) - (org-level-2 1.6 "#bd93f9" extra-bold) - (org-level-3 1.5 "#50fa7b" bold) - (org-level-4 1.4 "#ff79c6" semi-bold) - (org-level-5 1.3 "#9aedfe" normal) - (org-level-6 1.2 "#caa9fa" normal) - (org-level-7 1.1 "#5af78e" normal) - (org-level-8 1.0 "#ff92d0" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-gruvbox-dark () - "Enable Gruvbox Dark colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#458588" ultra-bold) - (org-level-2 1.6 "#b16286" extra-bold) - (org-level-3 1.5 "#98971a" bold) - (org-level-4 1.4 "#fb4934" semi-bold) - (org-level-5 1.3 "#83a598" normal) - (org-level-6 1.2 "#d3869b" normal) - (org-level-7 1.1 "#d79921" normal) - (org-level-8 1.0 "#8ec07c" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-monokai-pro () - "Enable Monokai Pro colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#78dce8" ultra-bold) - (org-level-2 1.6 "#ab9df2" extra-bold) - (org-level-3 1.5 "#a9dc76" bold) - (org-level-4 1.4 "#fc9867" semi-bold) - (org-level-5 1.3 "#ff6188" normal) - (org-level-6 1.2 "#ffd866" normal) - (org-level-7 1.1 "#78dce8" normal) - (org-level-8 1.0 "#ab9df2" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-nord () - "Enable Nord colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#81a1c1" ultra-bold) - (org-level-2 1.6 "#b48ead" extra-bold) - (org-level-3 1.5 "#a3be8c" bold) - (org-level-4 1.4 "#ebcb8b" semi-bold) - (org-level-5 1.3 "#bf616a" normal) - (org-level-6 1.2 "#88c0d0" normal) - (org-level-7 1.1 "#81a1c1" normal) - (org-level-8 1.0 "#b48ead" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-oceanic-next () - "Enable Oceanic Next colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#6699cc" ultra-bold) - (org-level-2 1.6 "#c594c5" extra-bold) - (org-level-3 1.5 "#99c794" bold) - (org-level-4 1.4 "#fac863" semi-bold) - (org-level-5 1.3 "#5fb3b3" normal) - (org-level-6 1.2 "#ec5f67" normal) - (org-level-7 1.1 "#6699cc" normal) - (org-level-8 1.0 "#c594c5" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-palenight () - "Enable Palenight colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#82aaff" ultra-bold) - (org-level-2 1.6 "#c792ea" extra-bold) - (org-level-3 1.5 "#c3e88d" bold) - (org-level-4 1.4 "#ffcb6b" semi-bold) - (org-level-5 1.3 "#a3f7ff" normal) - (org-level-6 1.2 "#e1acff" normal) - (org-level-7 1.1 "#f07178" normal) - (org-level-8 1.0 "#ddffa7" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-solarized-dark () - "Enable Solarized Dark colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#268bd2" ultra-bold) - (org-level-2 1.6 "#d33682" extra-bold) - (org-level-3 1.5 "#859900" bold) - (org-level-4 1.4 "#b58900" semi-bold) - (org-level-5 1.3 "#cb4b16" normal) - (org-level-6 1.2 "#6c71c4" normal) - (org-level-7 1.1 "#2aa198" normal) - (org-level-8 1.0 "#657b83" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-solarized-light () - "Enable Solarized Light colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#268bd2" ultra-bold) - (org-level-2 1.6 "#d33682" extra-bold) - (org-level-3 1.5 "#859900" bold) - (org-level-4 1.4 "#b58900" semi-bold) - (org-level-5 1.3 "#cb4b16" normal) - (org-level-6 1.2 "#6c71c4" normal) - (org-level-7 1.1 "#2aa198" normal) - (org-level-8 1.0 "#657b83" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -(defun dt/org-colors-tomorrow-night () - "Enable Tomorrow Night colors for Org headers." - (interactive) - (dolist - (face - '((org-level-1 1.7 "#81a2be" ultra-bold) - (org-level-2 1.6 "#b294bb" extra-bold) - (org-level-3 1.5 "#b5bd68" bold) - (org-level-4 1.4 "#e6c547" semi-bold) - (org-level-5 1.3 "#cc6666" normal) - (org-level-6 1.2 "#70c0ba" normal) - (org-level-7 1.1 "#b77ee0" normal) - (org-level-8 1.0 "#9ec400" normal))) - (set-face-attribute (nth 0 face) nil :font doom-variable-pitch-font :weight (nth 3 face) :height (nth 1 face) :foreground (nth 2 face))) - (set-face-attribute 'org-table nil :font doom-font :weight 'normal :height 1.0 :foreground "#bfafdf")) - -;; Load our desired dt/org-colors-* theme on startup -(dt/org-colors-tomorrow-night) - -#+end_src - -** Org-export -We need ox-man for "Org eXporting" to manpage format and ox-gemini for exporting -to gemtext (for the gemini protocol). - -=NOTE:= I also enable ox-publish for converting an Org site into an HTML site, -but that is done in init.el (org +publish). - -#+BEGIN_SRC emacs-lisp -(use-package ox-man) -(use-package ox-gemini) -#+END_SRC - -** Org-journal -#+begin_src emacs-lisp -(setq org-journal-dir "~/nc/Org/journal/" - org-journal-date-prefix "* " - org-journal-time-prefix "** " - org-journal-date-format "%B %d, %Y (%A) " - org-journal-file-format "%Y-%m-%d.org") -#+end_src - -** Org-publish -#+begin_src emacs-lisp -(setq org-publish-use-timestamps-flag nil) -(setq org-export-with-broken-links t) -#+end_src - -** Org-auto-tangle -=org-auto-tangle= allows you to add the option =#+auto_tangle: t= in your Org file so that it automatically tangles when you save the document. - -#+begin_src emacs-lisp -(use-package! org-auto-tangle - :defer t - :hook (org-mode . org-auto-tangle-mode) - :config - (setq org-auto-tangle-default t)) - -#+end_src - -* Perspective -Perspective provides multiple named workspaces (or "perspectives") in Emacs, -similar to having multiple desktops in window managers like Awesome and XMonad. -Each perspective has its own buffer list and its own window layout, making it -easy to work on many separate projects without getting lost in all the buffers. -Switching to a perspective activates its window configuration, and when in a -perspective, only its buffers are available (by default). Doom Emacs uses 'SPC -some_key' for binding some of the perspective commands, so I used this binging -format for the perspective bindings that I created.. - -| COMMAND | DESCRIPTION | KEYBINDING | -|----------------------------+-------------------------------------+------------| -| persp-switch | Switch to perspective NAME | SPC DEL | -| persp-switch-to-buffer | Switch to buffer in perspective | SPC , | -| persp-next | Switch to next perspective | SPC ] | -| persp-prev | Switch to previous perspective | SPC [ | -| persp-add-buffer | Add a buffer to current perspective | SPC + | -| persp-remove-by-name | Remove perspective by name | SPC - | -| +workspace/switch-to-{0-9} | Switch to workspace /n/ | SPC 0-9 | - -#+begin_src emacs-lisp -(map! :leader - :desc "Switch to perspective NAME" "DEL" #'persp-switch - :desc "Switch to buffer in perspective" "," #'persp-switch-to-buffer - :desc "Switch to next perspective" "]" #'persp-next - :desc "Switch to previous perspective" "[" #'persp-prev - :desc "Add a buffer current perspective" "+" #'persp-add-buffer - :desc "Remove perspective by name" "-" #'persp-remove-by-name) -#+end_src - -* Rainbow mode -Rainbox mode displays the actual color for any hex value color. It's such a -nice feature that I wanted it turned on all the time, regardless of what mode I -am in. The following creates a global minor mode for rainbow-mode and enables -it. - -#+begin_src emacs-lisp -(define-globalized-minor-mode global-rainbow-mode rainbow-mode - (lambda () (rainbow-mode 1))) -(global-rainbow-mode 1 ) -#+end_src - -* Registers -Emacs registers are compartments where you can save text, rectangles and -positions for later use. Once you save text or a rectangle in a register, you -can copy it into the buffer once or many times; once you save a position in a -register, you can jump back to that position once or many times. The default -GNU Emacs keybindings for these commands (with the exception of -counsel-register) involves 'C-x r' followed by one or more other keys. I wanted -to make this a little more user friendly, and since I am using Doom Emacs, I -choose to replace the 'C-x r' part of the key chords with 'SPC r'. - -| COMMAND | DESCRIPTION | KEYBINDING | -|----------------------------------+----------------------------------+------------| -| copy-to-register | /Copy to register/ | SPC r c | -| frameset-to-register | /Frameset to register/ | SPC r f | -| insert-register | /Insert contents of register/ | SPC r i | -| jump-to-register | /Jump to register/ | SPC r j | -| list-registers | /List registers/ | SPC r l | -| number-to-register | /Number to register/ | SPC r n | -| counsel-register | /Interactively choose a register/ | SPC r r | -| view-register | /View a register/ | SPC r v | -| window-configuration-to-register | /Window configuration to register/ | SPC r w | -| increment-register | /Increment register/ | SPC r + | -| point-to-register | /Point to register/ | SPC r SPC | - -#+BEGIN_SRC emacs-lisp -(map! :leader - (:prefix ("r" . "registers") - :desc "Copy to register" "c" #'copy-to-register - :desc "Frameset to register" "f" #'frameset-to-register - :desc "Insert contents of register" "i" #'insert-register - :desc "Jump to register" "j" #'jump-to-register - :desc "List registers" "l" #'list-registers - :desc "Number to register" "n" #'number-to-register - :desc "Interactively choose a register" "r" #'counsel-register - :desc "View a register" "v" #'view-register - :desc "Window configuration to register" "w" #'window-configuration-to-register - :desc "Increment register" "+" #'increment-register - :desc "Point to register" "SPC" #'point-to-register)) -#+END_SRC - -* Shells -Settings for the various shells and terminal emulators within Emacs. -+ 'shell-file-name' -- sets the shell to be used in M-x shell, M-x term, M-x - ansi-term and M-x vterm. -+ 'eshell-aliases-file' -- sets an aliases file for the eshell. - -#+BEGIN_SRC emacs-lisp -(setq shell-file-name "/bin/bash" - vterm-max-scrollback 5000) -(setq eshell-rc-script "~/.config/doom/eshell/profile" - eshell-aliases-file "~/.config/doom/eshell/aliases" - eshell-history-size 5000 - eshell-buffer-maximum-lines 5000 - eshell-hist-ignoredups t - eshell-scroll-to-bottom-on-input t - eshell-destroy-buffer-when-process-dies t - eshell-visual-commands'("bash" "fish" "htop" "ssh" "top" "zsh")) -(map! :leader - :desc "Eshell" "e s" #'eshell - :desc "Eshell popup toggle" "e t" #'+eshell/toggle - :desc "Counsel eshell history" "e h" #'counsel-esh-history - :desc "Vterm popup toggle" "v t" #'+vterm/toggle) -#+END_SRC - -* Splits -I set splits to default to opening on the right using 'prefer-horizontal-split'. -I set a keybinding for 'clone-indirect-buffer-other-window' for when I want to -have the same document in two splits. The text of the indirect buffer is always -identical to the text of its base buffer; changes made by editing either one are -visible immediately in the other. But in all other respects, the indirect -buffer and its base buffer are completely separate. For example, I can fold one -split but other will be unfolded. - -#+BEGIN_SRC emacs-lisp -(defun prefer-horizontal-split () - (set-variable 'split-height-threshold nil t) - (set-variable 'split-width-threshold 40 t)) ; make this as low as needed -(add-hook 'markdown-mode-hook 'prefer-horizontal-split) -(map! :leader - :desc "Clone indirect buffer other window" "b c" #'clone-indirect-buffer-other-window) -#+END_SRC - -* Winner mode -Winner mode has been included with GNU Emacs since version 20. This is a global -minor mode and, when activated, it allows you to “undo” (and “redo”) changes in -the window configuration with the key commands 'SCP w ' and 'SPC w -'. - -#+BEGIN_SRC emacs-lisp -(map! :leader - (:prefix ("w" . "window") - :desc "Winner redo" "" #'winner-redo - :desc "Winner undo" "" #'winner-undo)) -#+END_SRC - -* Zap to char -Emacs provides a 'zap-to-char' command that kills from the current point to a -character. It is bound to 'M-z' in standard GNU Emacs but since Doom Emacs uses -'SPC' as its leader key and does not have 'SPC z' binded to anything, it just -makes since to use it for 'zap-to-char'. Note that 'zap-to-char' can be used -with the universal argument 'SPC u' to modify its behavior. Examples of -'zap-to-char' usage are listed in the table below: - -| KEYBINDING | WHAT IS DOES | -|---------------------------+------------------------------------------------------------| -| SPC z e | deletes all chars to the next occurrence of 'e' | -| SPC u 2 SPC z e | deletes all chars to the second occurrence of 'e' | -| SPC u - SPC z e | deletes all chars to the previous occurrence of 'e' | -| SPC u -2 SPC z e | deletes all chars to the fourth previous occurrence of 'e' | -| SPC u 1 0 0 SPC u SPC z e | deletes all chars to the 100th occurrence of 'e' | - -=TIP:= The universal argument (SPC u) can only take a single integer by default. -If you need to use a multi-digit number (like 100 in the last example in the -table above), then you must terminate the universal argument with another 'SPC -u' after typing the number. - -'zap-up-to-char' is an alternative command that does not zap the char specified. -It is binded to 'SPC Z'. It can also be used in conjunction with the universal -argument 'SPC u' in similar fashion to the the 'zap-to-char' examples above. - -=NOTE:= Vim (evil mode) has similar functionality builtin. You can delete to -the next occurrence of 'e' by using 'dte' in normal. To delete to the next -occurrence of 'e' including the 'e', then you would use 'dfe'. And you can -modify 'dt' and 'df' by prefixing them with numbers, so '2dte' would delete to -the second occurrence of 'e'. - -#+BEGIN_SRC emacs-lisp -(map! :leader - :desc "Zap to char" "z" #'zap-to-char - :desc "Zap up to char" "Z" #'zap-up-to-char) -#+END_SRC diff --git a/user/.config/doom/emacs-dash.txt b/user/.config/doom/emacs-dash.txt deleted file mode 100644 index 5d5f70293..000000000 --- a/user/.config/doom/emacs-dash.txt +++ /dev/null @@ -1,19 +0,0 @@ - ================= =============== =============== ======== ======== - \\ . . . . . . .\\ //. . . . . . .\\ //. . . . . . .\\ \\. . .\\// . . // - ||. . ._____. . .|| ||. . ._____. . .|| ||. . ._____. . .|| || . . .\/ . . .|| - || . .|| ||. . || || . .|| ||. . || || . .|| ||. . || ||. . . . . . . || - ||. . || || . .|| ||. . || || . .|| ||. . || || . .|| || . | . . . . .|| - || . .|| ||. _-|| ||-_ .|| ||. . || || . .|| ||. _-|| ||-_.|\ . . . . || - ||. . || ||-' || || `-|| || . .|| ||. . || ||-' || || `|\_ . .|. .|| - || . _|| || || || || ||_ . || || . _|| || || || |\ `-_/| . || - ||_-' || .|/ || || \|. || `-_|| ||_-' || .|/ || || | \ / |-_.|| - || ||_-' || || `-_|| || || ||_-' || || | \ / | `|| - || `' || || `' || || `' || || | \ / | || - || .===' `===. .==='.`===. .===' /==. | \/ | || - || .==' \_|-_ `===. .===' _|_ `===. .===' _-|/ `== \/ | || - || .==' _-' `-_ `=' _-' `-_ `=' _-' `-_ /| \/ | || - || .==' _-' '-__\._-' '-_./__-' `' |. /| | || - ||.==' _-' `' | /==.|| - ==' _-' EMACS \/ `== - \ _-' `-_ / - `'' ``' diff --git a/user/.config/doom/eshell/aliases b/user/.config/doom/eshell/aliases deleted file mode 100644 index ef5aa3a9e..000000000 --- a/user/.config/doom/eshell/aliases +++ /dev/null @@ -1,26 +0,0 @@ -# Aliases for emacs commands -alias ff find-file $1 - -# Changing "ls" to "exa" -alias ls exa -al --color=always --group-directories-first $* # my preferred listing -alias la exa -a --color=always --group-directories-first $* # all files and dirs -alias ll exa -l --color=always --group-directories-first $* # long format -alias lt exa -aT --color=always --group-directories-first $* # tree listing -alias l. exa -a1 $* | grep "^\." # list hidden files - -# Merge Xresources -alias merge xrdb -merge ~/.Xresources - -# Aliases for doom emacs utilties -alias doomsync ~/.emacs.d/bin/doom sync -alias doomdoctor ~/.emacs.d/bin/doom doctor -alias doomupgrade ~/.emacs.d/bin/doom upgrade -alias doompurge ~/.emacs.d/bin/doom purge - -# Confirm before overwriting something -alias cp cp -i $1 -alias mv mv -i $1 -alias rm rm -i $1 - -# bare git repo alias for dotfiles -alias config /usr/bin/git --git-dir=$HOME/dotfiles --work-tree=$HOME $* diff --git a/user/.config/doom/eshell/profile b/user/.config/doom/eshell/profile deleted file mode 100644 index 3c871d69c..000000000 --- a/user/.config/doom/eshell/profile +++ /dev/null @@ -1 +0,0 @@ -colorscript random \ No newline at end of file diff --git a/user/.config/doom/init.el b/user/.config/doom/init.el deleted file mode 100644 index 07422364e..000000000 --- a/user/.config/doom/init.el +++ /dev/null @@ -1,191 +0,0 @@ -;;; init.el -*- lexical-binding: t; -*- - -;; This file controls what Doom modules are enabled and what order they load -;; 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. - -;; 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 -;; flags as well (those symbols that start with a plus). -;; -;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its -;; directory (for easy access to its source code). - -(doom! :input - ;;chinese - ;;japanese - ;;layout ; auie,ctsrnm is the superior home row - - :completion - company ; the ultimate code completion backend - ;;helm ; the *other* search engine for love and life - ;;ido ; the other *other* search engine... - (ivy +fonts +childframe) ; a search engine for love and life - - :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 - (emoji +unicode) ; 🙂 - ;;fill-column ; a `fill-column' indicator - hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW - ;;hydra - ;;indent-guides ; highlighted indent columns - (ligatures +extras) ; ligatures and symbols to make your code pretty again - ;;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 - 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 - ;;unicode ; extended unicode support for various languages - vc-gutter ; vcs diff in the fringe - vi-tilde-fringe ; fringe tildes to mark beyond EOB - window-select ; visually switch windows - workspaces ; tab emulation, persistence & separate workspaces - zen ; distraction-free coding or writing - - :editor - (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 - ;;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 - ;;objed ; text object editing for the innocent - ;;parinfer ; turn lisp into python, sort of - ;;rotate-text ; cycle region at point between text candidates - snippets ; my elves. They type so I don't have to - ;;word-wrap ; soft wrapping with language-aware indent - - :emacs - (dired +icons) ; making dired pretty [functional] - electric ; smarter, keyword-based electric-indent - (ibuffer +icons) ; interactive buffer management - undo ; persistent, smarter undo for your inevitable mistakes - vc ; version-control and Emacs, sitting in a tree - - :term - eshell ; the elisp shell that works everywhere - shell ; simple shell REPL for Emacs - ;;term ; basic terminal emulator for Emacs - vterm ; the best terminal emulation in Emacs - - :checkers - syntax ; tasing you for every semicolon you forget - ;;(spell +aspell) ; tasing you for misspelling mispelling - ;;grammar ; tasing grammar mistake every you make - - :tools - ;;ansible - ;;debugger ; FIXME stepping through code, to help you add bugs - ;;direnv - ;;docker - ;;editorconfig ; let someone else argue about tabs vs spaces - ;;ein ; tame Jupyter notebooks with emacs - (eval +overlay) ; run code, run (also, repls) - ;;gist ; interacting with github gists - lookup ; navigate your code and its documentation - lsp - magit ; a git porcelain for Emacs - ;;make ; run make tasks from Emacs - ;;pass ; password manager for nerds - pdf ; pdf enhancements - ;;prodigy ; FIXME managing external services & code builders - ;;rgb ; creating color strings - ;;taskrunner ; taskrunner for all your projects - ;;terraform ; infrastructure as code - ;;tmux ; an API for interacting with tmux - ;;upload ; map local to remote projects via ssh/ftp - - :os - (:if IS-MAC macos) ; improve compatibility with macOS - ;;tty ; improve the terminal Emacs experience - - :lang - ;;agda ; types of types of types of types... - cc ; C/C++/Obj-C madness - ;;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 - ;;elixir ; erlang done right - ;;elm ; care for a cup of TEA? - emacs-lisp ; drown in parentheses - ;;erlang ; an elegant language for a more civilized age - ;;ess ; emacs speaks statistics - ;;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 - ;;(go +lsp) ; the hipster dialect - ;;(haskell +dante) ; 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 - 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 - ;;lean - ;;factor - ;;ledger ; an accounting system in Emacs - lua ; one-based indices? one-based indices - markdown ; writing docs for people to ignore - ;;nim ; python + lisp at the speed of c - ;;nix ; I hereby declare "nix geht mehr!" - ;;ocaml ; an objective camel - (org - +journal ; enable org journal - +pretty ; replace asterisks with pretty org bullets - +publish ; create static websites with org - +roam2) ; org roam v2 - php ; perl's insecure younger brother - ;;plantuml ; diagrams for confusing people more - ;;purescript ; javascript, but functional - python ; beautiful is better than ugly - ;;qt ; the 'cutest' gui framework ever - ;;racket ; a DSL for DSLs - ;;raku ; the artist formerly known as perl6 - ;;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() - ;;scala ; java, but good - scheme ; a fully conniving family of lisps - 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 - - :email - ;;mu4e - ;;smtpmail - ;;notmuch - ;;(wanderlust +gmail) - - :app - ;;calendar - ;; emms - ;;everywhere ; *leave* Emacs!? You must be joking - ;;irc ; how neckbeards socialize - ;;rss ; emacs as an RSS reader - ;;twitter ; twitter client https://twitter.com/vnought - - :config - literate - (default +bindings +smartparens)) diff --git a/user/.config/doom/packages.el b/user/.config/doom/packages.el deleted file mode 100644 index 791d18aa3..000000000 --- a/user/.config/doom/packages.el +++ /dev/null @@ -1,90 +0,0 @@ -;; -*- no-byte-compile: t; -*- -;;; $DOOMDIR/packages.el - -;; To install a package with Doom you must declare them here and run 'doom sync' -;; on the command line, then restart Emacs for the changes to take effect -- or -;; use 'M-x doom/reload'. - - -;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: -;(package! some-package) - -;; 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 -;(package! another-package -; :recipe (:host github :repo "username/repo")) - -;; If the package you are trying to install does not contain a PACKAGENAME.el -;; file, or is located in a subdirectory of the repo, you'll need to specify -;; `:files' in the `:recipe': -;(package! this-package -; :recipe (:host github :repo "username/repo" -; :files ("some-file.el" "src/lisp/*.el"))) - -;; If you'd like to disable a package included with Doom, you can do so here -;; with the `:disable' property: -;(package! builtin-package :disable t) - -;; You can override the recipe of a built in package without having to specify -;; all the properties for `:recipe'. These will inherit the rest of its recipe -;; from Doom or MELPA/ELPA/Emacsmirror: -;(package! builtin-package :recipe (:nonrecursive t)) -;(package! builtin-package-2 :recipe (:repo "myfork/package")) - -;; Specify a `:branch' to install a package from a particular branch or tag. -;; This is required for some packages whose default branch isn't 'master' (which -;; our package manager can't deal with; see raxod502/straight.el#279) -;(package! builtin-package :recipe (:branch "develop")) - -;; Use `:pin' to specify a particular commit to install. -;(package! builtin-package :pin "1a2b3c4d5e") - - -;; Doom's packages are pinned to a specific commit and updated from release to -;; release. The `unpin!' macro allows you to unpin single packages... -;(unpin! pinned-package) -;; ...or multiple packages -;(unpin! pinned-package another-pinned-package) -;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) -;(unpin! t) - -(package! gitconfig-mode - :recipe (:host github :repo "magit/git-modes" - :files ("gitconfig-mode.el"))) -(package! gitignore-mode - :recipe (:host github :repo "magit/git-modes" - :files ("gitignore-mode.el"))) -(package! flycheck-aspell) -(package! async) -(package! calfw) -(package! calfw-org) -(package! dashboard) -(package! dired-open) -(package! dired-subtree) -(package! dmenu) -(package! elpher) -(package! emojify) -(package! esxml) -(package! evil-tutor) -(package! imenu-list) -(package! ivy-posframe) -(package! mw-thesaurus) -(package! org-board) -(package! org-web-tools) -(package! org-auto-tangle) -(package! ox-gemini) -(package! pacmacs) -(package! peep-dired) -(package! rainbow-mode) -(package! request) -(package! resize-window) -(package! s) -(package! tldr) -(package! wc-mode) -(package! beacon) -(package! minimap) -(package! olivetti) -(package! sharper) -(package! csproj-mode) -(package! dap-mode) diff --git a/user/.config/fish/config.fish b/user/.config/fish/config.fish index b29cc5a6a..b37685cc0 100644 --- a/user/.config/fish/config.fish +++ b/user/.config/fish/config.fish @@ -9,13 +9,13 @@ # First line removes the path; second line sets it. Without the first line, # your path gets massive and fish becomes very slow. set -e fish_user_paths -set -U fish_user_paths $HOME/.bin $HOME/.local/bin $HOME/.config/emacs/bin $HOME/Applications /var/lib/flatpak/exports/bin/ $fish_user_paths +set -U fish_user_paths $HOME/.bin $HOME/.local/bin /var/lib/flatpak/exports/bin/ $fish_user_paths ### EXPORT ### set fish_greeting # Supresses fish's intro message set TERM "xterm-256color" # Sets the terminal type -set EDITOR "emacsclient -t -a ''" -set VISUAL "emacsclient -c -a 'emacs'" +set EDITOR "~/.local/bin/lvim" +set VISUAL "neovide --neovim-bin ~/.local/bin/lvim" ### SET BAT AS MANPAGER set -x MANPAGER "sh -c 'col -bx | bat -l man -p'" @@ -126,14 +126,11 @@ alias .4='cd ../../../..' alias .5='cd ../../../../..' # emacs as vim -alias vim="emacsclient -t -a ''" +alias vim="~/.local/bin/lvim" # bat as cat alias cat='bat' -# pfetch as neofetch -alias neofetch='pfetch' - # Changing "ls" to "exa" alias ls='exa -al --color=always --group-directories-first' # my preferred listing alias la='exa -a --color=always --group-directories-first' # all files and dirs @@ -219,12 +216,6 @@ alias youtube='ytfzf -ftsl' alias ytm='ytfzf -mtsl' alias youtube-music='ytfzf -mtsl' -# the terminal rickroll -alias rr='curl -s -L https://raw.githubusercontent.com/keroserene/rickrollrc/master/roll.sh | bash' - -# Mocp must be launched with bash instead of Fish! -alias mocp="bash -c mocp" - # network and bluetooth alias netstats='nmcli dev' alias wfi='nmtui-connect' diff --git a/user/.config/git/config b/user/.config/git/config index 8e67ea8a3..f7effc496 100644 --- a/user/.config/git/config +++ b/user/.config/git/config @@ -1,4 +1,4 @@ [user] mail = misterclay@tutanota.com - name = Darius Drake + name = Clay Gomera email = misterclay@tutanota.com diff --git a/user/.config/gtk-2.0/gtkfilechooser.ini b/user/.config/gtk-2.0/gtkfilechooser.ini index 65fa2a6e5..3de31bfd5 100644 --- a/user/.config/gtk-2.0/gtkfilechooser.ini +++ b/user/.config/gtk-2.0/gtkfilechooser.ini @@ -4,8 +4,8 @@ ShowHidden=false ShowSizeColumn=true GeometryX=0 GeometryY=0 -GeometryWidth=772 -GeometryHeight=560 +GeometryWidth=780 +GeometryHeight=585 SortColumn=name SortOrder=ascending StartupMode=recent diff --git a/user/.config/gtk-2.0/gtkrc-2.0 b/user/.config/gtk-2.0/gtkrc-2.0 index 385c75acc..baac8dd86 100644 --- a/user/.config/gtk-2.0/gtkrc-2.0 +++ b/user/.config/gtk-2.0/gtkrc-2.0 @@ -1,19 +1,14 @@ -# DO NOT EDIT! This file will be overwritten by nwg-look. -# Any customization should be done in ~/.gtkrc-2.0.mine instead. - -include "/home/drk/.gtkrc-2.0.mine" gtk-theme-name="gruvbox-dark-gtk" gtk-icon-theme-name="gruvbox-dark-icons-gtk" gtk-font-name="Cantarell 10" gtk-cursor-theme-name="Simp1e-Gruvbox-Dark" -gtk-cursor-theme-size=24 +gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=1 gtk-menu-images=1 gtk-enable-event-sounds=1 -gtk-enable-input-feedback-sounds=0 +gtk-enable-input-feedback-sounds=1 gtk-xft-antialias=1 gtk-xft-hinting=1 -gtk-xft-hintstyle="hintslight" -gtk-xft-rgba="rgb" +gtk-xft-hintstyle="hintfull" diff --git a/user/.config/gtk-3.0/settings.ini b/user/.config/gtk-3.0/settings.ini index 7b4e43bc1..22c394419 100644 --- a/user/.config/gtk-3.0/settings.ini +++ b/user/.config/gtk-3.0/settings.ini @@ -3,15 +3,13 @@ gtk-theme-name=gruvbox-dark-gtk gtk-icon-theme-name=gruvbox-dark-icons-gtk gtk-font-name=Cantarell 10 gtk-cursor-theme-name=Simp1e-Gruvbox-Dark -gtk-cursor-theme-size=24 +gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=1 gtk-menu-images=1 gtk-enable-event-sounds=1 -gtk-enable-input-feedback-sounds=0 +gtk-enable-input-feedback-sounds=1 gtk-xft-antialias=1 gtk-xft-hinting=1 -gtk-xft-hintstyle=hintslight -gtk-xft-rgba=rgb -gtk-application-prefer-dark-theme=1 +gtk-xft-hintstyle=hintfull diff --git a/user/.config/hypr/hyprland.conf b/user/.config/hypr/hyprland.conf index 207ee775a..298d70444 100644 --- a/user/.config/hypr/hyprland.conf +++ b/user/.config/hypr/hyprland.conf @@ -29,7 +29,6 @@ exec-once = dunst --config ~/.config/dunst/dunstrc exec-once = waybar ## Set wallpaper exec-once = swww init -exec-once = $HOME/.wbg ## Clipboard history exec-once = wl-paste --type text --watch cliphist store #Stores only text data exec-once = wl-paste --type image --watch cliphist store #Stores only image data @@ -52,19 +51,15 @@ input { general { gaps_in = 2 gaps_out = 4 - border_size = 2 - col.active_border = rgb(cc241d) rgb(d79921) 45deg + border_size = 3 + col.active_border = rgb(cc241d) #rgb(d79921) 45deg col.inactive_border = rgb(504945) layout = master } # DECORATIONS decoration { - rounding = 10 # Rounded corners - blur = yes # Window background blur - blur_size = 4 - blur_passes = 1.5 - blur_new_optimizations = yes + rounding = 0 # Rounded corners drop_shadow = yes shadow_range = 5 shadow_render_power = 3 @@ -140,95 +135,123 @@ device:epic mouse V1 { # WINDOW RULES windowrule = float, ^(qalculate-gtk)$ -## Workspace 1 - Web -windowrule = workspace 1, ^(org.qutebrowser.qutebrowser)$ -windowrule = workspace 1, ^(newsboat)$ -windowrule = workspace 1, ^(firefox)$ -windowrule = workspace 1, ^(LibreWolf)$ -windowrule = workspace 1, ^(Chromium)$ -windowrule = workspace 1, ^(Brave-browser)$ +## Workspace 1 - Editors +windowrule = workspace 1, ^(neovim)$ +windowrule = workspace 1, ^(goneovim)$ +windowrule = workspace 1, ^(Code)$ +windowrule = workspace 1, ^(emacs)$ +windowrule = workspace 1, ^(neovide)$ + +## Workspace 2 - Debug/Test Tools +windowrule = workspace 2, ^(gnome-boxes)$ +windowrule = workspace 2, ^(virt-manager)$ ## Workspace 2 - File management -windowrule = workspace 2, ^(vifm)$ -windowrule = workspace 2, ^(Pcmanfm)$ +windowrule = workspace 3, ^(file_manager)$ +windowrule = workspace 3, ^(pcmanfm)$ -## Workspace 3 - Editors -windowrule = workspace 3, ^(neovim)$ -windowrule = workspace 3, ^(goneovim)$ -windowrule = workspace 3, ^(Code)$ -windowrule = workspace 3, ^(emacs)$ -windowrule = workspace 3, ^(Notesnook)$ +## Workspace 4 - Web +windowrule = workspace 4, ^(org.qutebrowser.qutebrowser)$ +windowrule = workspace 4, ^(firefox)$ +windowrule = workspace 4, ^(LibreWolf)$ +windowrule = workspace 4, ^(Chromium)$ +windowrule = workspace 4, ^(Brave-browser)$ -## Workspace 4 - Chat -windowrule = workspace 4, ^(gomuks)$ -windowrule = workspace 4, ^(Signal)$ -windowrule = workspace 4, ^(revolt-desktop)$ -windowrule = workspace 4, ^(Element)$ +## Workspace 5 - Chat +windowrule = workspace 5, ^(gomuks)$ +windowrule = workspace 5, ^(Signal)$ +windowrule = workspace 5, ^(revolt-desktop)$ +windowrule = workspace 5, ^(Element)$ -## Workspace 5 - Audio -windowrule = workspace 5, ^(music_player)$ -windowrule = workspace 5, ^(ytfzf_music)$ -windowrule = workspace 5, ^(audacity)$ -windowrule = workspace 5, ^(Ardour)$ -windowrule = workspace 5, ^(carla)$ -windowrule = workspace 5, ^(carla-control)$ -windowrule = workspace 5, ^(hydrogen)$ -windowrule = workspace 5, ^(guitarix)$ -windowrule = workspace 5, ^(lsp-plugins)$ -windowrule = workspace 5, ^(QjackCtl)$ -windowrule = workspace 5, ^(org.rncbc.qpwgraph)$ -windowrule = workspace 5, ^(soundconverter)$ -windowrule = workspace 5, ^(kid3-qt)$ +## Workspace 6 - Mail +windowrule = workspace 6, ^(tutanota-desktop)$ +windowrule = workspace 6, ^(thunderbird)$ -## Workspace 6 - Video -windowrule = workspace 6, ^(pitivi)$ -windowrule = workspace 6, ^(org.kde.kdenlive)$ -windowrule = workspace 6, ^(mpv)$ -windowrule = workspace 6, ^(ytfzf)$ -windowrule = workspace 6, ^(flix_cli)$ -windowrule = workspace 6, ^(ani_cli)$ -windowrule = workspace 6, ^(blender)$ -windowrule = workspace 6, ^(com.obsproject.Studio)$ -windowrule = workspace 6, ^(fr.handbrake.ghb)$ +## Workspace 7 - News +windowrule = workspace 7, ^(newsboat)$ +windowrule = workspace 7, ^(org.kde.akregator)$ +windowrule = workspace 7, ^(io.gitlab.news_flash.NewsFlash)$ +windowrule = workspace 7, ^(liferea)$ +windowrule = workspace 7, ^(io.github.martinrotter.rssguard)$ -## Workspace 7 - Graphics -windowrule = workspace 7, ^(org.inkscape.Inkscape)$ -windowrule = workspace 7, ^(Gimp-2.10)$ -windowrule = workspace 7, ^(xournalpp)$ -windowrule = workspace 7, ^(krita)$ -windowrule = workspace 7, ^(darktable)$ -windowrule = workspace 7, ^(org.kde.digikam)$ +## Workspace 8 - Mastodon +windowrule = workspace 8, ^(tut)$ +windowrule = workspace 8, ^(org.kde.tokodon)$ -## Workspace 8 - Office -windowrule = workspace 8, ^(libreoffice-writer)$ -windowrule = workspace 8, ^(libreoffice-calc)$ -windowrule = workspace 8, ^(libreoffice-impress)$ -windowrule = workspace 8, ^(libreoffice-base)$ -windowrule = workspace 8, ^(libreoffice-draw)$ -windowrule = workspace 8, ^(libreoffice-math)$ -windowrule = workspace 8, ^(soffice)$ -windowrule = workspace 8, ^(GeoGebra)$ +## Workspace 9 - Audio +windowrule = workspace 9, ^(music_player)$ +windowrule = workspace 9, ^(ytfzf_music)$ +windowrule = workspace 9, ^(audacity)$ +windowrule = workspace 9, ^(Ardour)$ +windowrule = workspace 9, ^(carla)$ +windowrule = workspace 9, ^(carla-control)$ +windowrule = workspace 9, ^(hydrogen)$ +windowrule = workspace 9, ^(guitarix)$ +windowrule = workspace 9, ^(lsp-plugins)$ +windowrule = workspace 9, ^(QjackCtl)$ +windowrule = workspace 9, ^(org.rncbc.qpwgraph)$ +windowrule = workspace 9, ^(soundconverter)$ +windowrule = workspace 9, ^(kid3-qt)$ -## Workspace 9 - Games -windowrule = workspace 9, ^(org.libretro.RetroArch)$ -windowrule = workspace 9, ^(com.github.tkashkin.gamehub)$ -windowrule = workspace 9, ^(DarkPlaces)$ -windowrule = workspace 9, ^(pyrogenesis)$ -windowrule = workspace 9, ^(wesnoth)$ -windowrule = workspace 9, ^(Steam)$ -windowrule = workspace 9, ^(Minetest)$ +## Workspace 10 - Video +windowrule = workspace 10, ^(pitivi)$ +windowrule = workspace 10, ^(org.kde.kdenlive)$ +windowrule = workspace 10, ^(mpv)$ +windowrule = workspace 10, ^(ytfzf)$ +windowrule = workspace 10, ^(flix_cli)$ +windowrule = workspace 10, ^(ani_cli)$ +windowrule = workspace 10, ^(blender)$ +windowrule = workspace 10, ^(com.obsproject.Studio)$ +windowrule = workspace 10, ^(fr.handbrake.ghb)$ + +## Workspace 11 - Graphics +windowrule = workspace 11, ^(org.inkscape.Inkscape)$ +windowrule = workspace 11, ^(Gimp-2.10)$ +windowrule = workspace 11, ^(xournalpp)$ +windowrule = workspace 11, ^(krita)$ +windowrule = workspace 11, ^(darktable)$ +windowrule = workspace 11, ^(org.kde.digikam)$ + +## Workspace 12 - Office +windowrule = workspace 12, ^(libreoffice-writer)$ +windowrule = workspace 12, ^(libreoffice-calc)$ +windowrule = workspace 12, ^(libreoffice-impress)$ +windowrule = workspace 12, ^(libreoffice-base)$ +windowrule = workspace 12, ^(libreoffice-draw)$ +windowrule = workspace 12, ^(libreoffice-math)$ +windowrule = workspace 12, ^(soffice)$ +windowrule = workspace 12, ^(GeoGebra)$ +windowrule = workspace 12, ^(Notesnook)$ + +## Workspace 13 - PDF Readers +windowrule = workspace 13, ^(org.pwmt.zathura)$ + +## Workspace 14 - Games +windowrule = workspace 14, ^(org.libretro.RetroArch)$ +windowrule = workspace 14, ^(com.github.tkashkin.gamehub)$ +windowrule = workspace 14, ^(DarkPlaces)$ +windowrule = workspace 14, ^(pyrogenesis)$ +windowrule = workspace 14, ^(wesnoth)$ +windowrule = workspace 14, ^(Steam)$ +windowrule = workspace 14, ^(Minetest)$ + +# Workspace 15 - Password Manager +windowrule = workspace 15, ^(org.keepassxc.KeePassXC)$ + +# Workspace 16 - Audio Tools +windowrule = workspace 16, ^(pulsemixer)$ +windowrule = workspace 16, ^(alsamixer)$ +windowrule = workspace 16, ^(com.github.wwmm.easyeffects)$ + +## Workspace 19 - System Monitor +windowrule = workspace 19, ^(btop)$ +windowrule = workspace 19, ^(htop)$ + +## Workspace 20 - Tools +windowrule = workspace 20, ^(wdisplays)$ +windowrule = workspace 20, ^(font-manager)$ +windowrule = workspace 20, ^(org.qbittorrent.qBittorrent)$ -## Workspace 10 - Extras -windowrule = workspace 10, ^(Todoist)$ -windowrule = workspace 10, ^(btop)$ -windowrule = workspace 10, ^(htop)$ -windowrule = workspace 10, ^(pulsemixer)$ -windowrule = workspace 10, ^(alsamixer)$ -windowrule = workspace 10, ^(wdisplays)$ -windowrule = workspace 10, ^(font-manager)$ -windowrule = workspace 10, ^(org.qbittorrent.qBittorrent)$ -windowrule = workspace 10, ^(org.keepassxc.KeePassXC)$ -windowrule = workspace 10, ^(virt-manager)$ ################################### ### end___ __ ____ ________ ### @@ -300,6 +323,16 @@ bind = $supMod, 7, workspace, 7 bind = $supMod, 8, workspace, 8 bind = $supMod, 9, workspace, 9 bind = $supMod, 0, workspace, 10 +bind = $supMod_$conMod, 1, workspace, 11 +bind = $supMod_$conMod, 2, workspace, 12 +bind = $supMod_$conMod, 3, workspace, 13 +bind = $supMod_$conMod, 4, workspace, 14 +bind = $supMod_$conMod, 5, workspace, 15 +bind = $supMod_$conMod, 6, workspace, 16 +bind = $supMod_$conMod, 7, workspace, 17 +bind = $supMod_$conMod, 8, workspace, 18 +bind = $supMod_$conMod, 9, workspace, 19 +bind = $supMod_$conMod, 0, workspace, 20 ## Move active window to a workspace with supmod + shift + [0-9] bind = $supMod_SHIFT, 1, movetoworkspace, 1 bind = $supMod_SHIFT, 2, movetoworkspace, 2 @@ -311,6 +344,16 @@ bind = $supMod_SHIFT, 7, movetoworkspace, 7 bind = $supMod_SHIFT, 8, movetoworkspace, 8 bind = $supMod_SHIFT, 9, movetoworkspace, 9 bind = $supMod_SHIFT, 0, movetoworkspace, 10 +bind = $supMod_$conMod_SHIFT, 1, movetoworkspace, 11 +bind = $supMod_$conMod_SHIFT, 2, movetoworkspace, 12 +bind = $supMod_$conMod_SHIFT, 3, movetoworkspace, 13 +bind = $supMod_$conMod_SHIFT, 4, movetoworkspace, 14 +bind = $supMod_$conMod_SHIFT, 5, movetoworkspace, 15 +bind = $supMod_$conMod_SHIFT, 6, movetoworkspace, 16 +bind = $supMod_$conMod_SHIFT, 7, movetoworkspace, 17 +bind = $supMod_$conMod_SHIFT, 8, movetoworkspace, 18 +bind = $supMod_$conMod_SHIFT, 9, movetoworkspace, 19 +bind = $supMod_$conMod_SHIFT, 0, movetoworkspace, 20 ## Scroll through existing workspaces with supmod + scroll bind = $supMod, mouse_down, workspace, e+1 bind = $supMod, mouse_up, workspace, e-1 @@ -341,31 +384,32 @@ bindl=, XF86MonBrightnessDown, exec, brightnessctl s 10%- # Decrease br bindl=, XF86Display, exec, wdisplays # Open the display config tool (wdisplays) # ROFI -binde = $supMod_SHIFT, d, exec, pkill rofi || rofi -show drun # Desktop launcher -binde = $supMod_SHIFT, r, exec, pkill rofi || rofi -show run # Standard launcher -binde = $supMod_SHIFT, w, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_wall # Wallpaper setup -binde = $supMod_SHIFT, i, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_wifi # Wifi setup -binde = $supMod_SHIFT, e, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_emoji # Emoji picker -binde = $supMod_SHIFT, s, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_scrot # Screenshot tool -binde = $supMod_$conMod, s, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_scrot -s # Stop recording (for the screenshot tool) -binde = $supMod_SHIFT, q, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_power # Power setup -binde = $supMod_SHIFT, b, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_blue # Bluetooth setup -binde = $supMod_SHIFT, m, exec, pkill rofi || $HOME/.config/rofi/scripts/rofi_mount # External drive mount utility -binde = $supMod_SHIFT, c, exec, pkill rofi || cliphist list | rofi -dmenu -p "  Clipboard " | cliphist decode | wl-copy # Clipboard history +binde = $supMod_SHIFT, d, exec, pkill wofi || $RUNNER_EX --show drun # Desktop launcher +binde = $supMod_SHIFT, r, exec, pkill wofi || $RUNNER_EX --show run # Standard launcher +binde = $supMod_SHIFT, w, exec, pkill wofi || $HOME/.local/bin/rs_wall # Wallpaper setup +binde = $supMod_SHIFT, i, exec, pkill wofi || $HOME/.local/bin/rs_wifi # Wifi setup +binde = $supMod_SHIFT, e, exec, pkill wofi || $HOME/.local/bin/rs_emoji # Emoji picker +binde = $supMod_SHIFT, s, exec, pkill wofi || $HOME/.local/bin/rs_scrot # Screenshot tool +binde = $supMod_$conMod, s, exec, pkill wofi || $HOME/.local/bin/rs_scrot -s # Stop recording (for the screenshot tool) +binde = $supMod_SHIFT, q, exec, pkill wofi || $HOME/.local/bin/rs_power # Power setup +binde = $supMod_SHIFT, b, exec, pkill wofi || $HOME/.local/bin/rs_blue # Bluetooth setup +binde = $supMod_SHIFT, m, exec, pkill wofi || $HOME/.local/bin/rs_mount # External drive mount utility +binde = $supMod_SHIFT, c, exec, pkill wofi || cliphist list | $RUNNER -p "  Clipboard " | cliphist decode | wl-copy # Clipboard history # COLOR PICKER binde = $supMod_$conMod, c, exec, hyprpicker -n -a # QUICK TERMINAL SCRIPTS/COMMANDS -## Workspace 1 - Web +## Workspace 3 - Web binde = $supMod_$altMod, r, exec, wezterm start --class newsboat -- newsboat # RSS feed reader +binde = $supMod_$altMod, t, exec, wezterm start --class tut -- tut # Mastodon client ## Workspace 5 - Audio binde = $supMod_$altMod, m, exec, wezterm start --class ytfzf_music -- ytfzf -mlstT chafa # Listen to YouTube Music on the terminal ## Workspace 6 - Video binde = $supMod_$altMod, f, exec, wezterm start --class flix_cli -- flix-cli # Watch movies on the terminal binde = $supMod_$altMod, a, exec, wezterm start --class ani_cli -- ani-cli # Watch anime on the terminal binde = $supMod_$altMod, y, exec, wezterm start --class ytfzf -- ytfzf -flstT chafa # Watch YouTube on the terminal -## Workspace 10 - Extras +## Workspace 9 - Extras binde = $supMod_$altMod, p, exec, wezterm start --class pulsemixer -- pulsemixer # Open the volume mixer (pulsemixer) binde = $supMod_$altMod, o, exec, wezterm start --class alsamixer -- alsamixer # Open the volume mixer (alsamixer) binde = $supMod_$altMod, b, exec, wezterm start --class btop -- btop # Open the system monitor (btop) @@ -373,20 +417,19 @@ binde = $supMod_$altMod, h, exec, wezterm start --class htop -- htop # MAIN APPS ## Workspace 1 - Web -binde = $supMod, w, exec, io.gitlab.librewolf-community +binde = $supMod, w, exec, firefox ## Workspace 2 - File management -binde = $supMod, f, exec, wezterm start --class vifm -- vifm +binde = $supMod, f, exec, wezterm start --class file_manager -- vifm ## Workspace 3 - Editors -binde = $supMod, e, exec, emacsclient -c -a emacs -binde = $supMod, n, exec, com.notesnook.Notesnook +binde = $supMod, e, exec, neovide --neovim-bin $HOME/.local/bin/lvim ## Workspace 4 - Chat -binde = $supMod, c, exec, org.signal.Signal +binde = $supMod, c, exec, signal-desktop ## Workspace 5 - Audio binde = $supMod, m, exec, wezterm start --class music_player -- cmus ## Workspace 9 - Games -binde = $supMod, g, exec, org.libretro.RetroArch +binde = $supMod, g, exec, retroarch ## Workspace 10 - Extras -binde = $supMod, p, exec, org.keepassxc.KeePassXC +binde = $supMod, p, exec, keepassxc ################################## ### end___ _____ _____ ____ ### diff --git a/user/.config/lvim/config.lua b/user/.config/lvim/config.lua new file mode 100644 index 000000000..73bdc512f --- /dev/null +++ b/user/.config/lvim/config.lua @@ -0,0 +1,129 @@ +-- neovide options +vim.o.guifont = "mononoki Nerd Font:h12" +vim.g.neovide_hide_mouse_when_typing = true +vim.g.neovide_input_macos_alt_is_meta = true +vim.g.neovide_hide_mouse_when_typing = false +vim.g.neovide_refresh_rate = 60 +vim.g.neovide_refresh_rate_idle = 5 +vim.g.neovide_no_idle = true +vim.g.neovide_confirm_quit = true +vim.g.neovide_input_use_logo = true + +vim.g.neovide_cursor_antialiasing = true +vim.g.neovide_cursor_animate_in_insert_mode = true +vim.g.neovide_cursor_vfx_mode = "pixiedust" +vim.g.neovide_cursor_vfx_particle_speed = 20.0 + +vim.g.neovide_padding_top = 0 +vim.g.neovide_padding_bottom = 0 +vim.g.neovide_padding_right = 0 +vim.g.neovide_padding_left = 0 + +-- Helper function for transparency formatting +local alpha = function() + return string.format("%x", math.floor(255 * (vim.g.transparency or 0.9))) +end +vim.g.neovide_transparency = 0.9 +vim.g.transparency = 0.9 +vim.g.neovide_background_color = "#1d2021" .. alpha() + +-- nvim options +vim.opt.shiftwidth = 4 +vim.opt.tabstop = 4 +vim.opt.relativenumber = true +vim.cmd('autocmd FileType markdown setlocal nospell') +vim.opt.wrap = true -- wrap lines +vim.opt.spell = false +vim.o.shell = '/usr/bin/fish' +vim.o.autochdir = true +vim.cmd('autocmd BufEnter * lcd %:p:h') + +-- general +lvim.use_icons = true +lvim.log.level = "info" +lvim.format_on_save = { + enabled = true, + pattern = "*.lua", + timeout = 1000, +} + +-- change theme settings +lvim.colorscheme = "gruvbox" +lvim.transparent_window = false +lvim.builtin.alpha.active = true +lvim.builtin.alpha.mode = "dashboard" +lvim.builtin.terminal.active = true +lvim.builtin.nvimtree.setup.view.side = "left" +lvim.builtin.nvimtree.setup.renderer.icons.show.git = false + +-- automatically install missing parsers when entering buffer +lvim.builtin.treesitter.auto_install = true + +-- additional Plugins +lvim.plugins = { + { "lunarvim/colorschemes" }, + { "ellisonleao/gruvbox.nvim" }, + { "puremourning/vimspector" }, + { "SirVer/ultisnips" }, + { "CRAG666/code_runner.nvim" }, +} + +-- configuring colorscheme +require("gruvbox").setup({ + undercurl = true, + underline = true, + bold = false, + italic = { + strings = true, + comments = true, + operators = false, + folds = true, + }, + strikethrough = true, + invert_selection = false, + invert_signs = false, + invert_tabline = false, + invert_intend_guides = false, + inverse = true, -- invert background for search, diffs, statuslines and errors + contrast = "hard", -- can be "hard", "soft" or empty string + palette_overrides = {}, + overrides = {}, + dim_inactive = false, + transparent_mode = false, +}) + +-- vimspector options +vim.g.vimspector_enable_mappings = 'HUMAN' +vim.g.vimspector_enable_mappings_for_mode = { + [''] = { 'n', 'v' }, +} + +-- code runner options +require('code_runner').setup({ + filetype = { + java = { + "cd $dir &&", + "javac $fileName &&", + "java $fileNameWithoutExt" + }, + python = "python3 -u", + typescript = "deno run", + rust = { + "cd $dir &&", + "rustc $fileName &&", + "$dir/$fileNameWithoutExt" + }, + cs = { + "cd '$dir' &&", + "dotnet run" + } + }, +}) + +lvim.keys.normal_mode["r"] = ":RunCode" +lvim.keys.normal_mode["rf"] = ":RunFile" +lvim.keys.normal_mode["rft"] = ":RunFile tab" +lvim.keys.normal_mode["rp"] = ":RunProject" +lvim.keys.normal_mode["rc"] = ":RunClose" +lvim.keys.normal_mode["crf"] = ":CRFiletype" +lvim.keys.normal_mode["crp"] = ":CRProjects" diff --git a/user/.config/neofetch/config.conf b/user/.config/neofetch/config.conf new file mode 100644 index 000000000..6365d291f --- /dev/null +++ b/user/.config/neofetch/config.conf @@ -0,0 +1,118 @@ +print_info() { + prin " " + prin "┌─────────\n Hardware Information \n─────────┐" + info " ​ ​ 󰟀 " model + info " ​ ​ 󰍛 " cpu + info " ​ ​ 󰘚 " gpu + info " ​ ​ 󰍛 " memory + info " ​ ​ 󱑆 " uptime + prin "├─────────\n Software Information \n─────────┤" + info " ​ ​ 󰌽 " distro + info " ​ ​  " kernel + info " ​ ​ 󰏖 " packages + info " ​ ​ 󰧨 " wm + info " ​ ​ 󰆍 " shell + info " ​ ​ 󰉼 " theme + info " ​ ​  " icons + info " ​ ​ 󰝚 " song + # [[ "$player" ]] && prin "Music Player" "$player" +# info " ​ ​  " local_ip +# info " ​ ​  " public_ip +# info " ​ ​  " locale # This only works on glibc systems. + prin "└───────────────────────────────────────┘" + info cols +prin "\n \n \n \n \n ${cl3} \n \n ${cl5} \n \n ${cl2} \n \n ${cl6} \n \n ${cl4} \n \n ${cl1} \n \n ${cl7} \n \n ${cl0}" +} + +kernel_shorthand="on" +distro_shorthand="off" +os_arch="off" +uptime_shorthand="on" +memory_percent="on" +package_managers="on" +shell_path="off" +shell_version="on" +speed_type="bios_limit" +speed_shorthand="on" +cpu_brand="off" +cpu_speed="off" +cpu_cores="logical" +cpu_temp="off" +gpu_brand="off" +gpu_type="all" +refresh_rate="on" +gtk_shorthand="on" +gtk2="on" +gtk3="on" +public_ip_host="http://ident.me" +public_ip_timeout=2 +disk_show=('/') +music_player="cmus" +song_format="%artist% - %title%" +song_shorthand="off" +colors=(distro) +bold="on" +underline_enabled="on" +underline_char="-" +separator="  " +color_blocks="off" +block_range=(0 15) # Colorblocks + +# Colors for custom colorblocks +magenta="\033[1;35m" +green="\033[1;32m" +white="\033[1;37m" +blue="\033[1;34m" +red="\033[1;31m" +black="\033[1;40;30m" +yellow="\033[1;33m" +cyan="\033[1;36m" +reset="\033[0m" +bgyellow="\033[1;43;33m" +bgwhite="\033[1;47;37m" +cl0="${reset}" +cl1="${magenta}" +cl2="${green}" +cl3="${white}" +cl4="${blue}" +cl5="${red}" +cl6="${yellow}" +cl7="${cyan}" +cl8="${black}" +cl9="${bgyellow}" +cl10="${bgwhite}" + +block_width=4 +block_height=1 + +bar_char_elapsed="-" +bar_char_total="=" +bar_border="on" +bar_length=15 +bar_color_elapsed="distro" +bar_color_total="distro" + +cpu_display="on" +memory_display="on" +battery_display="on" +disk_display="on" + +image_backend="chafa" +image_source="$HOME/.config/neofetch/img1.png" +image_size="320px" +image_loop="off" + +aascii_distro="auto" +ascii_colors=(distro) +ascii_bold="on" + +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" +crop_mode="normal" +crop_offset="center" + +gap=2 + +yoffset=0 +xoffset=0 + +stdout="off" diff --git a/user/.config/neofetch/img1.png b/user/.config/neofetch/img1.png new file mode 100644 index 0000000000000000000000000000000000000000..876a1bb3f94fad2a383b0067ecb1bba08a912dc7 GIT binary patch literal 66730 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 Oq^E79Rj*+m@qYlCSjjp7 literal 0 HcmV?d00001 diff --git a/user/.config/qutebrowser/bookmarks/urls b/user/.config/qutebrowser/bookmarks/urls new file mode 100644 index 000000000..728019a0f --- /dev/null +++ b/user/.config/qutebrowser/bookmarks/urls @@ -0,0 +1,21 @@ +https://mail.google.com/ gmail +https://mail.tutanota.com/ tutanota +https://mail.proton.me/ proton-mail +https://outlook.live.com/mail outlook +https://odysee.com/ odysee +https://inv.vern.cc/ youtube +https://https://beatbump.io/ youtube-music +https://fosstodon.org/ mastodon +https://beehaw.org/ beehaw +https://pixelfed.social/ pixelfed +https://github.com/ github +https://codeberg.org/ codeberg +https://app.element.io/ element +https://app.revolt.chat/ revolt +https://web.whatsapp.com/ whatsapp +https://outlook.office.com/ intec-correo +https://campusvirtual.intec.edu.do/ intec-aula-virtual +https://procesos.intec.edu.do/ intec-procesos +https://amazon.com/ amazon +https://mega.nz/ mega +https://drive.google.com/drive/my-drive google-drive diff --git a/user/.config/qutebrowser/config.py b/user/.config/qutebrowser/config.py new file mode 100644 index 000000000..7a50a7c4e --- /dev/null +++ b/user/.config/qutebrowser/config.py @@ -0,0 +1,248 @@ +## ____ __ +## / __ \_________ _/ /_____ +## / / / / ___/ __ `/ //_/ _ \ +## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) +## /_____/_/ \__,_/_/|_|\___/ My custom qutebrowser config +## + +# NOTE: config.py is intended for advanced users who are comfortable +# with manually migrating the config file on qutebrowser upgrades. If +# you prefer, you can also configure qutebrowser using the +# :set/:bind/:config-* commands without having to write a config.py +# file. +# +# Documentation: +# qute://help/configuring.html +# qute://help/settings.html + +# Uncomment this to still load settings configured via autoconfig.yml +# config.load_autoconfig() +# Or uncomment this line to load settings from config.py +config.load_autoconfig(False) + +# Aliases for commands. The keys of the given dictionary are the +# aliases, while the values are the commands they map to. +# Type: Dict +c.aliases = {'q': 'quit', 'w': 'session-save', 'wq': 'quit --save'} + +# Setting dark mode +#config.set("colors.webpage.darkmode.enabled", True) + +# Which cookies to accept. With QtWebEngine, this setting also controls +# other features with tracking capabilities similar to those of cookies; +# including IndexedDB, DOM storage, filesystem API, service workers, and +# AppCache. Note that with QtWebKit, only `all` and `never` are +# supported as per-domain values. Setting `no-3rdparty` or `no- +# unknown-3rdparty` per-domain on QtWebKit will have the same effect as +# `all`. +# Type: String +# Valid values: +# - all: Accept all cookies. +# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail. +# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty. +# - never: Don't accept cookies at all. +config.set('content.cookies.accept', 'all', 'chrome-devtools://*') + +# Which cookies to accept. With QtWebEngine, this setting also controls +# other features with tracking capabilities similar to those of cookies; +# including IndexedDB, DOM storage, filesystem API, service workers, and +# AppCache. Note that with QtWebKit, only `all` and `never` are +# supported as per-domain values. Setting `no-3rdparty` or `no- +# unknown-3rdparty` per-domain on QtWebKit will have the same effect as +# `all`. +# Type: String +# Valid values: +# - all: Accept all cookies. +# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail. +# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty. +# - never: Don't accept cookies at all. +config.set('content.cookies.accept', 'all', 'devtools://*') + +# User agent to send. The following placeholders are defined: * +# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: +# The underlying WebKit version (set to a fixed value with +# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for +# QtWebEngine. * `{qt_version}`: The underlying Qt version. * +# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for +# QtWebEngine. * `{upstream_browser_version}`: The corresponding +# Safari/Chrome version. * `{qutebrowser_version}`: The currently +# running qutebrowser version. The default value is equal to the +# unchanged user agent of QtWebKit/QtWebEngine. Note that the value +# read from JavaScript is always the global value. With QtWebEngine +# between 5.12 and 5.14 (inclusive), changing the value exposed to +# JavaScript requires a restart. +# Type: FormatString +config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}', 'https://web.whatsapp.com/') + +# User agent to send. The following placeholders are defined: * +# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: +# The underlying WebKit version (set to a fixed value with +# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for +# QtWebEngine. * `{qt_version}`: The underlying Qt version. * +# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for +# QtWebEngine. * `{upstream_browser_version}`: The corresponding +# Safari/Chrome version. * `{qutebrowser_version}`: The currently +# running qutebrowser version. The default value is equal to the +# unchanged user agent of QtWebKit/QtWebEngine. Note that the value +# read from JavaScript is always the global value. With QtWebEngine +# between 5.12 and 5.14 (inclusive), changing the value exposed to +# JavaScript requires a restart. +# Type: FormatString +config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://accounts.google.com/*') + +# User agent to send. The following placeholders are defined: * +# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: +# The underlying WebKit version (set to a fixed value with +# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for +# QtWebEngine. * `{qt_version}`: The underlying Qt version. * +# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for +# QtWebEngine. * `{upstream_browser_version}`: The corresponding +# Safari/Chrome version. * `{qutebrowser_version}`: The currently +# running qutebrowser version. The default value is equal to the +# unchanged user agent of QtWebKit/QtWebEngine. Note that the value +# read from JavaScript is always the global value. With QtWebEngine +# between 5.12 and 5.14 (inclusive), changing the value exposed to +# JavaScript requires a restart. +# Type: FormatString +config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36', 'https://*.slack.com/*') + +# User agent to send. The following placeholders are defined: * +# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: +# The underlying WebKit version (set to a fixed value with +# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for +# QtWebEngine. * `{qt_version}`: The underlying Qt version. * +# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for +# QtWebEngine. * `{upstream_browser_version}`: The corresponding +# Safari/Chrome version. * `{qutebrowser_version}`: The currently +# running qutebrowser version. The default value is equal to the +# unchanged user agent of QtWebKit/QtWebEngine. Note that the value +# read from JavaScript is always the global value. With QtWebEngine +# between 5.12 and 5.14 (inclusive), changing the value exposed to +# JavaScript requires a restart. +# Type: FormatString +config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://docs.google.com/*') + +# User agent to send. The following placeholders are defined: * +# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: +# The underlying WebKit version (set to a fixed value with +# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for +# QtWebEngine. * `{qt_version}`: The underlying Qt version. * +# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for +# QtWebEngine. * `{upstream_browser_version}`: The corresponding +# Safari/Chrome version. * `{qutebrowser_version}`: The currently +# running qutebrowser version. The default value is equal to the +# unchanged user agent of QtWebKit/QtWebEngine. Note that the value +# read from JavaScript is always the global value. With QtWebEngine +# between 5.12 and 5.14 (inclusive), changing the value exposed to +# JavaScript requires a restart. +# Type: FormatString +config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://drive.google.com/*') + +# Load images automatically in web pages. +# Type: Bool +config.set('content.images', True, 'chrome-devtools://*') + +# Load images automatically in web pages. +# Type: Bool +config.set('content.images', True, 'devtools://*') + +# Enable JavaScript. +# Type: Bool +config.set('content.javascript.enabled', True, 'chrome-devtools://*') + +# Enable JavaScript. +# Type: Bool +config.set('content.javascript.enabled', True, 'devtools://*') + +# Enable JavaScript. +# Type: Bool +config.set('content.javascript.enabled', True, 'chrome://*/*') + +# Enable JavaScript. +# Type: Bool +config.set('content.javascript.enabled', True, 'qute://*/*') + +# Directory to save downloads to. If unset, a sensible OS-specific +# default is used. +# Type: Directory +c.downloads.location.directory = '~/Temporal/Downloads' + +# When to show the tab bar. +# Type: String +# Valid values: +# - always: Always show the tab bar. +# - never: Always hide the tab bar. +# - multiple: Hide the tab bar if only one tab is open. +# - switching: Show the tab bar when switching tabs. +c.tabs.show = 'always' + +# Setting default page for when opening new tabs or new windows with +# commands like :open -t and :open -w . +c.url.default_page = 'https://start.duckduckgo.com' +c.url.start_pages = 'https://start.duckduckgo.com' + +# Search engines which can be used via the address bar. Maps a search +# engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}` +# placeholder. The placeholder will be replaced by the search term, use +# `{{` and `}}` for literal `{`/`}` braces. The following further +# placeholds are defined to configure how special characters in the +# search terms are replaced by safe characters (called 'quoting'): * +# `{}` and `{semiquoted}` quote everything except slashes; this is the +# most sensible choice for almost all search engines (for the search +# term `slash/and&` this placeholder expands to `slash/and%26amp`). +# * `{quoted}` quotes all characters (for `slash/and&` this +# placeholder expands to `slash%2Fand%26amp`). * `{unquoted}` quotes +# nothing (for `slash/and&` this placeholder expands to +# `slash/and&`). The search engine named `DEFAULT` is used when +# `url.auto_search` is turned on and something else than a URL was +# entered to be opened. Other search engines can be used by prepending +# the search engine name to the search term, e.g. `:open google +# qutebrowser`. +# Type: Dict +c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?q={}', 'aw': 'https://wiki.archlinux.org/?search={}', 'ub': 'https://www.urbandictionary.com/define.php?term={}', 'wiki': 'https://en.wikipedia.org/wiki/{}'} + +# Default font families to use. Whenever "default_family" is used in a +# font setting, it's replaced with the fonts listed here. If set to an +# empty value, a system-specific monospace default is used. +# Type: List of Font, or Font +c.fonts.default_family = '"mononoki Nerd Font"' + +# Default font size to use. Whenever "default_size" is used in a font +# setting, it's replaced with the size listed here. Valid values are +# either a float value with a "pt" suffix, or an integer value with a +# "px" suffix. +# Type: String +c.fonts.default_size = '10pt' + +# Font used in the completion widget. +# Type: Font +c.fonts.completion.entry = '10pt "mononoki Nerd Font"' + +# Font used for the debugging console. +# Type: Font +c.fonts.debug_console = '10pt "mononoki Nerd Font"' + +# Font used for prompts. +# Type: Font +c.fonts.prompts = 'default_size sans-serif' + +# Font used in the statusbar. +# Type: Font +c.fonts.statusbar = '10pt "mononoki Nerd Font"' + +config.source('gruvbox.py') + +# Bindings for normal mode +config.bind('M', 'hint links spawn mpv {hint-url}') +config.bind('Z', 'hint links spawn st -e youtube-dl {hint-url}') +config.bind('t', 'set-cmd-text -s :open -t') +config.bind('xb', 'config-cycle statusbar.show always never') +config.bind('xt', 'config-cycle tabs.show always never') +config.bind('xx', 'config-cycle statusbar.show always never;; config-cycle tabs.show always never') + +# configs +config.set('content.notifications.enabled', False) +config.set('content.blocking.method', 'both') +config.set('content.blocking.enabled', True) +config.set('content.autoplay', False) +config.set('content.register_protocol_handler', False) diff --git a/user/.config/qutebrowser/gruvbox.py b/user/.config/qutebrowser/gruvbox.py new file mode 100644 index 000000000..e800f689f --- /dev/null +++ b/user/.config/qutebrowser/gruvbox.py @@ -0,0 +1,333 @@ +# gruvbox dark hard qutebrowser theme by Florian Bruhin +# +# Originally based on: +# base16-qutebrowser (https://github.com/theova/base16-qutebrowser) +# Base16 qutebrowser template by theova and Daniel Mulford +# Gruvbox dark, hard scheme by Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) + +bg0_hard = "#1d2021" +bg0_soft = '#32302f' +bg0_normal = '#282828' + +bg0 = bg0_normal +bg1 = "#3c3836" +bg2 = "#504945" +bg3 = "#665c54" +bg4 = "#7c6f64" + +fg0 = "#fbf1c7" +fg1 = "#ebdbb2" +fg2 = "#d5c4a1" +fg3 = "#bdae93" +fg4 = "#a89984" + +bright_red = "#fb4934" +bright_green = "#b8bb26" +bright_yellow = "#fabd2f" +bright_blue = "#83a598" +bright_purple = "#d3869b" +bright_aqua = "#8ec07c" +bright_gray = "#928374" +bright_orange = "#fe8019" + +dark_red = "#cc241d" +dark_green = "#98971a" +dark_yellow = "#d79921" +dark_blue = "#458588" +dark_purple = "#b16286" +dark_aqua = "#689d6a" +dark_gray = "#a89984" +dark_orange = "#d65d0e" + +### Completion + +# Text color of the completion widget. May be a single color to use for +# all columns or a list of three colors, one for each column. +c.colors.completion.fg = [fg1, bright_aqua, bright_yellow] + +# Background color of the completion widget for odd rows. +c.colors.completion.odd.bg = bg0 + +# Background color of the completion widget for even rows. +c.colors.completion.even.bg = c.colors.completion.odd.bg + +# Foreground color of completion widget category headers. +c.colors.completion.category.fg = bright_blue + +# Background color of the completion widget category headers. +c.colors.completion.category.bg = bg1 + +# Top border color of the completion widget category headers. +c.colors.completion.category.border.top = c.colors.completion.category.bg + +# Bottom border color of the completion widget category headers. +c.colors.completion.category.border.bottom = c.colors.completion.category.bg + +# Foreground color of the selected completion item. +c.colors.completion.item.selected.fg = fg0 + +# Background color of the selected completion item. +c.colors.completion.item.selected.bg = bg4 + +# Top border color of the selected completion item. +c.colors.completion.item.selected.border.top = bg2 + +# Bottom border color of the selected completion item. +c.colors.completion.item.selected.border.bottom = c.colors.completion.item.selected.border.top + +# Foreground color of the matched text in the selected completion item. +c.colors.completion.item.selected.match.fg = bright_orange + +# Foreground color of the matched text in the completion. +c.colors.completion.match.fg = c.colors.completion.item.selected.match.fg + +# Color of the scrollbar handle in the completion view. +c.colors.completion.scrollbar.fg = c.colors.completion.item.selected.fg + +# Color of the scrollbar in the completion view. +c.colors.completion.scrollbar.bg = c.colors.completion.category.bg + +### Context menu + +# Background color of disabled items in the context menu. +c.colors.contextmenu.disabled.bg = bg3 + +# Foreground color of disabled items in the context menu. +c.colors.contextmenu.disabled.fg = fg3 + +# Background color of the context menu. If set to null, the Qt default is used. +c.colors.contextmenu.menu.bg = bg0 + +# Foreground color of the context menu. If set to null, the Qt default is used. +c.colors.contextmenu.menu.fg = fg2 + +# Background color of the context menu's selected item. If set to null, the Qt default is used. +c.colors.contextmenu.selected.bg = bg2 + +#Foreground color of the context menu's selected item. If set to null, the Qt default is used. +c.colors.contextmenu.selected.fg = c.colors.contextmenu.menu.fg + +### Downloads + +# Background color for the download bar. +c.colors.downloads.bar.bg = bg0 + +# Color gradient start for download text. +c.colors.downloads.start.fg = bg0 + +# Color gradient start for download backgrounds. +c.colors.downloads.start.bg = bright_blue + +# Color gradient end for download text. +c.colors.downloads.stop.fg = c.colors.downloads.start.fg + +# Color gradient stop for download backgrounds. +c.colors.downloads.stop.bg = bright_aqua + +# Foreground color for downloads with errors. +c.colors.downloads.error.fg = bright_red + +### Hints + +# Font color for hints. +c.colors.hints.fg = bg0 + +# Background color for hints. +c.colors.hints.bg = 'rgba(250, 191, 47, 200)' # bright_yellow + +# Font color for the matched part of hints. +c.colors.hints.match.fg = bg4 + +### Keyhint widget + +# Text color for the keyhint widget. +c.colors.keyhint.fg = fg4 + +# Highlight color for keys to complete the current keychain. +c.colors.keyhint.suffix.fg = fg0 + +# Background color of the keyhint widget. +c.colors.keyhint.bg = bg0 + +### Messages + +# Foreground color of an error message. +c.colors.messages.error.fg = bg0 + +# Background color of an error message. +c.colors.messages.error.bg = bright_red + +# Border color of an error message. +c.colors.messages.error.border = c.colors.messages.error.bg + +# Foreground color of a warning message. +c.colors.messages.warning.fg = bg0 + +# Background color of a warning message. +c.colors.messages.warning.bg = bright_purple + +# Border color of a warning message. +c.colors.messages.warning.border = c.colors.messages.warning.bg + +# Foreground color of an info message. +c.colors.messages.info.fg = fg2 + +# Background color of an info message. +c.colors.messages.info.bg = bg0 + +# Border color of an info message. +c.colors.messages.info.border = c.colors.messages.info.bg + +### Prompts + +# Foreground color for prompts. +c.colors.prompts.fg = fg2 + +# Border used around UI elements in prompts. +c.colors.prompts.border = f'1px solid {bg1}' + +# Background color for prompts. +c.colors.prompts.bg = bg3 + +# Background color for the selected item in filename prompts. +c.colors.prompts.selected.bg = bg2 + +### Statusbar + +# Foreground color of the statusbar. +c.colors.statusbar.normal.fg = fg2 + +# Background color of the statusbar. +c.colors.statusbar.normal.bg = bg0 + +# Foreground color of the statusbar in insert mode. +c.colors.statusbar.insert.fg = bg0 + +# Background color of the statusbar in insert mode. +c.colors.statusbar.insert.bg = dark_aqua + +# Foreground color of the statusbar in passthrough mode. +c.colors.statusbar.passthrough.fg = bg0 + +# Background color of the statusbar in passthrough mode. +c.colors.statusbar.passthrough.bg = dark_blue + +# Foreground color of the statusbar in private browsing mode. +c.colors.statusbar.private.fg = bright_purple + +# Background color of the statusbar in private browsing mode. +c.colors.statusbar.private.bg = bg0 + +# Foreground color of the statusbar in command mode. +c.colors.statusbar.command.fg = fg3 + +# Background color of the statusbar in command mode. +c.colors.statusbar.command.bg = bg1 + +# Foreground color of the statusbar in private browsing + command mode. +c.colors.statusbar.command.private.fg = c.colors.statusbar.private.fg + +# Background color of the statusbar in private browsing + command mode. +c.colors.statusbar.command.private.bg = c.colors.statusbar.command.bg + +# Foreground color of the statusbar in caret mode. +c.colors.statusbar.caret.fg = bg0 + +# Background color of the statusbar in caret mode. +c.colors.statusbar.caret.bg = dark_purple + +# Foreground color of the statusbar in caret mode with a selection. +c.colors.statusbar.caret.selection.fg = c.colors.statusbar.caret.fg + +# Background color of the statusbar in caret mode with a selection. +c.colors.statusbar.caret.selection.bg = bright_purple + +# Background color of the progress bar. +c.colors.statusbar.progress.bg = bright_blue + +# Default foreground color of the URL in the statusbar. +c.colors.statusbar.url.fg = fg4 + +# Foreground color of the URL in the statusbar on error. +c.colors.statusbar.url.error.fg = dark_red + +# Foreground color of the URL in the statusbar for hovered links. +c.colors.statusbar.url.hover.fg = bright_orange + +# Foreground color of the URL in the statusbar on successful load +# (http). +c.colors.statusbar.url.success.http.fg = bright_red + +# Foreground color of the URL in the statusbar on successful load +# (https). +c.colors.statusbar.url.success.https.fg = fg0 + +# Foreground color of the URL in the statusbar when there's a warning. +c.colors.statusbar.url.warn.fg = bright_purple + +### tabs + +# Background color of the tab bar. +c.colors.tabs.bar.bg = bg0 + +# Color gradient start for the tab indicator. +c.colors.tabs.indicator.start = bright_blue + +# Color gradient end for the tab indicator. +c.colors.tabs.indicator.stop = bright_aqua + +# Color for the tab indicator on errors. +c.colors.tabs.indicator.error = bright_red + +# Foreground color of unselected odd tabs. +c.colors.tabs.odd.fg = fg2 + +# Background color of unselected odd tabs. +c.colors.tabs.odd.bg = bg2 + +# Foreground color of unselected even tabs. +c.colors.tabs.even.fg = c.colors.tabs.odd.fg + +# Background color of unselected even tabs. +c.colors.tabs.even.bg = bg3 + +# Foreground color of selected odd tabs. +c.colors.tabs.selected.odd.fg = fg2 + +# Background color of selected odd tabs. +c.colors.tabs.selected.odd.bg = bg0 + +# Foreground color of selected even tabs. +c.colors.tabs.selected.even.fg = c.colors.tabs.selected.odd.fg + +# Background color of selected even tabs. +c.colors.tabs.selected.even.bg = bg0 + +# Background color of pinned unselected even tabs. +c.colors.tabs.pinned.even.bg = bright_green + +# Foreground color of pinned unselected even tabs. +c.colors.tabs.pinned.even.fg = bg2 + +# Background color of pinned unselected odd tabs. +c.colors.tabs.pinned.odd.bg = bright_green + +# Foreground color of pinned unselected odd tabs. +c.colors.tabs.pinned.odd.fg = c.colors.tabs.pinned.even.fg + +# Background color of pinned selected even tabs. +c.colors.tabs.pinned.selected.even.bg = bg0 + +# Foreground color of pinned selected even tabs. +c.colors.tabs.pinned.selected.even.fg = c.colors.tabs.selected.odd.fg + +# Background color of pinned selected odd tabs. +c.colors.tabs.pinned.selected.odd.bg = c.colors.tabs.pinned.selected.even.bg + +# Foreground color of pinned selected odd tabs. +c.colors.tabs.pinned.selected.odd.fg = c.colors.tabs.selected.odd.fg + +# Background color for webpages if unset (or empty to use the theme's +# color). +c.colors.webpage.bg = bg4 + diff --git a/user/.config/rofi/config.rasi b/user/.config/rofi/config.rasi deleted file mode 100644 index a4a28cbc8..000000000 --- a/user/.config/rofi/config.rasi +++ /dev/null @@ -1,104 +0,0 @@ -configuration{ - modi: "run,drun,window"; - lines: 10; - font: "mononoki Nerd Font 14"; - show-icons: true; - icon-theme: "gruvbox-dark-icons-gtk"; - terminal: "alacritty"; - drun-display-format: "{icon} {name}"; - location: 0; - disable-history: false; - hide-scrollbar: true; - display-drun: " 󰀻 Apps "; - display-run: "  Run "; - display-window: " 󰖯 Window "; - display-Network: " 󰤨 Network "; - sidebar-mode: true; - dpi: 100; -} - -@theme "gruvbox-dark" - -element-text, element-icon , mode-switcher { - background-color: inherit; - text-color: inherit; -} - -window { - height: 380; - width: 1000; - border: 3px; - border-color: @border-col; - background-color: @bg-col; -} - -mainbox { - background-color: @bg-col; -} - -inputbar { - children: [prompt,entry]; - background-color: @bg-col; - border-radius: 5px; - padding: 2px; -} - -prompt { - background-color: @red; - padding: 3px; - text-color: @bg-col; - border-radius: 3px; - margin: 20px 0px 0px 20px; -} - -textbox-prompt-colon { - expand: false; - str: ":"; -} - -entry { - padding: 6px; - margin: 20px 0px 0px 10px; - text-color: @fg-col; - background-color: @bg-col; -} - -listview { - border: 0px 0px 0px; - padding: 2px 2px 2px; - margin: 10px 20px 0px 20px; - columns: 1; - background-color: @bg-col; -} - -element { - padding: 5px; - background-color: @bg-col; - text-color: @grey; -} - -element-icon { - size: 28px; -} - -element selected { - background-color: @selected-col; - text-color: @fg-col2; -} - -mode-switcher { - spacing: 0; - } - -button { - padding: 10px; - background-color: @bg-col; - text-color: @inactive; - vertical-align: 0.5; - horizontal-align: 0.5; -} - -button selected { - background-color: @selected-col; - text-color: @red; -} diff --git a/user/.config/rofi/scripts/rofi_power b/user/.config/rofi/scripts/rofi_power deleted file mode 100755 index 3f5658903..000000000 --- a/user/.config/rofi/scripts/rofi_power +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash - -# ***This script was made by Clay Gomera (Drake)*** -# - Description: A simple power menu rofi script -# - Dependencies: rofi, power-profiles-daemon, swaylock -# - -## MENU PROMPT ## -menu="rofi -dmenu -i -p" - -## CURRENT WALLPAPER FOR LOCKSCREEN ## -currwall=$(tail --l 1 "$HOME/.wbg" | awk '{print $3}') - -## OPTIONS ## -option1=" Logout" -option2=" Reboot" -option3=" Power off" -option4="󰒲 Suspend" -option5=" Lock" -option6=" Change power profile" -option7=" Cancel" -options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6\n$option7" - -## POWER PROFILE OPTIONS ## -pwr1="󰓅 Performance" -pwr2="󰾅 Balanced" -pwr3="󰾆 Power Saver" -pwr4=" Cancel" -pwrs="$pwr1\n$pwr2\n$pwr3\n$pwr4" - -## MAIN ACTION COMMAND ## -action=$(echo -e "$options" | $menu "  Power Options ") -case "$action" in - $option1) - pkill Hyprland;; - $option2) - systemctl reboot || loginctl reboot;; - $option3) - systemctl poweroff || loginctl poweroff;; - $option4) - swaylock -i "$currwall" & - sleep 0.1 - systemctl suspend;; - $option5) - swaylock -i "$currwall";; - $option6) - currentpwr=$(powerprofilesctl get) - if [ "$currentpwr" = "performance" ]; then - currentpwr="$pwr1" - elif [ "$currentpwr" = "balanced" ]; then - currentpwr="$pwr2" - elif [ "$currentpwr" = "power-saver" ]; then - currentpwr="$pwr3" - fi - pwraction=$(echo -e "$pwrs" | $menu "  Power Profile Menu - Currently set to: ${currentpwr} ") - case "$pwraction" in - $pwr1*) - powerprofilesctl set performance && notify-send "Power profile switched to performance";; - $pwr2*) - powerprofilesctl set balanced && notify-send "Power profile switched to balanced";; - $pwr3*) - powerprofilesctl set power-saver && notify-send "Power profile switched to power saver";; - $pwr4*) - exit 0 - esac;; - $option7) - exit 0 -esac diff --git a/user/.config/rofi/scripts/rofi_scrot b/user/.config/rofi/scripts/rofi_scrot deleted file mode 100755 index f57c257be..000000000 --- a/user/.config/rofi/scripts/rofi_scrot +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env bash - -# ***This script was made by Clay Gomera (Drake)*** -# - Description: A simple screenshot menu rofi script -# - Dependencies: rofi, grim, slurp, wf-recorder -# - -# screenshot directory -scrdir="$HOME/Pictures/Screenshots" -mkdir -p "$scrdir" -cd "$scrdir" || exit 1 -filename=$(date "+%d-%m-%Y_%H:%M:%S") - -# options array -option1=" Capture the screen" -option2=" Capture region" -option3="󰕧 Record the screen" -option4="󰕩 Record region" -option5="󰕧 Record the screen and audio" -option6="Exit" -options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6" - -# countdown function -countdown() { - notify-send "Screenshot" "Executing in 3 seconds" -t 1000 - sleep 1 - notify-send "Screenshot" "Executing in 2 seconds" -t 1000 - sleep 1 - notify-send "Screenshot" "Executing in 1 seconds" -t 1000 - sleep 2 -} - -# show the help output with --help or -h arguments -if [[ $1 == '--help' ]] || [[ $1 = '-h' ]] - then - echo ### rofi-screenshot - echo USAGE: rofi-screenshot [OPTION] - echo \(no option\) - echo " show the screenshot menu" - echo -s, --stop - echo " stop recording" - echo -h, --help - echo " this screen" - exit 1 -fi - -# stop recording with -s or --stop arguments -if [[ $1 = '--stop' ]] || [[ $1 = '-s' ]] - then - killall -s SIGINT wf-recorder - exit 1 -fi - -# run the selected command -choice=$(echo -e "$options" | rofi -dmenu -p " 󰄀 Screenshot " ) -case $choice in - $option1) - countdown - grim "$filename.jpg" - notify-send "Screenshot" "Screenshot saved to $scrdir" - ;; - $option2) - notify-send "Screenshot" "Select a region to capture" - grim -g "$(slurp)" "$filename.jpg" - notify-send "Screenshot" "Region saved to $scrdir" - ;; - $option3) - countdown - wf-recorder --codec=h264_vaapi -d /dev/dri/renderD128 -f "$filename.mp4" - notify-send "Screenshot" "Recording saved to $scrdir" - ;; - $option4) - notify-send "Screenshot" "Select a region to record" - wf-recorder --codec=h264_vaapi -d /dev/dri/renderD128 -g "$(slurp)" -f "$filename.mp4" - notify-send "Screenshot" "Recording saved to $scrdir" - ;; - $option5) - devices=$(pactl list sources | grep "Name" | awk '{print $2}') - chosendevice=$(echo -e "$devices" | rofi -dmenu -p " Select audio input ") - if [ "$chosendevice" ]; then - device="$chosendevice" - countdown - wf-recorder --audio="$device" --codec=h264_vaapi -d /dev/dri/renderD128 -f "$filename.mp4" - else - notify-send "Please select an audio input device" - exit 1 - fi - notify-send "Screenshot" "Recording saved to $scrdir" - ;; - $option6) - exit 0 - ;; -esac diff --git a/user/.config/rofi/scripts/rofi_wall b/user/.config/rofi/scripts/rofi_wall deleted file mode 100755 index 2f4147398..000000000 --- a/user/.config/rofi/scripts/rofi_wall +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# ***This script was made by Clay Gomera (Drake)*** -# - Description: A simple wallpaper changer script -# - Dependencies: rofi, fd, swaybg - -## MENU PROMPT ## -menu="rofi -dmenu -i -p" - -## WALLPAPER DIRECTORY ## -walldir="$HOME/Pictures/Wallpapers" # wallpapers folder, change it to yours - -## SELECT PICTURE ## -cd "$walldir" || exit 1 -wallpaper=$(fd -p "$walldir" | $menu " 󰋩 Wallpaper Selector ") -if [ "$wallpaper" ]; then - chosenwall=$wallpaper -else - exit 0 -fi - -swww img "$chosenwall" -echo -e "#!/bin/sh\nswww img $walldir/$chosenwall" > "$HOME/.wbg" -chmod +x "$HOME/.wbg" -exit 0 diff --git a/user/.config/rofi/scripts/rofi_wifi b/user/.config/rofi/scripts/rofi_wifi deleted file mode 100755 index 92eb351c7..000000000 --- a/user/.config/rofi/scripts/rofi_wifi +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env bash - -# ***This script was made by Clay Gomera (Drake)*** -# - Description: A simple wifi rofi script -# - Dependencies: rofi, NetworkManager, io.elementary.capnet-assist - -## MENU PROMPT ## -menu="rofi -dmenu -i -p" - -## MAIN OPTIONS ## -option1=" Turn on WiFi" -option2=" Turn off WiFi" -option3="󱛅 Disconnect WiFi" -option4="󱛃 Connect WiFi" -option5="󱛆 Setup captive portal" -option6=" Exit" -options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6" - -## GRAB WIFI INTERFACE ## -wlan=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f1 | head -1) - -## TURN OFF WIFI FUNCTION ## -turnoff() { - nmcli radio wifi off - notify-send "WiFi has been turned off" -} - -## TURN ON WIFI FUNCTION ## -turnon() { - nmcli radio wifi on - notify-send "WiFi has been turned on" -} - -## DISCONNECT WIFI FUNCTION ## -disconnect() { - nmcli device disconnect "$wlan" - sleep 1 - constate=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f3 | head -1) - if [ "$constate" = "disconnected" ]; then - notify-send "WiFi has been disconnected" - fi -} - -## CONNECT FUNCTION ## -connect() { - notify-send "Scannig networks, please wait" - sleep 1 - bssid=$(nmcli device wifi list | sed -n '1!p' | cut -b 9- | $menu " Select a Wifi Network  " | cut -d' ' -f1) -} - -## SELECT PASSWORD FUNCTION ## -password() { - pass=$(echo " " | $menu " Enter Password  " -password) -} - -## MAIN CONNECTION COMMAND ## -action() { - nmcli device wifi connect "$bssid" password "$pass" || nmcli device wifi connect "$bssid" -} - -## CHECKING IF WIFI IS WORKING -check() { - notify-send "Checking if connection was successful" - sleep 1 - currentwfi=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f4 | head -1) - if ping -q -c 2 -W 2 google.com >/dev/null; then - notify-send "You are now connected to $currentwfi and internet is working properly" - else - notify-send "Your internet is not working :(" - fi -} - -## MAIN ACTION COMMANDS ## -cases=$(echo -e "$options" | $menu "  Wifi Settings " ) -if [ -n "$cases" ]; then - case "$cases" in - $option1) - turnon;; - $option2) - turnoff;; - $option3) - disconnect;; - $option4) - connect; - if [ -n "$bssid" ]; then - password; - action; - check; - else - exit 0; - fi;; - $option5) - io.elementary.capnet-assist;; - $option6) - exit 0; - esac -else - exit 0; -fi diff --git a/user/.config/rofi/themes/gruvbox-dark.rasi b/user/.config/rofi/themes/gruvbox-dark.rasi deleted file mode 100644 index 15ffb4d0b..000000000 --- a/user/.config/rofi/themes/gruvbox-dark.rasi +++ /dev/null @@ -1,16 +0,0 @@ -* { - bg-col: #1d2021; - bg-col-light: #282828; - border-col: #504945; - selected-col: #3c3836; - blue: #458588; - fg-col: #ebdbb2; - fg-col2: #ebdbb2; - grey: #928374; - width: 600; - selected: #ebdbb2; - red: #fb4934; - green: #98971a; - empty: #3c3836; - inactive: #928374; -} diff --git a/user/.config/tut/config.toml b/user/.config/tut/config.toml new file mode 100644 index 000000000..ead2516e6 --- /dev/null +++ b/user/.config/tut/config.toml @@ -0,0 +1,1284 @@ +# Configuration file for tut + +[general] +# What editor to use. TUT_USE_INTERNAL will use the editor that comes with tut. +# If you want you can set this to $EDITOR to use your environment variable or +# vim if you want to specify the program directly. +# default="TUT_USE_INTERNAL" +editor="~/.local/bin/lvim" + +# You need to press yes in a confirmation dialog before favoriting, boosting, +# etc. +# default=true +confirmation=true + +# Enable mouse support in tut. +# default=false +mouse-support=false + +# The date format to be used. See https://pkg.go.dev/time#pkg-constants +# default="2006-01-02 15:04" +date-format="2006-01-02 15:04" + +# Format for dates the same day. See date-format for more info. +# default="15:04" +date-tody-format="15:04" + +# This displays relative dates instead for statuses that are one day or older +# the output is 1y2m1d (1 year 2 months and 1 day) +# +# The value is an integer +# -1 = don't use relative dates +# 0 = always use relative dates, except for dates < 1 day +# 1 - ∞ = number of days to use relative dates +# +# Value: 28 will display a relative date for toots that are between 1-28 days +# old. Otherwise it will use the short or long format. +# default=-1 +date-relative=-1 + +# The max with of text before it wraps when displaying a toot. +# default=0 +max-width=0 + +# The placement of your panes. +# valid: left, right, top, bottom +# default="left" +list-placement="left" + +# How should panes be split? +# valid: row, column +# default="row" +list-split="row" + +# The proportion of panes vs. content. 1 on this and 3 on content below results +# in content taking up 3 times more space. +# default=1 +list-proportion=1 + +# See previous. +# default=2 +content-proportion=2 + +# Hide notifications of this type in your notification timelines. +# valid: mention, status, boost, follow, follow_request, favorite, poll, edit +# default=[] +notifications-to-hide=[] + +# Always include a quote of the message you're replying to. +# default=false +quote-reply=false + +# If you want to show icons in timelines. +# default=true +show-icons=true + +# If you only want to you the letter of keys instead of the full hint. +# default=false +short-hints=false + +# If you want to display the filter that filtered a toot. +# default=true +show-filter-phrase=true + +# Display a message in the commandbar on how to access the help text. +# default=true +show-help=true + +# Always jump to the newest post. May ruin your reading experience. +# default=false +stick-to-top=false + +# Display the username of the person being boosted instead of the person that +# boosted. +# default=false +show-boosted-user=false + +# Open a new pane when you run a command like :timeline home. +# default=true +commands-in-new-pane=true + +# Set a default name for the timeline if the name is empty. So if you run :tag +# linux the title of the pane will be set to #linux +# default=true +dynamic-timeline-name=true + +# 0 = No terminal title +# 1 = Show title in terminal and top bar +# 2 = Only show terminal title, and no top bar in tut +# 3 = No terminal title and no top bar in tut. +# valid: 0, 1, 2, 3 +# default=0 +terminal-title=0 + +# If you don't want the whole UI to update, and only update the text content you +# can disable this. This will lead to some artifacts being left on the screen +# when emojis are present. +# default=true +redraw-ui=true + +# The leader is used as a shortcut to run commands as you can do in Vim. By +# default this is disabled and you enable it by setting a key here. It can only +# consist of one char, so set it to something like a comma. +# default="" +leader-key="" + +# Number of milliseconds before the leader command resets. So if you tap the +# leader-key by mistake or are to slow it empties all the input after X +# milliseconds. +# default=1000 +leader-timeout=1000 + +# [[general.timelines]] +# Timelines adds panes of feeds. You can customize the number of feeds, what +# they should show and the key to activate them. + +# --- START OF EXAMPLE --- +# [[general.timelines]] +# name="home" +# type="home" +# hide-boosts=false +# hide-replies=false +# +# [[general.timelines]] +# name="Notifications" +# type="notifications" +# keys=["n", "N"] +# closed=true +# on-creation-closed="new-pane" +# on-focus="focus-self" +# --- END OF EXAMPLE --- + +# The name to display above the timeline +# default="" +# name="" + +# The type of the timeline +# valid: home, direct, local, federated, bookmarks, saved, favorited, notifications, +# lists, mentions, tag +# default="" +# type="" + +# Used for the tag type, so here you set the tag. If you have multiple you +# separate them with a space. +# default="" +# data="" + +# A list of keys to give this timeline focus. See under the input section to +# learn more about keys. +# default=[] +# keys=[] + +# A list of special-keys to give this timeline focus. See under the input +# section to learn more about special-keys. +# default=[] +# special-keys=[] + +# A shortcut to give this timeline focus with your leader-key + this shortcut. +# default="" +# shortcut="" + +# Hide boosts in this timeline. +# default="false" +# hide-boosts="false" + +# Hide replies in this timeline. +# default="false" +# hide-replies="false" + +# Don't open this timeline when you start tut. Use your keys or shortcut to open +# it. +# default="false" +# closed="false" + +# Don't open this timeline when you start tut. Use your keys or shortcut to open +# it. +# valid: new-pane, current-pane +# default="new-pane" +# on-creation-closed="new-pane" + +# Don't open this timeline when you start tut. Use your keys or shortcut to open +# it. +# valid: focus-pane, focus-self +# default="focus-pane" +# on-focus="focus-pane" + +# [[general.leader-actions]] +# You set actions leader-key with one or more leader-actions. +# +# The shortcuts are up to you, but keep them quite short and make sure they +# don't collide. If you have one shortcut that is "f" and an other one that is +# "fav", the one with "f" will always run and "fav" will never run. +# +# Some special actions that requires data to be set: +# pane is special as it's a shortcut for switching between the panes you've set +# under general and they are zero indexed. pane 0 = your first timeline, pane 1 +# = your second and so on. +# list-placement as it takes the argument top, right, bottom or left +# list-split as it takes the argument column or row +# proportions takes the arguments [int] [int], where the first integer is the +# list and the other content, e.g. proportions 1 3. See list-proportion above +# for more information. + +# --- START OF EXAMPLE --- +# [[general.leader-actions]] +# type="close-pane" +# shortcut="q" +# +# [[general.leader-actions]] +# type="list-split" +# data="row" +# shortcut="r" +# +# [[general.leader-actions]] +# type="list-split" +# data="column" +# shortcut="c" +# --- END OF EXAMPLE --- + +# The action you want to run. +# valid: blocking, boosts, clear-notifications, close-pane, compose, edit, favorited, +# favorites, followers, following, history, list-placement, list-split, lists, +# move-pane-left, move-pane-right, move-pane-up, move-pane-down, move-pane-home, +# move-pane-end, muting, newer, pane, preferences, profile, proportions, +# refetch, stick-to-top, tags +# default="" +# type="" + +# Data to pass to the action. +# default="" +# data="" + +# A shortcut to run this action with your leader-key + this shortcut. +# default="" +# shortcut="" + +[media] +# Media files will be removed directly after they've been opened. Some programs +# doesn't like this, so if your media doesn't open, try set this to false. Tut +# will remove all files once you close the program. +# default=true +delete-temp-files=true + +[media.image] +# The program to open images. TUT_OS_DEFAULT equals xdg-open on Linux, open on +# MacOS and start on Windows. +# default="TUT_OS_DEFAULT" +program="nsxiv" + +# Arguments to pass to the program. +# default="" +args="" + +# If the program runs in the terminal set this to true. +# default=false +terminal=false + +# If the program should be called multiple times when there is multiple files. +# If set to false all files will be passed as an argument, but not all programs +# support this. +# default=true +single=true + +# If the files should be passed in reverse order. This will make some programs +# display the files in the correct order. +# default=false +reverse=false + +[media.video] +# The program to open videos. TUT_OS_DEFAULT equals xdg-open on Linux, open on +# MacOS and start on Windows. +# default="TUT_OS_DEFAULT" +program="mpv" + +# Arguments to pass to the program. +# default="" +args="" + +# If the program runs in the terminal set this to true. +# default=false +terminal=false + +# If the program should be called multiple times when there is multiple files. +# If set to false all files will be passed as an argument, but not all programs +# support this. +# default=true +single=true + +# If the files should be passed in reverse order. This will make some programs +# display the files in the correct order. +# default=false +reverse=false + +[media.audio] +# The program to open audio. TUT_OS_DEFAULT equals xdg-open on Linux, open on +# MacOS and start on Windows. +# default="TUT_OS_DEFAULT" +program="TUT_OS_DEFAULT" + +# Arguments to pass to the program. +# default="" +args="" + +# If the program runs in the terminal set this to true. +# default=false +terminal=false + +# If the program should be called multiple times when there is multiple files. +# If set to false all files will be passed as an argument, but not all programs +# support this. +# default=true +single=true + +# If the files should be passed in reverse order. This will make some programs +# display the files in the correct order. +# default=false +reverse=false + +[media.link] +# The program to open links. TUT_OS_DEFAULT equals xdg-open on Linux, open on +# MacOS and start on Windows. +# default="TUT_OS_DEFAULT" +program="TUT_OS_DEFAULT" + +# Arguments to pass to the program. +# default="" +args="" + +# If the program runs in the terminal set this to true. +# default=false +terminal=false + +[desktop-notification] +# Enable notifications when someone follows you. +# default=false +followers=false + +# Enable notifications when one of your toots gets favorited. +# default=false +favorite=false + +# Enable notifications when someone mentions you. +# default=false +mention=false + +# Enable notifications when a post you have interacted with gets edited. +# default=false +update=false + +# Enable notifications when one of your toots gets boosted. +# default=false +boost=false + +# Enable notifications when a poll ends. +# default=false +poll=false + +# Enable notifications for new posts. +# default=false +posts=false + +[open-custom] +# --- START OF EXAMPLE --- +# [[open-custom.programs]] +# program = 'chromium' +# terminal = false +# hint = "[C]hrome" +# keys = ["c", "C"] +# +# [[open-custom.programs]] +# program = 'imv' +# terminal = false +# hint = "[I]mv" +# keys = ["i", "I"]" +# --- END OF EXAMPLE --- + +# [[open-custom.programs]] +# The program to open the file with. +# default="" +# program="" + +# Arguments to pass to the program. +# default="" +# args="" + +# If the program runs in the terminal set this to true. +# default=false +# terminal=false + +# What should the key hint in tut be for this program. See under the input +# section to learn more about hint. +# default="" +# hint="" + +# A list of keys to to open files with this program. See under the input section +# to learn more about keys. +# default=[] +# keys=[] + +# A list of special-keys to open files with this program. See under the input +# section to learn more about special-keys. +# default=[] +# special-keys=[] + +[open-pattern] +# [[open-pattern.programs]] +# Here you can set your own glob patterns for opening matching URLs in the +# program you want them to open up in. You could for example open Youtube videos +# in your video player instead of your default browser. To see the syntax for +# glob pattern you can follow this URL https://github.com/gobwas/glob#syntax. +# default="" +# matching="" + +# The program to open the file with. +# default="" +# program="" + +# Arguments to pass to the program. +# default="" +# args="" + +# If the program runs in the terminal set this to true. +# default=false +# terminal=false + +[style] +# All styles can be represented in their HEX value like #ffffff or with their +# name, so in this case white. The only special value is "default" which equals +# to transparent, so it will be the same color as your terminal. +# You can also use xrdb colors like this xrdb:color1 The program will use colors +# prefixed with an * first then look for URxvt or XTerm if it can't find any +# color prefixed with an asterisk. If you don't want tut to guess the prefix you +# can set the prefix yourself. If the xrdb color can't be found a preset color +# will be used. You'll have to set theme="none" for this to work. + +# The theme to use. You can use some themes that comes bundled with tut. Check +# out the themes available on the URL below. If a theme is named nord.toml you +# just write theme="nord". +# +# https://github.com/RasmusLindroth/tut/tree/master/config/themes +# +# You can also create a theme file in your config directory e.g. +# ~/.config/tut/themes/foo.toml and then set theme=foo. +# +# If you want to use your own theme but don't want to create a new file, set +# theme="none" and then you can create your own theme below. +# +# default="default" +theme="none" + +# The xrdb prefix used for colors in .Xresources. +# default="guess" +xrdb-prefix="guess" + +# The background color used on most elements. +# default="" +background="" + +# The text color used on most of the text. +# default="" +text="" + +# The color to display subtle elements or subtle text. Like lines and help text. +# default="" +subtle="" + +# The color for errors or warnings +# default="" +warning-text="" + +# This color is used to display username. +# default="" +text-special-one="" + +# This color is used to display username and key hints. +# default="" +text-special-two="" + +# The color of the bar at the top +# default="" +top-bar-background="" + +# The color of the text in the bar at the top. +# default="" +top-bar-text="" + +# The color of the bar at the bottom +# default="" +status-bar-background="" + +# The color of the text in the bar at the bottom. +# default="" +status-bar-text="" + +# The color of the bar at the bottom in view mode. +# default="" +status-bar-view-background="" + +# The color of the text in the bar at the bottom in view mode. +# default="" +status-bar-view-text="" + +# The color of the text in the command bar at the bottom. +# default="" +command-text="" + +# Background of selected list items. +# default="" +list-selected-background="" + +# The text color of selected list items. +# default="" +list-selected-text="" + +# The background color of selected list items that are out of focus. +# default="" +list-selected-inactive-background="" + +# The text color of selected list items that are out of focus. +# default="" +list-selected-inactive-text="" + +# The main color of the text for key hints +# default="" +controls-text="" + +# The highlight color of for key hints +# default="" +controls-highlight="" + +# The background color in drop-downs and autocompletions +# default="" +autocomplete-background="" + +# The text color in drop-downs at autocompletions +# default="" +autocomplete-text="" + +# The background color for selected value in drop-downs and autocompletions +# default="" +autocomplete-selected-background="" + +# The text color for selected value in drop-downs and autocompletions +# default="" +autocomplete-selected-text="" + +# The background color on selected button and the text color of unselected +# buttons +# default="" +button-color-one="" + +# The text color on selected button and the background color of unselected +# buttons +# default="" +button-color-two="" + +# The background on named timelines. +# default="" +timeline-name-background="" + +# The text color on named timelines +# default="" +timeline-name-text="" + +[input] +# In this section you set the keys to be used in tut. +# +# The hint option lets you set which part of the hint that will be highlighted +# in tut. E.g. [F]avorite results in a highlighted F and the rest of the text is +# displayed normally. +# Some of the options can be in two states, like favorites, so there you can set +# the hint-alt option to something like Un[F]avorite. +# +# Examples: +# "[D]elete" = Delete with a highlighted D +# "Un[F]ollow" = UnFollow with a highlighted F +# "[Enter]" = Enter where everything is highlighted +# "Yan[K]" = YanK with a highlighted K +# +# The keys option lets you define what key that should be pressed. This is +# limited to on character only and they are case sensitive. +# Example: +# keys=["j","J"] +# +# You can also set special-keys and they're for keys like Escape and Enter. To +# find the names of special keys you have to go to the following site and look +# for "var KeyNames = map[Key]string{" +# +# https://github.com/gdamore/tcell/blob/master/key.go + +[input.global-down] +# Keys for moving down + +# default=["j", "J"] +keys=["j","J"] + +# default=["Down"] +special-keys=["Down"] + +[input.global-up] +# Keys for moving down + +# default=["k", "K"] +keys=["k","K"] + +# default=["Up"] +special-keys=["Up"] + +[input.global-enter] +# To select items + +# default=["Enter"] +special-keys=["Enter"] + +[input.global-back] +# To go back + +# default="[Esc]" +hint="[Esc]" + +# default=["Esc"] +special-keys=["Esc"] + +[input.global-exit] +# To go back or exit + +# default="[Q]uit" +hint="[Q]uit" + +# default=["q", "Q"] +keys=["q","Q"] + +[input.main-home] +# Move to the top + +# default=["g"] +keys=["g"] + +# default=["Home"] +special-keys=["Home"] + +[input.main-end] +# Move to the bottom + +# default=["G"] +keys=["G"] + +# default=["End"] +special-keys=["End"] + +[input.main-prev-feed] +# Go to previous feed + +# default=["h", "H"] +keys=["h","H"] + +# default=["Left"] +special-keys=["Left"] + +[input.main-next-feed] +# Go to next feed + +# default=["l", "L"] +keys=["l","L"] + +# default=["Right"] +special-keys=["Right"] + +[input.main-prev-pane] +# Focus on the previous feed pane + +# default=["Backtab"] +special-keys=["Backtab"] + +[input.main-next-pane] +# Focus on the next feed pane + +# default=["Tab"] +special-keys=["Tab"] + +[input.main-next-account] +# Focus on the next account + +# default=["Ctrl-N"] +special-keys=["Ctrl-N"] + +[input.main-prev-account] +# Focus on the previous account + +# default=["Ctrl-P"] +special-keys=["Ctrl-P"] + +[input.main-compose] +# Compose a new toot + +# default=["c", "C"] +keys=["c","C"] + +[input.status-avatar] +# Open avatar + +# default="[A]vatar" +hint="[A]vatar" + +# default=["a", "A"] +keys=["a","A"] + +[input.status-boost] +# Boost a toot + +# default="[B]oost" +hint="[B]oost" + +# default=["b", "B"] +keys=["b","B"] + +[input.status-edit] +# Edit a toot + +# default="[E]dit" +hint="[E]dit" + +# default=["e", "E"] +keys=["e","E"] + +[input.status-delete] +# Delete a toot + +# default="[D]elete" +hint="[D]elete" + +# default=["d", "D"] +keys=["d","D"] + +[input.status-favorite] +# Favorite a toot + +# default="[F]avorite" +hint="[F]avorite" + +# default=["f", "F"] +keys=["f","F"] + +[input.status-media] +# Open toots media files + +# default="[M]edia" +hint="[M]edia" + +# default=["m", "M"] +keys=["m","M"] + +[input.status-links] +# Open links + +# default="[O]pen" +hint="[O]pen" + +# default=["o", "O"] +keys=["o","O"] + +[input.status-poll] +# Open poll + +# default="[P]oll" +hint="[P]oll" + +# default=["p", "P"] +keys=["p","P"] + +[input.status-reply] +# Reply to toot + +# default="[R]eply" +hint="[R]eply" + +# default=["r", "R"] +keys=["r","R"] + +[input.status-bookmark] +# Save/bookmark a toot + +# default="[S]ave" +hint="[S]ave" + +# default="Un[S]ave" +hint-alt="Un[S]ave" + +# default=["s", "S"] +keys=["s","S"] + +[input.status-thread] +# View thread + +# default="[T]hread" +hint="[T]hread" + +# default=["t", "T"] +keys=["t","T"] + +[input.status-user] +# Open user profile + +# default="[U]ser" +hint="[U]ser" + +# default=["u", "U"] +keys=["u","U"] + +[input.status-view-focus] +# Open the view mode + +# default="[V]iew" +hint="[V]iew" + +# default=["v", "V"] +keys=["v","V"] + +[input.status-yank] +# Yank the url of the toot + +# default="[Y]ank" +hint="[Y]ank" + +# default=["y", "Y"] +keys=["y","Y"] + +[input.status-toggle-cw] +# Show the content in a content warning + +# default="Press [Z] to toggle cw" +hint="Press [Z] to toggle cw" + +# default=["z", "Z"] +keys=["z","Z"] + +[input.status-show-filtered] +# Show the content of a filtered toot + +# default="Press [Z] to view filtered toot" +hint="Press [Z] to view filtered toot" + +# default=["z", "Z"] +keys=["z","Z"] + +[input.user-avatar] +# View avatar + +# default="[A]vatar" +hint="[A]vatar" + +# default=["a", "A"] +keys=["a","A"] + +[input.user-block] +# Block the user + +# default="[B]lock" +hint="[B]lock" + +# default="Un[B]lock" +hint-alt="Un[B]lock" + +# default=["b", "B"] +keys=["b","B"] + +[input.user-follow] +# Follow user + +# default="[F]ollow" +hint="[F]ollow" + +# default="Un[F]ollow" +hint-alt="Un[F]ollow" + +# default=["f", "F"] +keys=["f","F"] + +[input.user-follow-request-decide] +# Follow user + +# default="Follow [R]equest" +hint="Follow [R]equest" + +# default="Follow [R]equest" +hint-alt="Follow [R]equest" + +# default=["r", "R"] +keys=["r","R"] + +[input.user-mute] +# Mute user + +# default="[M]ute" +hint="[M]ute" + +# default="Un[M]ute" +hint-alt="Un[M]ute" + +# default=["m", "M"] +keys=["m","M"] + +[input.user-links] +# Open links + +# default="[O]pen" +hint="[O]pen" + +# default=["o", "O"] +keys=["o","O"] + +[input.user-user] +# View user profile + +# default="[U]ser" +hint="[U]ser" + +# default=["u", "U"] +keys=["u","U"] + +[input.user-view-focus] +# Open view mode + +# default="[V]iew" +hint="[V]iew" + +# default=["v", "V"] +keys=["v","V"] + +[input.user-yank] +# Yank the user URL + +# default="[Y]ank" +hint="[Y]ank" + +# default=["y", "Y"] +keys=["y","Y"] + +[input.list-open-feed] +# Open list + +# default="[O]pen" +hint="[O]pen" + +# default=["o", "O"] +keys=["o","O"] + +[input.list-user-list] +# List all users in a list + +# default="[U]sers" +hint="[U]sers" + +# default=["u", "U"] +keys=["u","U"] + +[input.list-user-add] +# Add user to list + +# default="[A]dd" +hint="[A]dd" + +# default=["a", "A"] +keys=["a","A"] + +[input.list-user-delete] +# Delete user from list + +# default="[D]elete" +hint="[D]elete" + +# default=["d", "D"] +keys=["d","D"] + +[input.link-open] +# Open URL + +# default="[O]pen" +hint="[O]pen" + +# default=["o", "O"] +keys=["o","O"] + +[input.link-yank] +# Yank the URL + +# default="[Y]ank" +hint="[Y]ank" + +# default=["y", "Y"] +keys=["y","Y"] + +[input.tag-open-feed] +# Open tag feed + +# default="[O]pen" +hint="[O]pen" + +# default=["o", "O"] +keys=["o","O"] + +[input.tag-follow] +# Toggle follow on tag + +# default="[F]ollow" +hint="[F]ollow" + +# default="Un[F]ollow" +hint-alt="Un[F]ollow" + +# default=["f", "F"] +keys=["f","F"] + +[input.compose-edit-cw] +# Edit content warning text on new toot + +# default="[C]W text" +hint="[C]W text" + +# default=["c", "C"] +keys=["c","C"] + +[input.compose-edit-text] +# Edit the text on new toot + +# default="[E]dit text" +hint="[E]dit text" + +# default=["e", "E"] +keys=["e","E"] + +[input.compose-include-quote] +# Include a quote when replying + +# default="[I]nclude quote" +hint="[I]nclude quote" + +# default=["i", "I"] +keys=["i","I"] + +[input.compose-media-focus] +# Focus on adding media to toot + +# default="[M]edia" +hint="[M]edia" + +# default=["m", "M"] +keys=["m","M"] + +[input.compose-post] +# Post the new toot + +# default="[P]ost" +hint="[P]ost" + +# default=["p", "P"] +keys=["p","P"] + +[input.compose-toggle-content-warning] +# Toggle content warning on toot + +# default="[T]oggle CW" +hint="[T]oggle CW" + +# default=["t", "T"] +keys=["t","T"] + +[input.compose-visibility] +# Edit the visibility on new toot + +# default="[V]isibility" +hint="[V]isibility" + +# default=["v", "V"] +keys=["v","V"] + +[input.compose-language] +# Edit the language of a toot + +# default="[L]ang" +hint="[L]ang" + +# default=["l", "L"] +keys=["l","L"] + +[input.compose-poll] +# Switch to creating a poll + +# default="P[O]ll" +hint="P[O]ll" + +# default=["o", "O"] +keys=["o","O"] + +[input.media-delete] +# Delete media file + +# default="[D]elete" +hint="[D]elete" + +# default=["d", "D"] +keys=["d","D"] + +[input.media-edit-desc] +# Edit the description on media file + +# default="[E]dit desc" +hint="[E]dit desc" + +# default=["e", "E"] +keys=["e","E"] + +[input.media-add] +# Add a new media file + +# default="[A]dd" +hint="[A]dd" + +# default=["a", "A"] +keys=["a","A"] + +[input.vote-vote] +# Vote on poll + +# default="[V]ote" +hint="[V]ote" + +# default=["v", "V"] +keys=["v","V"] + +[input.vote-select] +# Select item to vote on + +# default="[Enter] to select" +hint="[Enter] to select" + +# default=["Enter"] +special-keys=["Enter"] + +[input.poll-add] +# Add a new poll option + +# default="[A]dd" +hint="[A]dd" + +# default=["a", "A"] +keys=["a","A"] + +[input.poll-edit] +# Edit a poll option + +# default="[E]dit" +hint="[E]dit" + +# default=["e", "E"] +keys=["e","E"] + +[input.poll-delete] +# Delete a poll option + +# default="[D]elete" +hint="[D]elete" + +# default=["d", "D"] +keys=["d","D"] + +[input.poll-multi-toggle] +# Toggle voting on multiple options + +# default="Toggle [M]ultiple" +hint="Toggle [M]ultiple" + +# default=["m", "M"] +keys=["m","M"] + +[input.poll-expiration] +# Change the expiration of poll + +# default="E[X]pires" +hint="E[X]pires" + +# default=["x", "X"] +keys=["x","X"] + +[input.preference-name] +# Change display name + +# default="[N]ame" +hint="[N]ame" + +# default=["n", "N"] +keys=["n","N"] + +[input.preference-visibility] +# Change default visibility of toots + +# default="[V]isibility" +hint="[V]isibility" + +# default=["v", "V"] +keys=["v","V"] + +[input.preference-bio] +# Change bio in profile + +# default="[B]io" +hint="[B]io" + +# default=["b", "B"] +keys=["b","B"] + +[input.preference-save] +# Save your preferences + +# default="[S]ave" +hint="[S]ave" + +# default=["s", "S"] +keys=["s","S"] + +[input.preference-fields] +# Edit profile fields + +# default="[F]ields" +hint="[F]ields" + +# default=["f", "F"] +keys=["f","F"] + +[input.preference-fields-add] +# Add new field + +# default="[A]dd" +hint="[A]dd" + +# default=["a", "A"] +keys=["a","A"] + +[input.preference-fields-edit] +# Edit current field + +# default="[E]dit" +hint="[E]dit" + +# default=["e", "E"] +keys=["e","E"] + +[input.preference-fields-delete] +# Delete current field + +# default="[D]elete" +hint="[D]elete" + +# default=["d", "D"] +keys=["d","D"] + +[input.editor-exit] +# Exit the editor + +# default="[Esc] when done" +hint="[Esc] when done" + +# default=["Esc"] +special-keys=["Esc"] + diff --git a/user/.config/waybar/config b/user/.config/waybar/config index 843c27697..739c0b2df 100644 --- a/user/.config/waybar/config +++ b/user/.config/waybar/config @@ -5,30 +5,40 @@ "layer": "top", // Choose the order of the modules - "modules-left": ["wlr/workspaces"], + "modules-left": ["hyprland/workspaces"], // "modules-center": ["clock"], "modules-right": ["idle_inhibitor", "hyprland/language", "pulseaudio", "backlight", "battery", "custom/powerprofiles", "network", "clock"], - "wlr/workspaces": { + "hyprland/workspaces": { "on-click": "activate", "sort-by-number": true, "on-scroll-up": "hyprctl dispatch workspace e+1", "on-scroll-down": "hyprctl dispatch workspace e-1", - "format": "{icon}", + "format": "{icon}", "format-icons": { - "1": "\uf269", - "2": "\uf07b", - "3": "\ue632", - "4": "\uf075", - "5": "\uf001", - "6": "\uf03d", - "7": "\ue22b", - "8": "\uf15c", - "9": "\udb80\ude96", - "10": "\ue20f", - "urgent": "\uf12a", - "focused": "\uf192", - "default": "\uf10c" + "1": "\ue7c5", + "2": "\uf188", + "3": "\uf07c", + "4": "\uf0ac", + "5": "\udb82\udf79", + "6": "\uf01c", + "7": "\udb84\udc02", + "8": "\udb82\uded1", + "9": "\udb81\udf5a", + "10": "\uf03d", + "11": "\udb80\udfd8", + "12": "\udb80\ude19", + "13": "\uf02d", + "14": "\udb80\ude96", + "15": "\udb80\udf0b", + "16": "\udb86\udc6b", + "17": "\udb81\ude91", + "18": "\ue638", + "19": "\udb80\ude9a", + "20": "\udb84\udc64", + "urgent": "\uf12a", + "focused": "\uf192", + "default": "\uf444" } }, diff --git a/user/.config/wofi/config b/user/.config/wofi/config new file mode 100644 index 000000000..cbb3e7370 --- /dev/null +++ b/user/.config/wofi/config @@ -0,0 +1,9 @@ +style=/home/drk/.config/wofi/style.css +show=drun +width=960 +height=320 +always_parse_args=true +show_all=true +print_command=true +layer=overlay +prompt= diff --git a/user/.config/wofi/style.css b/user/.config/wofi/style.css new file mode 100644 index 000000000..4de8b7ed8 --- /dev/null +++ b/user/.config/wofi/style.css @@ -0,0 +1,56 @@ +window { +margin: 5px; +border: 2px solid #cc241d; +/* border-radius: 15px; */ +background-color: #282828; +font-family: mononoki Nerd Font; +font-size: 16px; +} + +#input { +margin: 10px; +margin-bottom: 1px; +border: 5px solid #3c3836; +color: #ebdbb2; +background-color: #3c3836; +} + +#input > image.left { + -gtk-icon-transform:scaleX(0); +} + +#inner-box { +margin: 15px; +margin-top: 15px; +border: none; +background-color: #282828; +} + +#outer-box { +margin: 10px; +border: none; +background-color: #282828; +} + +#scroll { +margin: 0px; +border: none; +} + +#text { +margin: 5px; +border: none; +color: #ebdbb2; +} + +#entry:selected { + background-color: #cc241d; + color: #3c3836; + font-weight: normal; +} + +#text:selected { + background-color: #cc241d; + color: #fbf1c7; + font-weight: bold; +} diff --git a/user/.config/rofi/scripts/rofi_blue b/user/.local/bin/rs_blue similarity index 97% rename from user/.config/rofi/scripts/rofi_blue rename to user/.local/bin/rs_blue index 7285efe67..e7d10165d 100755 --- a/user/.config/rofi/scripts/rofi_blue +++ b/user/.local/bin/rs_blue @@ -232,7 +232,7 @@ device_menu() { options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit" # Open rofi menu, read chosen option - chosen="$(echo -e "$options" | $rofi_command "$device_name")" + chosen="$(echo -e "$options" | $RUNNER -i -L 8 -p "$device_name")" # Match chosen option to command case "$chosen" in @@ -277,7 +277,7 @@ show_menu() { fi # Open rofi menu, read chosen option - chosen="$(echo -e "$options" | $rofi_command "  Bluetooth ")" + chosen="$(echo -e "$options" | $RUNNER -i -L 10 -p " Bluetooth")" # Match chosen option to command case "$chosen" in @@ -304,9 +304,6 @@ show_menu() { esac } -# Rofi command to pipe into, can add any options here -rofi_command="rofi -dmenu $* -p" - case "$1" in --status) print_status diff --git a/user/.config/rofi/scripts/rofi_emoji b/user/.local/bin/rs_emoji similarity index 99% rename from user/.config/rofi/scripts/rofi_emoji rename to user/.local/bin/rs_emoji index e90268c05..32784acc0 100755 --- a/user/.config/rofi/scripts/rofi_emoji +++ b/user/.local/bin/rs_emoji @@ -2,9 +2,9 @@ wtype 0 if [ $? -eq 0 ] then - sed '1,/^### DATA ###$/d' $0 | rofi -dmenu -i -p " 󰙃 Select Emoji " | cut -d ' ' -f 1 | tr -d '\n' | wtype - + sed '1,/^### DATA ###$/d' $0 | $RUNNER -i -p " 󰙃 Select Emoji " | cut -d ' ' -f 1 | tr -d '\n' | wtype - else - sed '1,/^### DATA ###$/d' $0 | rofi -dmenu -i -p " 󰙃 Select Emoji " | cut -d ' ' -f 1 | tr -d '\n' | wl-copy + sed '1,/^### DATA ###$/d' $0 | $RUNNER -i -p " 󰙃 Select Emoji " | cut -d ' ' -f 1 | tr -d '\n' | wl-copy fi exit ### DATA ### diff --git a/user/.config/rofi/scripts/rofi_mount b/user/.local/bin/rs_mount similarity index 88% rename from user/.config/rofi/scripts/rofi_mount rename to user/.local/bin/rs_mount index 3f2bd2258..7fc48eb36 100755 --- a/user/.config/rofi/scripts/rofi_mount +++ b/user/.local/bin/rs_mount @@ -2,8 +2,8 @@ # List of available drives devices=$(lsblk -lpo "name,size,type,mountpoint" --noheadings | grep -v -e "disk" -e "lvm" -e "nvme" | awk '{if ($4=="") {print $1, "(" $2 ")", "[unmounted]"} else {print $1, "(" $2 ")", "[" $4 "]"}}') -# Rofi menu -selected_device=$(echo -e "${devices}" | rofi -dmenu -i -p "Drive manager" | awk '{print $1}') +# menu +selected_device=$(echo -e "${devices}" | $RUNNER -i -p "Drive manager" | awk '{print $1}') # Verify if the drive is mounted if [ -n "$selected_device" ]; then @@ -24,7 +24,7 @@ if [ -n "$selected_device" ]; then # If it's not mounted, check if it's an encrypted drive if [ "$(lsblk -n -o FSTYPE "${selected_device}")" == "crypto_LUKS" ]; then # If it's an encrypted drive, prompt for the passphrase and mount it - passphrase=$(rofi -dmenu -p "Enter passphrase for ${selected_device}" -password) + passphrase=$($RUNNER -p "Enter passphrase for ${selected_device}" --password) if [ -n "$passphrase" ]; then echo "$passphrase" | pkexec cryptsetup open "${selected_device}" encrypted_"${selected_device##*/}" udisksctl mount -b /dev/mapper/encrypted_"${selected_device##*/}" diff --git a/user/.local/bin/rs_power b/user/.local/bin/rs_power new file mode 100755 index 000000000..c68a38a7e --- /dev/null +++ b/user/.local/bin/rs_power @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +# ***This script was made by Clay Gomera (Drake)*** +# - Description: A simple power menu script for rofi/dmenu/wofi +# - Dependencies: {rofi||dmenu||wofi}, power-profiles-daemon, swaylock +# + +####################### +## Main manu options ## +####################### +option1=" Logout" +option2=" Reboot" +option3=" Power off" +option4="󰒲 Suspend" +option5=" Lock" +option6=" Change power profile" +option7=" Exit" +options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6\n$option7" + +#################################### +## Power profiles submenu options ## +#################################### +pwr1="󰓅 Performance" +pwr2="󰾅 Balanced" +pwr3="󰾆 Power Saver" +pwr4=" Cancel" +pwrs="$pwr1\n$pwr2\n$pwr3\n$pwr4" + +##### +## This variable will store the current wallpaper +##### +currwall=$(swww query | awk '{print $8}') + +##### +## This variable will store the current power profile +##### +currentpwr=$(powerprofilesctl get) + +########## +## main ## +########## +action=$(echo -e "$options" | $RUNNER -i -L 9 -p " Power Options") # main menu prompt +case "$action" in + "$option1") + pkill Hyprland; + ;; + "$option2") + systemctl reboot; + ;; + "$option3") + systemctl poweroff; + ;; + "$option4") + swaylock -i "$currwall" & + sleep 0.1; + systemctl suspend; + ;; + "$option5") + swaylock -i "$currwall"; + ;; + "$option6") + ##### + ## These conditions will be used for the prompt + ##### + if [ "$currentpwr" = "performance" ]; then + currentpwr="$pwr1"; + elif [ "$currentpwr" = "balanced" ]; then + currentpwr="$pwr2"; + elif [ "$currentpwr" = "power-saver" ]; then + currentpwr="$pwr3"; + fi + pwraction=$(echo -e "$pwrs" | $RUNNER -L 6 -i -p " Power Profile Menu - Currently set to: $currentpwr") # power profiles submenu prompt + case "$pwraction" in + "$pwr1") + if [ "$currentpwr" = "$pwr1" ]; then # if the power profile is already set to performance + notify-send "The power profile is already set to performance"; + exit 1; + else + powerprofilesctl set performance && notify-send "Power profile switched to performance"; # if not, set the powerprofile to performance + fi + ;; + "$pwr2") + if [ "$currentpwr" = "$pwr2" ]; then # if the power profile is already set to balanced + notify-send "The power profile is already set to balanced"; + exit 1; + else + powerprofilesctl set balanced && notify-send "Power profile switched to balanced"; # if not, set the powerprofile to balanced + fi + ;; + "$pwr3") + if [ "$currentpwr" = "$pwr3" ]; then # if the power profile is already set to power saver + notify-send "The power profile is already set to power saver"; + exit 1; + else + powerprofilesctl set power-saver && notify-send "Power profile switched to power saver"; # if not, set the powerprofile to power saver + fi + ;; + "$pwr4") + exit 0; + esac;; + "$option7") + exit 0; +esac diff --git a/user/.local/bin/rs_scrot b/user/.local/bin/rs_scrot new file mode 100755 index 000000000..1938401bf --- /dev/null +++ b/user/.local/bin/rs_scrot @@ -0,0 +1,331 @@ +#!/usr/bin/env bash + +# ***This script was made by Clay Gomera (Drake)*** +# - Description: A simple screenshot menu script for rofi/dmenu/wofi +# - Dependencies: {rofi||dmenu||wofi}, wayshot, slurp, wf-recorder + +########################### +## Screenshots Directory ## +########################### +SHOTDIR="$MEDIA_DIR/Pictures/Screenshots" # $MEDIA_DIR reffers to a global variable in .xinitrc/.bash_profile +VCAPDIR="$MEDIA_DIR/Videos/Screencasts" # $MEDIA_DIR reffers to a global variable in .xinitrc/.bash_profile +[ ! -d "$SHOTDIR" ] && [ ! -d "$VCAPDIR" ] && mkdir -p "$SHOTDIR" "$VCAPDIR" || echo + +##### +## This variable will store the +## available audio input devices +##### +devices=$(pactl list sources | grep "Name" | awk '{print $2}') + +####################### +## Main menu choices ## +####################### +mcho1="󰹑 Take an screenshot" +mcho2="󰻃 Record the screen" +mcho3=" Exit" +mchos="$mcho1\n$mcho2\n$mcho3" + +############################# +## Screenshot menu choices ## +############################# +scho1="󱣴 Entire screen" +scho2="󱎫 Entire screen with delay" +scho3="󱕻 Select region" +scho4="󰖯 Active window" +scho5="󱎘 Exit" +schos="$scho1\n$scho2\n$scho3\n$scho4\n$scho5" + +############################# +## Screenshot menu choices ## +############################# +vcho1="󰕧 Record the screen" +vcho2="󰕩 Record region" +vcho3="󰕧 Record the screen and audio" +vcho4="󱎘 Exit" +vchos="$vcho1\n$vcho2\n$vcho3\n$vcho4" + +######################## +## Screenshot submenu ## +######################## +sscho1="󰆏 Copy to clipboard" +sscho2="󰠘 Save to ~/Media/Pictures/Screenshots" +sscho3="󱎘 Exit" +sschos="$sscho1\n$sscho2\n$sscho3" + +################################# +## Screenshot delay subsubmenu ## +################################# +del1="󱑀 3 sec delay" +del2="󱑂 5 sec delay" +del3="󱑇 10 sec delay" +del4="󱎘 Exit" +dels="$del1\n$del2\n$del3\n$del4" + +##### +## This function uses the sschos variable +## to ask the user what to do with the +## screenshot +##### +## param: none +## return: string +##### +fsschos() { + sschoice=$(echo -e "$sschos" | $RUNNER -i -L 4 -p " What do you want to do with this screenshot?") +} + +##### +## This function uses the dels variable +## to ask the user which delay option to +## choose +##### +## param: none +## return: string +##### +fdel() { + del=$(echo -e "$dels" | $RUNNER -L 5 -i -p " Select Delay") +} + +# countdown function +countdown() { + notify-send "Screenshot" "Executing in 3 seconds" -t 1000 + sleep 1 + notify-send "Screenshot" "Executing in 2 seconds" -t 1000 + sleep 1 + notify-send "Screenshot" "Executing in 1 seconds" -t 1000 + sleep 2 +} + +##### +## This function does a full screen +## screenshot without delay, depending on +## what the user chooses on the fsschos +## function, the screenshot will be saved +## to the clipboard or to $SHOTDIR +##### +## param: none +## return: void +##### +shot_screen() { + fsschos + if [ "$sschoice" = "$sscho1" ]; then + sleep 0.5 && wayshot --stdout | wl-copy && notify-send "Screenshot copied to clipboard" + elif [ "$sschoice" = "$sscho2" ]; then + sleep 0.5 && wayshot -f "$SHOTDIR/$(date +%s).jpg" && notify-send "Screenshot saved to $SHOTDIR" + else + exit 0 + fi +} + +##### +## This function does a full screen +## screenshot with delay, depending on +## what the user chooses on the fsschos +## function, the screenshot will be saved +## to the clipboard or to $SHOTDIR. And +## depending on what the user chooses on +## the fdel function, the delay will be +## between 3 and 10 seconds +##### +## param: none +## return: void +##### +shot_screen_delay() { + fsschos; + if [ "$sschoice" = "$sscho1" ]; then + fdel; + case $del in + "$del1") + sleep 3 && wayshot --stdout | wl-copy && notify-send "Screenshot saved to clipboard"; + ;; + "$del2") + sleep 5 && wayshot --stdout | wl-copy && notify-send "Screenshot saved to clipboard"; + ;; + "$del3") + sleep 10 && wayshot --stdout | wl-copy && notify-send "Screenshot saved to clipboard"; + ;; + "$del4") + exit 0; + esac + elif [ "$sschoice" = "$sscho2" ]; then + fdel; + case $del in + "$del1") + sleep 3 && wayshot -f "$SHOTDIR/$(date +%s)" && notify-send "Screenshot saved to $SHOTDIR"; + ;; + "$del2") + sleep 5 && wayshot -f "$SHOTDIR/$(date +%s)" && notify-send "Screenshot saved to $SHOTDIR"; + ;; + "$del3") + sleep 10 && wayshot -f "$SHOTDIR/$(date +%s)" && notify-send "Screenshot saved to $SHOTDIR"; + ;; + "$del4") + exit 0; + esac + else + exit 0 + fi +} + + +##### +## This function allows the user to select +## the area on screen to screenshot +## depending on what the user chooses on +## the fsschos function, the screenshot +## will be saved to the clipboard or to +## $SHOTDIR +##### +## param: none +## return: void +##### +shot_area() { + fsschos; + if [ "$sschoice" = "$sscho1" ]; then + sleep 0.5 && wayshot -s "$(slurp)" --stdout | wl-copy && notify-send "Screenshot saved to clipboard"; + elif [ "$sschoice" = "$sscho2" ]; then + sleep 0.5 && wayshot -f "$SHOTDIR/$(date +%s).jpg" && notify-send "Screenshot saved to $SHOTDIR"; + else + exit 0 + fi +} + +##### +## This function does an screnshot of the +## currently active window, depending on +## what the user chooses on the fsschos +## function, the screenshot will be saved +## to the clipboard or to $SHOTDIR +##### +## param: none +## return: void +##### +shot_window() { + fsschos; + if [ "$sschoice" = "$sscho1" ]; then + wayshot -s "$(hyprctl activewindow -j | jq -c -r '.at,.size | .[]' | tr '\n' ' ')" --stdout | wl-copy && notify-send "Screenshot saved to clipboard"; + elif [ "$sschoice" = "$sscho2" ]; then + wayshot -s "$(hyprctl activewindow -j | jq -c -r '.at,.size | .[]' | tr '\n' ' ')" --stdout -f "$SHOTDIR/$(date +%s).jpg" && notify-send "Screenshot saved to $SHOTDIR"; + else + exit 0 + fi +} + +##### +## This function starts recording the whole screen, +## with mp4 format and no audio. The recording will +## continue until the user stops it with the -s +## option, when that happens, the video will be +## saved to $VCAPDIR. +##### +## param: none +## return: void +##### +vshot_screen() { + for ((i = 3; i >= 1; i--)); do + notify-send -t 1000 "Starting in $i seconds"; + sleep 1; + done + wf-recorder --codec=h264_vaapi -d /dev/dri/renderD128 -f "$VCAPDIR/$(date +%s).mp4" + notify-send "Screenshot" "Recording saved to $VCAPDIR" +} + +##### +## This function will execute slurp to get the area, +## to record, and then starts the recording with mp4 +## format and no audio. The recording will continue +## until the user stops it with the -s option, when +## that happens, the video will be saved to $VCAPDIR. +##### +## param: none +## return: void +##### +vshot_area() { + wf-recorder --codec=h264_vaapi -d /dev/dri/renderD128 -g "$(slurp)" -f "$VCAPDIR/$(date +%s).mp4" + notify-send "Screenshot" "Recording saved to $VCAPDIR" +} + +##### +## This function starts recording the whole screen, +## with mp4 format and with audio. The recording will +## continue until the user stops it with the -s +## option, when that happens, the video will be +## saved to $VCAPDIR. +##### +## param: none +## return: void +##### +vshot_screen_audio() { + chosendevice=$(echo -e "$devices" | $RUNNER -i -L 10 -p "Select audio input:") + if [ -n "$chosendevice" ]; then + device="$chosendevice" + for ((i = 3; i >= 1; i--)); do + notify-send -t 1000 "Starting in $i seconds"; + sleep 1; + done + wf-recorder --audio="$device" --codec=h264_vaapi -d /dev/dri/renderD128 -f "$VCAPDIR/$(date +%s).mp4" + else + exit 1 + fi + notify-send "Screenshot" "Recording saved to $VCAPDIR" +} + +# show the help output with --help or -h arguments +if [ "$1" == '--help' ] || [ "$1" = '-h' ]; then + echo "rs-scrot" + echo "USAGE: rs-scrot [OPTION]" + echo -e "(no option)\tshow the screenshot menu" + echo -e "-s, --stop\tstop recording" + echo -e "-h, --help\tthis screen" + exit 1 +fi + +# stop recording with -s or --stop arguments +if [ "$1" = '--stop' ] || [ "$1" = '-s' ]; then + killall -s SIGINT wf-recorder + exit 1 +fi + +########## +## main ## +########## +mchoice=$(echo -e "$mchos" | $RUNNER -i -L 5 -p " Screenshot/Screen-Capture Utility") # main menu prompt +case $mchoice in + "$mcho1") + schoice=$(echo -e "$schos" | $RUNNER -i -L 7 -p " Sreenshot Menu") # screenshot menu prompt + case $schoice in + "$scho1") + shot_screen; + ;; + "$scho2") + shot_screen_delay; + ;; + "$scho3") + shot_area; + ;; + "$scho4") + shot_window; + ;; + "$scho5") + exit 0 + esac + ;; + "$mcho2") + vchoice=$(echo -e "$vchos" | $RUNNER -i -L 6 -p "󰕧 Screen-Capture Menu") + case $vchoice in + "$vcho1") + vshot_screen; + ;; + "$vcho2") + vshot_area; + ;; + "$vcho3") + vshot_screen_audio; + ;; + "$vcho4") + exit 0; + esac + ;; + "$mcho3") + exit 0 + ;; +esac diff --git a/user/.local/bin/rs_wall b/user/.local/bin/rs_wall new file mode 100755 index 000000000..41f2c77b0 --- /dev/null +++ b/user/.local/bin/rs_wall @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# ***This script was made by Clay Gomera (Drake)*** +# - Description: A simple wallpaper changer script for rofi/dmenu/wofi +# - Dependencies: {rofi||dmenu||wofi}, fd, swaybg + +## WALLPAPER DIRECTORY ## +walldir="$MEDIA_DIR/Pictures/Wallpapers" # wallpapers folder, change it to yours + +## SELECT PICTURE ## +cd "$walldir" || exit 1 +wallpaper=$(fd -p "$walldir" | $RUNNER -p "󰋩 Wallpaper Selector") +if [ -n "$wallpaper" ]; then + swww img "$wallpaper" +else + exit 0 +fi +exit 0 diff --git a/user/.local/bin/rs_wifi b/user/.local/bin/rs_wifi new file mode 100755 index 000000000..99f2d38e9 --- /dev/null +++ b/user/.local/bin/rs_wifi @@ -0,0 +1,166 @@ +#!/usr/bin/env bash + +# ***This script was made by Clay Gomera (Drake)*** +# - Description: A simple wifi script for rofi/dmenu/wofi +# - Dependencies: {rofi||dmenu||wofi}, NetworkManager, io.elementary.capnet-assist + +####################### +## Main manu options ## +####################### +option1=" Turn on WiFi" +option2=" Turn off WiFi" +option3="󱛅 Disconnect WiFi" +option4="󱛃 Connect WiFi" +option5="󱛆 Setup captive portal" +option6=" Exit" +options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6" + +##### +## These variables will store specific +## information about the wireless +## interface +##### +wlan=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f1 | head -1) +constate=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f3 | head -1) +currentwfi=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f4 | head -1) + +##### +## This function uses nmcli to turn +## off wifi and then sends a +## notification +##### +## param: none +## return: void +##### +turnoff() { + nmcli radio wifi off && notify-send "WiFi has been turned off"; +} + +##### +## This function uses nmcli to turn +## on wifi and then sends a +## notification +##### +## param: none +## return: void +##### +turnon() { + nmcli radio wifi on && notify-send "WiFi has been turned on"; +} + +##### +## This function uses nmcli and the +## $wlan and $constate variables to +## disconnect from the wifi network +## and then sends a notification +##### +## param: none +## return: void +##### +disconnect() { + if [ "$constate" = "disconnected" ]; then + notify-send "WiFi is already disconnected"; + elif [ "$constate" = "connected" ]; then + nmcli device disconnect "$wlan" && notify-send "Wifi has been disconnected"; + else + exit 1; + fi +} + +##### +## This function uses nmcli to first scan +## for available networks and then the +## $bssid variable will store the SSID +## of the network that the user chooses +##### +## param: none +## return: string +##### +connect() { + notify-send "Scannig networks..." && nmcli dev wifi rescan; + bssid=$(nmcli device wifi list | sed -n '1!p' | cut -b 9- | $RUNNER -i -p " Select a Wifi Network" | cut -d' ' -f1); +} + +##### +## This function will store the WiFi +## password in the $pass variable +##### +## param: none +## return: string +##### +password() { + # TODO Create a condition to check if the chosen network is open or not, that + # way this will be skipped of it's open + # TODO What if the network is already saved? The user doesn't need to type the + # password again + pass=$($RUNNER -i -W 250 -L 1 -p "Enter Password " --password); +} + +##### +## This function will actually connect +## to the chosen WiFi network using the +## $bssid and $pass variables +##### +## param: none +## return: void +##### +action() { + nmcli device wifi connect "$bssid" password "$pass" || nmcli device wifi connect "$bssid"; +} + +##### +## This function will check if the +## connection works +##### +## param: none +## return: void +##### +check() { + notify-send "Checking if connection was successful"; + sleep 1; + if ping -q -c 2 -W 2 google.com >/dev/null; then + notify-send "You are now connected to $currentwfi and internet is working properly"; + else + notify-send "Your internet is not working :("; + fi +} + +########## +## main ## +########## +cases=$(echo -e "$options" | $RUNNER -i -L 8 -p " Wifi Settings" ) # main menu prompt +case "$cases" in + "$option1") + turnon; + ;; + "$option2") + turnoff; + ;; + "$option3") + disconnect; + ;; + "$option4") + connect; + if [ -n "$bssid" ]; then # if the user chooses a network + password; + if [ -n "$pass" ]; then # if the user typed a password + action; + if [ "$constate" = "connected" ]; then # if the connection was successful + check; + else + notify-send "Connection error"; # if not, connection error + exit 1; + fi + else + exit 1; # if not, exit the script + fi + else + exit 1; # if not, exit the script + fi + ;; + "$option5") + io.elementary.capnet-assist; + ;; + "$option6") + exit 0; +esac diff --git a/user/.winitrc b/user/.winitrc index ea558e5ee..cfb8d11e5 100755 --- a/user/.winitrc +++ b/user/.winitrc @@ -41,9 +41,14 @@ export GNUPGHOME="$HOME/.local/share/gnupg" export LESSHISTFILE=- # default apps -export EDITOR="emacsclient -t -a ''" -export VISUAL="emacsclient -c -a 'emacs'" -export BROWSER="librewolf" +export EDITOR="$HOME/.local/bin/lvim" +export VISUAL="neovide --neovim-bim $HOME/.local/bin/lvim" +export BROWSER="qutebrowser" export VIEWER="zathura" +export MEDIA_DIR="$HOME/Media" +export TEMP_DIR="$HOME/Temporal" +export RUNNER="wofi --dmenu" +export RUNNER_EX="wofi -p ' Run'" + exec Hyprland diff --git a/user/dependencies.md b/user/dependencies.md index a147ab9ca..624ec659f 100644 --- a/user/dependencies.md +++ b/user/dependencies.md @@ -1,54 +1,8 @@ # Dependencies -- ttf-mononoki-nerd -- ttf-nerd-fonts-symbols-mono -- rofi-lboon-wayland-git -- waybar-hyprland -- swww-git -- dunst -- xdg-desktop-portal -- xdg-desktop-portal-gtk -- xdg-desktop-portal-hyprland -- polkit-gnome -- qt5-wayland -- qt6-wayland -- swaylock -- slurp -- grim -- wl-clipboard -- wf-recorder -- wezterm -- hyprland-git -- hyprpicker-git -- cmus -- tut-bin -- ani-cli-git -- ytfzf-git -- mpv -- newsboat -- pulsemixer -- alsamixer -- vifm -- power-profiles-daemon -- gruvbox-dark-gtk -- gruvbox-dark-icons-gtk -- xcursor-simp1e-gruvbox-dark -- pipewire -- pipewire-v4l2 -- pipewire-alsa -- pipewire-pulse -- pipewire-jack -- pipewire-audio -- wireplumber -- imv -- wdisplays -- bluez -- bluez-utils -- btop -- htop -- brightnessctl -- cliphist -- emacs + +paru -S --needed hyrpland swww wezterm hyprpicker wofi waybar-hyprland swaylock dunst wayshot slurp wf-recorder wl-clipboard cliphist wdisplays polkit-gnome pipewire wireplumber pipewire-alsa pipewire-pulse pipewire-jack pipewire-audio pipewire-v4l2 xdg-desktop-portal xdg-desktop-portal-hyprland ttf-mononoki-nerd ttf-nerd-fonts-symbols ttf-nerd-fonts-symbols-mono brightnessctl playerctl udisks2 power-profiles-daemon bluez bluez-utils noto-fonts noto-fonts-extra noto-fonts-emoji neovide nvim btop htop pulsemixer alsa-utils tut newsboat cmus vifm w3m mpv zathura zathura-pdf-poppler zathura-cb imv fd ripgrep jq fish bat exa starship capnet-assist gruvbox-dark-gtk gruvbox-dark-icons-gtk xcursor-simp1e-gruvbox-dark gtk-engine-murrine qt5-wayland qt6-wayland kvantum ytfzf ani-cli # not managed by the package manager -- doom emacs +- lunarvim - flix-cli +