diff --git a/doom/config.el b/doom/config.el index 53b49ba..8394a49 100644 --- a/doom/config.el +++ b/doom/config.el @@ -141,3 +141,8 @@ ;; (add-to-list 'company-backends 'company-jedi)) (add-to-list 'company-backends 'company-shell) + +(setq jedi:setup-keys t) +(setq jedi:complete-on-dot t) +(setq jedi:environment-virtualenv ["source", "env/bin/activate"]) +(add-hook 'python-mode-hook 'jedi:setup) diff --git a/doom/packages.el b/doom/packages.el index 4e4d7d2..e3f9299 100644 --- a/doom/packages.el +++ b/doom/packages.el @@ -49,6 +49,7 @@ ;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) ;(unpin! t) +(package! pyenv-mode) (package! company-mode) (package! lsp-jedi) (package! company-jedi) diff --git a/ncmpcpp/ncmpcpp.bindings b/ncmpcpp/ncmpcpp.bindings index f2f368d..84a9142 100644 --- a/ncmpcpp/ncmpcpp.bindings +++ b/ncmpcpp/ncmpcpp.bindings @@ -13,547 +13,3 @@ def_key "h" def_key "ctrl-l" show_lyrics -#def_key "mouse" -# mouse_event -# -#def_key "up" -# scroll_up -# -#def_key "shift-up" -# select_item -# scroll_up -# -#def_key "down" -# scroll_down -# -#def_key "shift-down" -# select_item -# scroll_down -# -#def_key "[" -# scroll_up_album -# -#def_key "]" -# scroll_down_album -# -#def_key "{" -# scroll_up_artist -# -#def_key "}" -# scroll_down_artist -# -#def_key "page_up" -# page_up -# -#def_key "page_down" -# page_down -# -#def_key "home" -# move_home -# -#def_key "end" -# move_end -# -#def_key "insert" -# select_item -# -#def_key "enter" -# enter_directory -# -#def_key "enter" -# toggle_output -# -#def_key "enter" -# run_action -# -#def_key "enter" -# play_item -# -#def_key "space" -# add_item_to_playlist -# -#def_key "space" -# toggle_lyrics_update_on_song_change -# -#def_key "space" -# toggle_visualization_type -# -#def_key "delete" -# delete_playlist_items -# -#def_key "delete" -# delete_browser_items -# -#def_key "delete" -# delete_stored_playlist -# -#def_key "right" -# next_column -# -#def_key "right" -# slave_screen -# -#def_key "right" -# volume_up -# -#def_key "+" -# volume_up -# -#def_key "left" -# previous_column -# -#def_key "left" -# master_screen -# -#def_key "left" -# volume_down -# -#def_key "-" -# volume_down -# -#def_key ":" -# execute_command -# -#def_key "tab" -# next_screen -# -#def_key "shift-tab" -# previous_screen -# -#def_key "f1" -# show_help -# -#def_key "1" -# show_playlist -# -#def_key "2" -# show_browser -# -#def_key "2" -# change_browse_mode -# -#def_key "3" -# show_search_engine -# -#def_key "3" -# reset_search_engine -# -#def_key "4" -# show_media_library -# -#def_key "4" -# toggle_media_library_columns_mode -# -#def_key "5" -# show_playlist_editor -# -#def_key "6" -# show_tag_editor -# -#def_key "7" -# show_outputs -# -#def_key "8" -# show_visualizer -# -#def_key "=" -# show_clock -# -#def_key "@" -# show_server_info -# -#def_key "s" -# stop -# -#def_key "p" -# pause -# -#def_key ">" -# next -# -#def_key "<" -# previous -# -#def_key "ctrl-h" -# jump_to_parent_directory -# -#def_key "ctrl-h" -# replay_song -# -#def_key "backspace" -# jump_to_parent_directory -# -#def_key "backspace" -# replay_song -# -#def_key "backspace" -# play -# -#def_key "f" -# seek_forward -# -#def_key "b" -# seek_backward -# -#def_key "r" -# toggle_repeat -# -#def_key "z" -# toggle_random -# -#def_key "y" -# save_tag_changes -# -#def_key "y" -# start_searching -# -#def_key "y" -# toggle_single -# -#def_key "R" -# toggle_consume -# -#def_key "Y" -# toggle_replay_gain_mode -# -#def_key "T" -# toggle_add_mode -# -#def_key "|" -# toggle_mouse -# -#def_key "#" -# toggle_bitrate_visibility -# -#def_key "Z" -# shuffle -# -#def_key "x" -# toggle_crossfade -# -#def_key "X" -# set_crossfade -# -#def_key "u" -# update_database -# -#def_key "ctrl-s" -# sort_playlist -# -#def_key "ctrl-s" -# toggle_browser_sort_mode -# -#def_key "ctrl-s" -# toggle_media_library_sort_mode -# -#def_key "ctrl-r" -# reverse_playlist -# -#def_key "ctrl-f" -# apply_filter -# -#def_key "ctrl-_" -# select_found_items -# -#def_key "/" -# find -# -#def_key "/" -# find_item_forward -# -#def_key "?" -# find -# -#def_key "?" -# find_item_backward -# -#def_key "." -# next_found_item -# -#def_key "," -# previous_found_item -# -#def_key "w" -# toggle_find_mode -# -#def_key "e" -# edit_song -# -#def_key "e" -# edit_library_tag -# -#def_key "e" -# edit_library_album -# -#def_key "e" -# edit_directory_name -# -#def_key "e" -# edit_playlist_name -# -#def_key "e" -# edit_lyrics -# -#def_key "i" -# show_song_info -# -#def_key "I" -# show_artist_info -# -#def_key "g" -# jump_to_position_in_song -# -#def_key "l" -# show_lyrics -# -#def_key "ctrl-v" -# select_range -# -#def_key "v" -# reverse_selection -# -#def_key "V" -# remove_selection -# -#def_key "B" -# select_album -# -#def_key "a" -# add_selected_items -# -#def_key "c" -# clear_playlist -# -#def_key "c" -# clear_main_playlist -# -#def_key "C" -# crop_playlist -# -#def_key "C" -# crop_main_playlist -# -#def_key "m" -# move_sort_order_up -# -#def_key "m" -# move_selected_items_up -# -#def_key "n" -# move_sort_order_down -# -#def_key "n" -# move_selected_items_down -# -#def_key "M" -# move_selected_items_to -# -#def_key "A" -# add -# -#def_key "S" -# save_playlist -# -#def_key "o" -# jump_to_playing_song -# -#def_key "G" -# jump_to_browser -# -#def_key "G" -# jump_to_playlist_editor -# -#def_key "~" -# jump_to_media_library -# -#def_key "E" -# jump_to_tag_editor -# -#def_key "U" -# toggle_playing_song_centering -# -#def_key "P" -# toggle_display_mode -# -#def_key "\\" -# toggle_interface -# -#def_key "!" -# toggle_separators_between_albums -# -#def_key "L" -# toggle_lyrics_fetcher -# -#def_key "F" -# fetch_lyrics_in_background -# -#def_key "alt-l" -# toggle_fetching_lyrics_in_background -# -#def_key "ctrl-l" -# toggle_screen_lock -# -#def_key "`" -# toggle_library_tag_type -# -#def_key "`" -# refetch_lyrics -# -#def_key "`" -# add_random_items -# -#def_key "ctrl-p" -# set_selected_items_priority -# -#def_key "q" -# quit -# -##### General rules ##### -## -## 1) Because each action has runtime checks whether it's -## ok to run it, a few actions can be bound to one key. -## Actions will be bound in order given in configuration -## file. When a key is pressed, first action in order -## will test itself whether it's possible to run it. If -## test succeeds, action is executed and other actions -## bound to this key are ignored. If it doesn't, next -## action in order tests itself etc. -## -## 2) It's possible to bind more that one action at once -## to a key. It can be done using the following syntax: -## -## def_key "key" -## action1 -## action2 -## ... -## -## This creates a chain of actions. When such chain is -## executed, each action in chain is run until the end of -## chain is reached or one of its actions fails to execute -## due to its requirements not being met. If multiple actions -## and/or chains are bound to the same key, they will be -## consecutively run until one of them gets fully executed. -## -## 3) When ncmpcpp starts, bindings configuration file is -## parsed and then ncmpcpp provides "missing pieces" -## of default keybindings. If you want to disable some -## bindings, there is a special action called 'dummy' -## for that purpose. Eg. if you want to disable ability -## to crop playlists, you need to put the following -## into configuration file: -## -## def_key "C" -## dummy -## -## After that ncmpcpp will not bind any default action -## to this key. -## -## 4) To let you write simple macros, the following special -## actions are provided: -## -## - push_character "character" - pushes given special -## character into input queue, so it will be immediately -## picked by ncmpcpp upon next call to readKey function. -## Accepted values: mouse, up, down, page_up, page_down, -## home, end, space, enter, insert, delete, left, right, -## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\, -## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace. -## In addition, most of these names can be prefixed with -## alt-/ctrl-/shift- to be recognized with the appropriate -## modifier key(s). -## -## - push_characters "string" - pushes given string into -## input queue. -## -## - require_runnable "action" - checks whether given action -## is runnable and fails if it isn't. This is especially -## useful when mixed with previous two functions. Consider -## the following macro definition: -## -## def_key "key" -## push_characters "custom_filter" -## apply_filter -## -## If apply_filter can't be currently run, we end up with -## sequence of characters in input queue which will be -## treated just as we typed them. This may lead to unexpected -## results (in this case 'c' will most likely clear current -## playlist, 'u' will trigger database update, 's' will stop -## playback etc.). To prevent such thing from happening, we -## need to change above definition to this one: -## -## def_key "key" -## require_runnable "apply_filter" -## push_characters "custom_filter" -## apply_filter -## -## Here, first we test whether apply_filter can be actually run -## before we stuff characters into input queue, so if condition -## is not met, whole chain is aborted and we're fine. -## -## - require_screen "screen" - checks whether given screen is -## currently active. accepted values: browser, clock, help, -## media_library, outputs, playlist, playlist_editor, -## search_engine, tag_editor, visualizer, last_fm, lyrics, -## selected_items_adder, server_info, song_info, -## sort_playlist_dialog, tiny_tag_editor. -## -## - run_external_command "command" - runs given command using -## system() function. -## -## - run_external_console_command "command" - runs given console -## command using system() function. -## -## -## 5) In addition to binding to a key, you can also bind actions -## or chains of actions to a command. If it comes to commands, -## syntax is very similar to defining keys. Here goes example -## definition of a command: -## -## def_command "quit" [deferred] -## stop -## quit -## -## If you execute the above command (which can be done by -## invoking action execute_command, typing 'quit' and pressing -## enter), ncmpcpp will stop the player and then quit. Note the -## presence of word 'deferred' enclosed in square brackets. It -## tells ncmpcpp to wait for confirmation (ie. pressing enter) -## after you typed quit. Instead of 'deferred', 'immediate' -## could be used. Then ncmpcpp will not wait for confirmation -## (enter) and will execute the command the moment it sees it. -## -## Note: while command chains are executed, internal environment -## update (which includes current window refresh and mpd status -## update) is not performed for performance reasons. However, it -## may be desirable to do so in some situration. Therefore it's -## possible to invoke by hand by performing 'update enviroment' -## action. -## -## Note: There is a difference between: -## -## def_key "key" -## action1 -## -## def_key "key" -## action2 -## -## and -## -## def_key "key" -## action1 -## action2 -## -## First one binds two single actions to the same kmpc updateey whilst -## second one defines a chain of actions. The behavior of -## these two is different and is described in (1) and (2). -## -## Note: Function def_key accepts non-ascii characters. -## -##### List of unbound actions ##### -## -## The following actions are not bound to any key/command: -## -## - set_volume -## - load -## diff --git a/picom/picom.conf b/picom/picom.conf index c1c2399..d76ec1d 100644 --- a/picom/picom.conf +++ b/picom/picom.conf @@ -117,9 +117,11 @@ fade-out-step = 0.03; # Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) -# inactive-opacity = 1 -inactive-opacity = 0.9; -active-opacity = 0.98; +# inactive-opacity = 0.94; +# active-opacity = 0.99; + +active-opacity = 1; +inactive-opacity = 0.98; # Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) # frame-opacity = 1.0 @@ -202,7 +204,8 @@ blur-kern = "3x3box"; blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'", - "_GTK_FRAME_EXTENTS@:c" + "_GTK_FRAME_EXTENTS@:c", + "name *= 'rect-overlay'" ]; ################################# @@ -220,7 +223,7 @@ blur-background-exclude = [ backend = "glx"; # Enable/disable VSync. # vsync = false -vsync = false +vsync = true # Enable remote control via D-Bus. See the *D-BUS API* section below for more details. # dbus = false @@ -426,7 +429,7 @@ unredir-if-possible = false; wintypes: { - tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; + tooltip = { fade = true; shadow = true; opacity = 0.95; focus = true; full-shadow = false; }; dock = { shadow = false; } dnd = { shadow = false; } popup_menu = { opacity = 0.85; } @@ -435,20 +438,23 @@ wintypes: # ------------ # ibhagwan + + +corner-radius = 11; # corner-radius = 12; -corner-radius = 15; -rounded-corner-exclude = [ - #"window_type = 'normal'" - "class_g = 'Plasma'" - "class_g = 'plsama-desktop'" - "class_g = 'win7'" - "class_g = 'krunner'" - "class_g = 'plasmashell' window_type = 'notification'" +# corner-radius = 15; +rounded-corners-exclude = [ + "class_g = 'Plasma'", + "class_g = 'plsama-desktop'", + "class_g = 'win7'", + "class_g = 'krunner'", + "class_g = 'Polybar'", + "class_g = 'plasmashell'" ] blur: { - # method = "dual_kawase"; - method = "kawase"; + method = "dual_kawase"; + # method = "kawase"; strength = 7; background = false; background-frame = false; diff --git a/polybar-modules/bluetooth.desktop.ini b/polybar-modules/bluetooth.desktop.ini index b950f52..154994c 100644 --- a/polybar-modules/bluetooth.desktop.ini +++ b/polybar-modules/bluetooth.desktop.ini @@ -2,7 +2,7 @@ type = custom/script exec = rofi-bluetooth --status interval = 2 -click-left = ~/scripts/rofi-bluetooth.desktop +click-left = ~/SudacodeRice/scripts/rofi-bluetooth.desktop click-right = blueman-manager # format-foreground = #fc8353 format-foreground = #A8D385 diff --git a/polybar/config.desktop.ini b/polybar/config.desktop.ini index 8a40431..3fefed0 100644 --- a/polybar/config.desktop.ini +++ b/polybar/config.desktop.ini @@ -1,4 +1,4 @@ -include-file = $HOME/i3/include-modules.ini +include-file = $HOME/SudacodeRice/include-modules.ini [color] @@ -56,6 +56,8 @@ black = #000000 ;========================================================== [bar/main] +; https://github.com/polybar/polybar/issues/763 +monitor = ${env:MONITOR:} width = 100% height = 40 offset-x = 2.5% diff --git a/rofi/launchers/slate/slate_center.rasi b/rofi/launchers/slate/slate_center.rasi index dd213be..55f434f 100644 --- a/rofi/launchers/slate/slate_center.rasi +++ b/rofi/launchers/slate/slate_center.rasi @@ -8,7 +8,7 @@ */ configuration { - font: "FantasqueSansMono Nerd Font 64"; + font: "FantasqueSansMono Nerd Font 14"; show-icons: true; icon-theme: "Papirus"; display-drun: ""; diff --git a/rofi/rofidmenu.rasi b/rofi/rofidmenu.rasi new file mode 100644 index 0000000..e320338 --- /dev/null +++ b/rofi/rofidmenu.rasi @@ -0,0 +1,135 @@ +/******************************************************* + * ROFI configs i3 Apps menu for EndeavourOS + * Maintainer: joekamprad + *******************************************************/ +configuration { + font: "Sourcecode Pro Regular 10"; + show-icons: true; + icon-theme: "Arc-X-D"; + display-drun: "Apps"; + drun-display-format: "{name}"; + scroll-method: 0; + disable-history: false; + sidebar-mode: false; +} + +@import "~/.config/rofi/arc_dark_transparent_colors.rasi" + +window { + background-color: @background; + border: 0; + padding: 30; +} +listview { + lines: 10; + columns: 3; +} +mainbox { + border: 0; + padding: 0; +} +message { + border: 2px 0px 0px ; + border-color: @separatorcolor; + padding: 1px ; +} +textbox { + text-color: @foreground; +} +listview { + fixed-height: 0; + border: 8px 0px 0px ; + border-color: @separatorcolor; + spacing: 8px ; + scrollbar: false; + padding: 2px 0px 0px ; +} +element { + border: 0; + padding: 1px ; +} +element-text { + background-color: inherit; + text-color: inherit; +} +element.normal.normal { + background-color: @normal-background; + text-color: @normal-foreground; +} +element.normal.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; +} +element.normal.active { + background-color: @active-background; + text-color: @active-foreground; +} +element.selected.normal { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +element.selected.urgent { + background-color: @selected-urgent-background; + text-color: @selected-urgent-foreground; +} +element.selected.active { + background-color: @selected-active-background; + text-color: @selected-active-foreground; +} +element.alternate.normal { + background-color: @alternate-normal-background; + text-color: @alternate-normal-foreground; +} +element.alternate.urgent { + background-color: @alternate-urgent-background; + text-color: @alternate-urgent-foreground; +} +element.alternate.active { + background-color: @alternate-active-background; + text-color: @alternate-active-foreground; +} +scrollbar { + width: 4px ; + border: 0; + handle-color: @normal-foreground; + handle-width: 8px ; + padding: 0; +} +mode-switcher { + border: 2px 0px 0px ; + border-color: @separatorcolor; +} +button { + spacing: 0; + text-color: @normal-foreground; +} +button.selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +inputbar { + spacing: 0; + text-color: @normal-foreground; + padding: 1px ; +} +case-indicator { + spacing: 0; + text-color: @normal-foreground; +} +entry { + spacing: 0; + text-color: @normal-foreground; +} +prompt { + spacing: 0; + text-color: @normal-foreground; +} +inputbar { + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; +} +textbox-prompt-colon { + expand: false; + str: ":"; + margin: 0px 0.3em 0em 0em ; + text-color: @normal-foreground; +} diff --git a/rofi/rofimpd-desktop.rasi b/rofi/rofimpd-desktop.rasi new file mode 100644 index 0000000..22c87e5 --- /dev/null +++ b/rofi/rofimpd-desktop.rasi @@ -0,0 +1,56 @@ +* { + background-color: #282C34; + border-color: #2e343f; + text-color: #8ca0aa; + spacing: 0; + width: 70%; + font: "mononoki Nerd Font 12"; + lines: 10; + markup: true; + y-offset: 1.5%; +} + +rofi { + border: 1px; + border-color: tomato; +} + +inputbar { + border: 0 0 1px 0; + children: [prompt,entry]; +} + +prompt { + padding: 8px; + border: 0 1px 0 0; +} + +textbox { + background-color: #2e343f; + border: 0 0 1px 0; + border-color: #282C33; + padding: 8px 8px; +} + +entry { + padding: 5px; +} + +listview { + cycle: false; + margin: 0 0 -1px 0; + scrollbar: true; + border: 4px; +} + +element { + border: 0 1px 1px 0; + text-color: #a4ce82; + padding: 2px; +} + +element selected { + color: #a4ce82; + text-color: dodgerblue; + background-color: dodgerblue; +} diff --git a/scripts/launch_desktop.sh b/scripts/launch_desktop.sh index d6ef3da..533fbee 100755 --- a/scripts/launch_desktop.sh +++ b/scripts/launch_desktop.sh @@ -8,5 +8,13 @@ killall -q polybar # Wait until the processes have been shut down while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done +if type "xrandr"; then + for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do + MONITOR=$m polybar --reload -c ~/SudacodeRice/polybar/config.desktop.ini main & + done +else + polybar --reload example & +fi + # Launch bar1 and bar2 -polybar -c ~/i3/configs/config.desktop.ini main & +# polybar -c ~/SudacodeRice/polybar/config.desktop.ini main & diff --git a/scripts/picom.sh b/scripts/picom.sh index c356f28..8120b50 100755 --- a/scripts/picom.sh +++ b/scripts/picom.sh @@ -15,8 +15,8 @@ justKillIt=0 while getopts "vk" arg; do case $arg in - v) verbose=1;; - k) justKillIt=1;; + v) verbose=1 ;; + k) justKillIt=1 ;; esac done @@ -44,25 +44,24 @@ if [[ $justKillIt -eq 1 ]]; then fi res=$(pgrep -x picom) -if [[ $res != '' ]]; then +if [[ $res != '' ]]; then pid=$(pidof picom) - if [[ $verbose -eq 1 ]] - then + if [[ $verbose -eq 1 ]]; then echo 'killing process pid '$pid fi kill -9 $pid - while pgrep -x picom >/dev/null; do sleep 1; + while pgrep -x picom >/dev/null; do + sleep 1 done fi if [[ $verbose -eq 1 ]]; then - picom & + picom --config ~/.config/picom/picom.conf & else - picom &>/dev/null & + picom --config ~/.config/picom/picom.conf &>/dev/null & fi -if [[ $verbose -eq 1 ]] -then +if [[ $verbose -eq 1 ]]; then pid=$(pidof picom) echo 'launched new instance of picom with pid '$pid fi diff --git a/scripts/rofi-bluetooth b/scripts/rofi-bluetooth new file mode 100755 index 0000000..626704d --- /dev/null +++ b/scripts/rofi-bluetooth @@ -0,0 +1,311 @@ +#!/usr/bin/env bash +# __ _ _ _ _ _ _ +# _ __ ___ / _(_) | |__ | |_ _ ___| |_ ___ ___ | |_| |__ +# | '__/ _ \| |_| |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __| '_ \ +# | | | (_) | _| |_____| |_) | | |_| | __/ || (_) | (_) | |_| | | | +# |_| \___/|_| |_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__|_| |_| +# +# Author: Nick Clyde (clydedroid) +# +# A script that generates a rofi menu that uses bluetoothctl to +# connect to bluetooth devices and display status info. +# +# Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu) +# Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl) +# +# Depends on: +# Arch repositories: rofi, bluez-utils (contains bluetoothctl) + +# Constants +divider="---------" +goback="Back" + +# Checks if bluetooth controller is powered on +power_on() { + if bluetoothctl show | grep -q "Powered: yes"; then + return 0 + else + return 1 + fi +} + +# Toggles power state +toggle_power() { + if power_on; then + bluetoothctl power off + show_menu + else + if rfkill list bluetooth | grep -q 'blocked: yes'; then + rfkill unblock bluetooth && sleep 3 + fi + bluetoothctl power on + show_menu + fi +} + +# Checks if controller is scanning for new devices +scan_on() { + if bluetoothctl show | grep -q "Discovering: yes"; then + echo "Scan: on" + return 0 + else + echo "Scan: off" + return 1 + fi +} + +# Toggles scanning state +toggle_scan() { + if scan_on; then + kill $(pgrep -f "bluetoothctl scan on") + bluetoothctl scan off + show_menu + else + bluetoothctl scan on & + echo "Scanning..." + sleep 5 + show_menu + fi +} + +# Checks if controller is able to pair to devices +pairable_on() { + if bluetoothctl show | grep -q "Pairable: yes"; then + echo "Pairable: on" + return 0 + else + echo "Pairable: off" + return 1 + fi +} + +# Toggles pairable state +toggle_pairable() { + if pairable_on; then + bluetoothctl pairable off + show_menu + else + bluetoothctl pairable on + show_menu + fi +} + +# Checks if controller is discoverable by other devices +discoverable_on() { + if bluetoothctl show | grep -q "Discoverable: yes"; then + echo "Discoverable: on" + return 0 + else + echo "Discoverable: off" + return 1 + fi +} + +# Toggles discoverable state +toggle_discoverable() { + if discoverable_on; then + bluetoothctl discoverable off + show_menu + else + bluetoothctl discoverable on + show_menu + fi +} + +# Checks if a device is connected +device_connected() { + device_info=$(bluetoothctl info "$1") + if echo "$device_info" | grep -q "Connected: yes"; then + return 0 + else + return 1 + fi +} + +# Toggles device connection +toggle_connection() { + if device_connected $1; then + bluetoothctl disconnect $1 + device_menu "$device" + else + bluetoothctl connect $1 + device_menu "$device" + fi +} + +# Checks if a device is paired +device_paired() { + device_info=$(bluetoothctl info "$1") + if echo "$device_info" | grep -q "Paired: yes"; then + echo "Paired: yes" + return 0 + else + echo "Paired: no" + return 1 + fi +} + +# Toggles device paired state +toggle_paired() { + if device_paired $1; then + bluetoothctl remove $1 + device_menu "$device" + else + bluetoothctl pair $1 + device_menu "$device" + fi +} + +# Checks if a device is trusted +device_trusted() { + device_info=$(bluetoothctl info "$1") + if echo "$device_info" | grep -q "Trusted: yes"; then + echo "Trusted: yes" + return 0 + else + echo "Trusted: no" + return 1 + fi +} + +# Toggles device connection +toggle_trust() { + if device_trusted $1; then + bluetoothctl untrust $1 + device_menu "$device" + else + bluetoothctl trust $1 + device_menu "$device" + fi +} + +# Prints a short string with the current bluetooth status +# Useful for status bars like polybar, etc. +print_status() { + if power_on; then + printf '' + + mapfile -t paired_devices < <(bluetoothctl paired-devices | grep Device | cut -d ' ' -f 2) + counter=0 + + for device in "${paired_devices[@]}"; do + if device_connected $device; then + device_alias=$(bluetoothctl info $device | grep "Alias" | cut -d ' ' -f 2-) + + if [ $counter -gt 0 ]; then + printf ", %s" "$device_alias" + else + printf " %s" "$device_alias" + fi + + ((counter++)) + fi + done + printf "\n" + else + echo "" + fi +} + +# A submenu for a specific device that allows connecting, pairing, and trusting +device_menu() { + device=$1 + + # Get device name and mac address + device_name=$(echo $device | cut -d ' ' -f 3-) + mac=$(echo $device | cut -d ' ' -f 2) + + # Build options + if device_connected $mac; then + connected="Connected: yes" + else + connected="Connected: no" + fi + paired=$(device_paired $mac) + trusted=$(device_trusted $mac) + 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")" + + # Match chosen option to command + case $chosen in + "" | $divider) + echo "No option chosen." + ;; + $connected) + toggle_connection $mac + ;; + $paired) + toggle_paired $mac + ;; + $trusted) + toggle_trust $mac + ;; + $goback) + show_menu + ;; + esac +} + +# Opens a rofi menu with current bluetooth status and options to connect +show_menu() { + # Get menu options + if power_on; then + power="Power: on" + + # Human-readable names of devices, one per line + # If scan is off, will only list paired devices + devices=$(bluetoothctl devices | grep Device | cut -d ' ' -f 3-) + + # Get controller flags + scan=$(scan_on) + pairable=$(pairable_on) + discoverable=$(discoverable_on) + + # Options passed to rofi + options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit" + else + power="Power: off" + options="$power\nExit" + fi + + # Open rofi menu, read chosen option + chosen="$(echo -e "$options" | $rofi_command "Bluetooth")" + + # Match chosen option to command + case $chosen in + "" | $divider) + echo "No option chosen." + ;; + $power) + toggle_power + ;; + $scan) + toggle_scan + ;; + $discoverable) + toggle_discoverable + ;; + $pairable) + toggle_pairable + ;; + *) + device=$(bluetoothctl devices | grep "$chosen") + # Open a submenu if a device is selected + if [[ $device ]]; then device_menu "$device"; fi + ;; + esac +} + +# Rofi command to pipe into, can add any options here +rofi_command="rofi -dmenu -p" + +case "$1" in + --status) + print_status + ;; + *) + show_menu + ;; +esac diff --git a/scripts/rofi-bluetooth.desktop b/scripts/rofi-bluetooth.desktop new file mode 100755 index 0000000..d9ba427 --- /dev/null +++ b/scripts/rofi-bluetooth.desktop @@ -0,0 +1,311 @@ +#!/usr/bin/env bash +# __ _ _ _ _ _ _ +# _ __ ___ / _(_) | |__ | |_ _ ___| |_ ___ ___ | |_| |__ +# | '__/ _ \| |_| |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __| '_ \ +# | | | (_) | _| |_____| |_) | | |_| | __/ || (_) | (_) | |_| | | | +# |_| \___/|_| |_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__|_| |_| +# +# Author: Nick Clyde (clydedroid) +# +# A script that generates a rofi menu that uses bluetoothctl to +# connect to bluetooth devices and display status info. +# +# Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu) +# Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl) +# +# Depends on: +# Arch repositories: rofi, bluez-utils (contains bluetoothctl) + +# Constants +divider="---------" +goback="Back" + +# Checks if bluetooth controller is powered on +power_on() { + if bluetoothctl show | grep -q "Powered: yes"; then + return 0 + else + return 1 + fi +} + +# Toggles power state +toggle_power() { + if power_on; then + bluetoothctl power off + show_menu + else + if rfkill list bluetooth | grep -q 'blocked: yes'; then + rfkill unblock bluetooth && sleep 3 + fi + bluetoothctl power on + show_menu + fi +} + +# Checks if controller is scanning for new devices +scan_on() { + if bluetoothctl show | grep -q "Discovering: yes"; then + echo "Scan: on" + return 0 + else + echo "Scan: off" + return 1 + fi +} + +# Toggles scanning state +toggle_scan() { + if scan_on; then + kill $(pgrep -f "bluetoothctl scan on") + bluetoothctl scan off + show_menu + else + bluetoothctl scan on & + echo "Scanning..." + sleep 5 + show_menu + fi +} + +# Checks if controller is able to pair to devices +pairable_on() { + if bluetoothctl show | grep -q "Pairable: yes"; then + echo "Pairable: on" + return 0 + else + echo "Pairable: off" + return 1 + fi +} + +# Toggles pairable state +toggle_pairable() { + if pairable_on; then + bluetoothctl pairable off + show_menu + else + bluetoothctl pairable on + show_menu + fi +} + +# Checks if controller is discoverable by other devices +discoverable_on() { + if bluetoothctl show | grep -q "Discoverable: yes"; then + echo "Discoverable: on" + return 0 + else + echo "Discoverable: off" + return 1 + fi +} + +# Toggles discoverable state +toggle_discoverable() { + if discoverable_on; then + bluetoothctl discoverable off + show_menu + else + bluetoothctl discoverable on + show_menu + fi +} + +# Checks if a device is connected +device_connected() { + device_info=$(bluetoothctl info "$1") + if echo "$device_info" | grep -q "Connected: yes"; then + return 0 + else + return 1 + fi +} + +# Toggles device connection +toggle_connection() { + if device_connected $1; then + bluetoothctl disconnect $1 + device_menu "$device" + else + bluetoothctl connect $1 + device_menu "$device" + fi +} + +# Checks if a device is paired +device_paired() { + device_info=$(bluetoothctl info "$1") + if echo "$device_info" | grep -q "Paired: yes"; then + echo "Paired: yes" + return 0 + else + echo "Paired: no" + return 1 + fi +} + +# Toggles device paired state +toggle_paired() { + if device_paired $1; then + bluetoothctl remove $1 + device_menu "$device" + else + bluetoothctl pair $1 + device_menu "$device" + fi +} + +# Checks if a device is trusted +device_trusted() { + device_info=$(bluetoothctl info "$1") + if echo "$device_info" | grep -q "Trusted: yes"; then + echo "Trusted: yes" + return 0 + else + echo "Trusted: no" + return 1 + fi +} + +# Toggles device connection +toggle_trust() { + if device_trusted $1; then + bluetoothctl untrust $1 + device_menu "$device" + else + bluetoothctl trust $1 + device_menu "$device" + fi +} + +# Prints a short string with the current bluetooth status +# Useful for status bars like polybar, etc. +print_status() { + if power_on; then + printf '' + + mapfile -t paired_devices < <(bluetoothctl paired-devices | grep Device | cut -d ' ' -f 2) + counter=0 + + for device in "${paired_devices[@]}"; do + if device_connected $device; then + device_alias=$(bluetoothctl info $device | grep "Alias" | cut -d ' ' -f 2-) + + if [ $counter -gt 0 ]; then + printf ", %s" "$device_alias" + else + printf " %s" "$device_alias" + fi + + ((counter++)) + fi + done + printf "\n" + else + echo "" + fi +} + +# A submenu for a specific device that allows connecting, pairing, and trusting +device_menu() { + device=$1 + + # Get device name and mac address + device_name=$(echo $device | cut -d ' ' -f 3-) + mac=$(echo $device | cut -d ' ' -f 2) + + # Build options + if device_connected $mac; then + connected="Connected: yes" + else + connected="Connected: no" + fi + paired=$(device_paired $mac) + trusted=$(device_trusted $mac) + 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")" + + # Match chosen option to command + case $chosen in + "" | $divider) + echo "No option chosen." + ;; + $connected) + toggle_connection $mac + ;; + $paired) + toggle_paired $mac + ;; + $trusted) + toggle_trust $mac + ;; + $goback) + show_menu + ;; + esac +} + +# Opens a rofi menu with current bluetooth status and options to connect +show_menu() { + # Get menu options + if power_on; then + power="Power: on" + + # Human-readable names of devices, one per line + # If scan is off, will only list paired devices + devices=$(bluetoothctl devices | grep Device | cut -d ' ' -f 3-) + + # Get controller flags + scan=$(scan_on) + pairable=$(pairable_on) + discoverable=$(discoverable_on) + + # Options passed to rofi + options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit" + else + power="Power: off" + options="$power\nExit" + fi + + # Open rofi menu, read chosen option + chosen="$(echo -e "$options" | $rofi_command "Bluetooth")" + + # Match chosen option to command + case $chosen in + "" | $divider) + echo "No option chosen." + ;; + $power) + toggle_power + ;; + $scan) + toggle_scan + ;; + $discoverable) + toggle_discoverable + ;; + $pairable) + toggle_pairable + ;; + *) + device=$(bluetoothctl devices | grep "$chosen") + # Open a submenu if a device is selected + if [[ $device ]]; then device_menu "$device"; fi + ;; + esac +} + +# Rofi command to pipe into, can add any options here +rofi_command="rofi -config ~/SudacodeRice/rofi/rofidmenu.rasi -dmenu -p" + +case "$1" in + --status) + print_status + ;; + *) + show_menu + ;; +esac diff --git a/scripts/rofi-mpd b/scripts/rofi-mpd index 99aff4f..9618abf 100755 --- a/scripts/rofi-mpd +++ b/scripts/rofi-mpd @@ -1,7 +1,7 @@ #!/usr/bin/env sh -m() { rofi -l 12 -markup -theme ~/SudacodeRice/rofi/rofi-mpd.rasi -dmenu -i "$@" ;} -mb() { rofi -l 24 -markup -theme ~/SudacodeRice/rofi/rofi-mpd.rasi -dmenu -i -kb-custom-1 "Alt+q" "$@" ;} +m() { rofi -theme ~/SudacodeRice/rofi/rofimpd-desktop.rasi -dmenu -i "$@"; } +mb() { rofi -theme ~/SudacodeRice/rofi/rofimpd-desktop.rasi -dmenu -i -kb-custom-1 "Alt+q" "$@"; } artist() { lines="$(mpc list artist | wc -l)" @@ -29,15 +29,15 @@ song() { } case "$1" in - -l | --library) mode=Library ;; - -A | --album) mode=Album ;; - -s | --song) mode=Song ;; - -a | --ask) - MODE=$(printf "Library\nAlbum\nSong" | m -p "Choose mode" -l 3) - mode=$MODE - ;; - -h | --help) - echo " +-l | --library) mode=Library ;; +-A | --album) mode=Album ;; +-s | --song) mode=Song ;; +-a | --ask) + MODE=$(printf "Library\nAlbum\nSong" | m -p "Choose mode" -l 3) + mode=$MODE + ;; +-h | --help) + echo " usage: rofi-mpd [-h] [-l] [-s] [-a] arguments: @@ -51,35 +51,35 @@ case "$1" in enter play song/album now Alt+q add song/album to queue " - exit - ;; + exit + ;; esac case "$mode" in - Library) - artist=$(artist) - [ ! "$artist" ] && exit - album=$(a_album "$artist") - cod=$? - [ ! "$album" ] && exit - [ "$cod" -eq 10 ] || mpc clear - mpc find artist "$artist" album "$album" | mpc add - mpc play >/dev/null - ;; - Song) - song=$(song) - cod=$? - [ ! "$song" ] && exit - [ "$cod" -eq 10 ] || mpc clear - mpc search "(title==\"$song\")" | mpc add - mpc play >/dev/null - ;; - Album) - album=$(album) - cod=$? - [ ! "$album" ] && exit - [ "$cod" -eq 10 ] || mpc clear - mpc find album "$album" | mpc add - mpc play >/dev/null - ;; +Library) + artist=$(artist) + [ ! "$artist" ] && exit + album=$(a_album "$artist") + cod=$? + [ ! "$album" ] && exit + [ "$cod" -eq 10 ] || mpc clear + mpc find artist "$artist" album "$album" | mpc add + mpc play >/dev/null + ;; +Song) + song=$(song) + cod=$? + [ ! "$song" ] && exit + [ "$cod" -eq 10 ] || mpc clear + mpc search "(title==\"$song\")" | mpc add + mpc play >/dev/null + ;; +Album) + album=$(album) + cod=$? + [ ! "$album" ] && exit + [ "$cod" -eq 10 ] || mpc clear + mpc find album "$album" | mpc add + mpc play >/dev/null + ;; esac diff --git a/scripts/rofi/rofi-picom.sh b/scripts/rofi/rofi-picom.sh new file mode 100755 index 0000000..de893ca --- /dev/null +++ b/scripts/rofi/rofi-picom.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +ARGS=( + "Enable Picom" + "Disable Picom" +) + +CHOICE=$(printf "%s\n" "${ARGS[@]}" | rofi -config ~/SudacodeRice/rofi/rofidmenu.rasi -dmenu -l 5 -i -p "Picom Options") + +# printf '%s\n' {$CHOICE} | awk '{print $NF}' + +echo "$CHOICE" + +if [[ "$CHOICE" == "Enable Picom" ]]; then + ~/SudacodeRice/scripts/picom.sh +elif [[ "$CHOICE" == "Disable Picom" ]]; then + ~/SudacodeRice/scripts/picom.sh -k +fi diff --git a/scripts/rofi/rofi-ssh.sh b/scripts/rofi/rofi-ssh.sh new file mode 100755 index 0000000..08f1d4c --- /dev/null +++ b/scripts/rofi/rofi-ssh.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +CMD=$(ssh) + +ARGS=( + "Depot - root@dc1lxpdepot01.westlakefinancial.com" + "Depot02 - kyasuda@dc1lxsdepot02.westlakefinancial.com" + "Jobrunner01 - root@dc1vpjobrunner01.westlakefinancial.com" + "Jobrunner02 - root@mdr-s-jobrunner02.westlakefinancial.com" + "Jobrunner03 - kyasuda@dc1vsjobrunner03.westlakefinancial.com" + "Quit" +) + +CHOICE=$(printf "%s\n" "${ARGS[@]}" | rofi -config ~/SudacodeRice/rofi/rofidmenu.rasi -dmenu -l 5 -i -p "SSH Helper") + +if [[ "$CHOICE" == "Quit" ]]; then + printf "%s\n" "NICE" && exit 1 +fi + +if [ "$CHOICE" ]; then + TARGET=$(printf "%s\n" "${CHOICE}" | awk '{print $1}') + INFO=$(printf "%s\n" "${CHOICE}" | awk '{print $NF}') + echo "TARGET $TARGET" + python ~/Work/scripts/pass.py "$TARGET" + alacritty -e ssh "$INFO" +else + printf "%s\n" "DONE." && exit 0 +fi