From 95cf6363f357af1722e1c12c8e5431d329fe2ac6 Mon Sep 17 00:00:00 2001 From: Roland Thomas Date: Wed, 8 Feb 2023 11:16:16 -0500 Subject: [PATCH] Update --- .bash_profile | 6 +- .bashrc | 21 +- .config/alacritty/alacritty.yml | 17 +- .config/fish/abbreviations.fish | 11 + .config/fish/config.fish | 9 + .config/neofetch/config.conf | 12 +- pkg.list => .config/pkg.list | 2 - .config/qtile/background.jpg | Bin 25001 -> 50260 bytes .config/qtile/config.py | 997 +++++++++++++++++++++++++++----- .config/qtile/config.py.old | 440 ++++++++++++++ .config/spotifyd/spotifyd.conf | 2 +- .tmux.conf | 34 +- .vimrc | 21 +- .xinitrc | 19 +- 14 files changed, 1404 insertions(+), 187 deletions(-) create mode 100644 .config/fish/abbreviations.fish rename pkg.list => .config/pkg.list (98%) create mode 100644 .config/qtile/config.py.old diff --git a/.bash_profile b/.bash_profile index 9ec639b..94d4e80 100644 --- a/.bash_profile +++ b/.bash_profile @@ -4,9 +4,7 @@ [[ -f ~/.bashrc ]] && . ~/.bashrc -# if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then -if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" == 1 ]; then +#if [ -z "${DISPLAY}"] && [ "${XDG_VTNR}" == 1 ]; then +if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then exec startx - exec picom -b fi - diff --git a/.bashrc b/.bashrc index a28ad79..019a2d6 100644 --- a/.bashrc +++ b/.bashrc @@ -2,6 +2,9 @@ # ~/.bashrc # +export PYTHONPATH=~/Documents/Course-Material/module-o/book/src +export MANPAGER="sh -c 'col -bx | bat -l man -p'" + # If not running interactively, don't do anything [[ $- != *i* ]] && return @@ -17,12 +20,26 @@ alias config='git --git-dir=$HOME/config-files/ --work-tree=$HOME' # aliases alias ..='cd ..' +alias vi='vim' +alias ip='ip -color=auto' +# vi key bindings +set -o vi PS1='[\u@\h \W]\$ ' # starship prompt eval "$(starship init bash)" -# colorscript -colorscript random +colorscript -e roshar + +case ${TERM} in + + xterm*|rxvt*|alacritty*|Eterm|aterm|kterm|gnome*) + PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + + ;; + screen*) + PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + ;; +esac diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml index b4869d1..74d5eed 100644 --- a/.config/alacritty/alacritty.yml +++ b/.config/alacritty/alacritty.yml @@ -7,9 +7,22 @@ # License: MIT # References: # https://github.com/alacritty/alacritty -window: - opacity: .80 +key_bindings: + - { key: Return, mods: Control|Shift, action: SpawnNewInstance } + +dynamic_title: true + +window: + opacity: .95 + +font: + normal: + family: "Hack Nerd Font Mono" + bold: + family: "Hack Nerd Font Mono" + italic: + family: "Hack Nerd Font Mono" colors: primary: diff --git a/.config/fish/abbreviations.fish b/.config/fish/abbreviations.fish new file mode 100644 index 0000000..0d572f9 --- /dev/null +++ b/.config/fish/abbreviations.fish @@ -0,0 +1,11 @@ +abbr ls 'exa --color=auto' +abbr sl 'exa --color=auto' +abbr ll 'exa -la --color=auto' +abbr ip 'ip --color=auto' + +abbr gs 'git status' +abbr gcm 'git commit -m' +abbr config 'git --git-dir=$HOME/config-files/ --work-tree=$HOME' + +abbr .. 'cd ..' +abbr vi 'vim' diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 16f201c..87ce294 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -1,5 +1,14 @@ +set --export EDITOR "vim" +set --export PF_INFO "ascii title os host kernel uptime pkgs memory wm shell editor palette" + if status is-interactive # Commands to run in interactive sessions can go here end +fish_add_path "$HOME/.local/bin" +export PYTHONPATH="$HOME/Documents/Course-Material/module-o/book/src" +export MANPAGER="sh -c 'col -bx | bat -l man -p'" + +source "$HOME/.config/fish/abbreviations.fish" + starship init fish | source diff --git a/.config/neofetch/config.conf b/.config/neofetch/config.conf index cada780..e564d7f 100644 --- a/.config/neofetch/config.conf +++ b/.config/neofetch/config.conf @@ -14,8 +14,8 @@ print_info() { info "DE" de info "WM" wm info "WM Theme" wm_theme - info "Theme" theme - info "Icons" icons + # info "Theme" theme + # info "Icons" icons info "Terminal" term info "Terminal Font" term_font info "CPU" cpu @@ -24,7 +24,7 @@ print_info() { # info "GPU Driver" gpu_driver # Linux/macOS only # info "CPU Usage" cpu_usage - # info "Disk" disk + info "Disk" disk # info "Battery" battery # info "Font" font # info "Song" song @@ -116,7 +116,7 @@ uptime_shorthand="on" # Example: # on: '1801MiB / 7881MiB (22%)' # off: '1801MiB / 7881MiB' -memory_percent="off" +memory_percent="on" # Change memory output unit. # @@ -249,7 +249,7 @@ cpu_cores="logical" # C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' # F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' # off: 'Intel i7-6500U (4) @ 3.1GHz' -cpu_temp="C" +cpu_temp="on" # GPU @@ -387,7 +387,7 @@ de_version="on" # disk_show=('/'): # 'Disk (/): 74G / 118G (66%)' # -disk_show=('/') +disk_show=('/' '/home') # Disk subtitle. # What to append to the Disk subtitle. diff --git a/pkg.list b/.config/pkg.list similarity index 98% rename from pkg.list rename to .config/pkg.list index 919e348..5b01e96 100644 --- a/pkg.list +++ b/.config/pkg.list @@ -107,7 +107,6 @@ xorgxrdp-glamor 0.2.18-1 xrdp 0.9.19-2 xsel 1.2.0.20200527-2 yasm 1.3.0-5 -yay 11.3.1-1 zip 3.0-10 zsh 5.9-1 nerd-fonts-git 1:2.3.0.RC.r58.g498ebf372-1 @@ -117,4 +116,3 @@ shell-color-scripts 1.1.r105.ae5a9c8-1 spotify-tui 0.25.0-2 xorgxrdp-glamor 0.2.18-1 xrdp 0.9.19-2 -yay 11.3.1-1 diff --git a/.config/qtile/background.jpg b/.config/qtile/background.jpg index 8d79915c838791c39d6025fddf81719957a1b782..1bbc3d68dbef4cb7c62ecf3e76379b27453345b3 100644 GIT binary patch literal 50260 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

|(T;oZa_J}329D?BqB#FHywJFTp&G9~s6 z(tp*)un;ghWCt<>O=Y`9D5%cNIdTlN(sDY{n)nXQgPu>gw)1FmgH40KKrm3>@OJ6Z z9tM3_#@V$jgY&j`K_3X!(#H8`WaW{xd_zH(rT&QMZfA}yD~9E=_OWnyxs=iweQK{3 zV7>@U|0d4Y#FrQwMEg2W9xg=@6=X1w%2|m28fK%7#L?azn%m^OJ@ z@#;a2jLa|723{Viz2`_hnz^$WYbdErTK9>9&doNb0+`WIc%*HBy7)iH?s~td&GG4({>}cx=>m>aB5AV{B z@Ai8REEv@FWV>sR=|;I#yYj=yZ?@Q0mV=J!XH1oHZK~pK*i`jy3eQ(fMGA>_y-c0$ z*ymEt(eV#dww~bCg6jdvV}KwvF8V!D4R5lqKvx8FxgJ~#q5?`(nqs}srK8Xc%KOWs zq(ERJ=?Z!9O1D$z^+8!p-=I%mTAW& zw8kMB6kGIxTz;D*_-Z}WHD_dRGJ|WSK?w}r!nzDr2?CV|x5fPTxe%>^_1b7;#9(~5 zvi*W(MW^~J)QX}fGt@x9Ayujn#p5yfE)lxbwb)9}`eVAO&;9^CH1RoUQV}@H~(z3xw zV_V?eyufysKSgmDUg^n%2nr^#Qp_ruJ$ZnJqxLjMt4K9QId{U$NTVtXamOT(=19FL e_C@PQf=F<7&Yro;>$lFgOf8)L=idXY-uxeqsfP*x literal 25001 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 bdz?V>lPJEQ*S)KFAcR#EH57{PSqA-o`(BZ= diff --git a/.config/qtile/config.py b/.config/qtile/config.py index c1c1bf1..9c7c81b 100644 --- a/.config/qtile/config.py +++ b/.config/qtile/config.py @@ -24,24 +24,44 @@ # SOFTWARE. from libqtile import bar, layout, widget, extension -from libqtile.config import Click, Drag, Group, Key, Match, Screen +from libqtile.config import Click, Drag, Group, Key, KeyChord, Match, Screen, ScratchPad, DropDown +from libqtile.scripts.main import VERSION from libqtile.lazy import lazy -from libqtile.utils import guess_terminal -from unicodes import left_arrow, right_arrow, right_half_circle, lower_left_triangle -mod = "mod4" -terminal = guess_terminal() -colors = { - 'purple':'52497e', - 'teal':'559d92', - 'dark_orange':'9d6e55', - 'orange':'e7510b', - 'dark_red':'9d5560', - 'dark_blue':'2e3440', - 'blue':'8fbcbb', - 'red':'bf616a', - } +from subprocess import run +mod = 'mod4' +terminal = 'alacritty' +opaque_config = '--config-file /home/roland/.config/alacritty/alacritty-opaque.yml' +terminal_opaque = f'alacritty {opaque_config}' +qtile_config = f'alacritty {opaque_config} -e vim /home/roland/.config/qtile/config.py' +ipython = f'alacritty {opaque_config} -e ipython' +python = f'alacritty {opaque_config} -e python' +vpn_vta = 'alacritty -e /home/roland/.local/bin/vpn' +rdp = 'alacritty -e /home/roland/.local/bin/bjendal' +rofi = 'rofi -combi-modi window,drun,ssh -theme nord -font "hack 10" -show drun -icon-theme "Papirus" -show-icons' +qtile_dir = '/home/roland/.config/qtile/' + +flameshot = '#8800aa' +nord = { + 'nord0':'#2E3440', + 'nord1':'#3B4252', + 'nord2':'#434C5E', + 'nord3':'#4C566A', + 'nord4':'#D8DEE9', + 'nord5':'#E5E9F0', + 'nord6':'#ECEFF4', + 'nord7':'#8FBCBB', + 'nord8':'#88C0D0', + 'nord9':'#81A1C1', + 'nord10':'#5E81AC', + 'nord11':'#BF616A', + 'nord12':'#D08770', + 'nord13':'#EBCB8B', + 'nord14':'#A3BE8C', + 'nord15':'#B48EAD', + } +# Keys keys = [ # A list of available commands that can be bound to keys can be found # at https://docs.qtile.org/en/latest/manual/config/lazy.html @@ -57,6 +77,7 @@ keys = [ Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"), Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"), Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), + Key([mod, "shift"], "space", lazy.layout.flip()), # Grow windows. If current window is on the edge of screen and direction # will be to screen edge - window would shrink. Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"), @@ -68,26 +89,87 @@ keys = [ # Split = all windows displayed # Unsplit = 1 window displayed, like Max layout, but still with # multiple stack panes - Key( - [mod, "shift"], - "Return", - lazy.layout.toggle_split(), - desc="Toggle between split and unsplit sides of stack", - ), + #Key( + #[mod, "shift"], + #"Return", + #lazy.layout.toggle_split(), + #desc="Toggle between split and unsplit sides of stack", + #), Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), # Toggle between different layouts as defined below Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), Key([mod], "w", lazy.window.kill(), desc="Kill focused window"), Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"), Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), - Key([mod, "control"], "s", lazy.hide_show_bar()), - # Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"), - Key([mod], "r", lazy.run_extension(extension.DmenuRun( - dmenu_prompt = ">", - ))) + Key([mod], "r", lazy.spawn(rofi), desc="Launch rofi"), + Key([mod], "z", lazy.run_extension(extension.WindowList()), desc="Launch window list"), + # LAUNCH chord + KeyChord([mod], "e", [ + Key([], "e", lazy.group['scratchpad'].dropdown_toggle('term'), desc="Launch Scratchpad Terminal"), + Key([], "i", lazy.group['scratchpad'].dropdown_toggle('ipython'), desc="Launch IPython"), + Key([], "p", lazy.group['scratchpad'].dropdown_toggle('python'), desc="Launch python"), + Key([], "q", lazy.group['scratchpad'].dropdown_toggle('qtile-config'), desc="Launch qtile config"), + Key([], "v", lazy.group['scratchpad'].dropdown_toggle('vpn'), desc="Launch vpn"), + Key([], "x", lazy.group['scratchpad'].dropdown_toggle('xrdp'), desc="Launch xrdp: bjendal"), + Key([], "s", lazy.spawn('passmenu'), desc="Launch pass"), + Key([], "r", lazy.run_extension(extension.DmenuRun(dmenu_prompt = "\uf101")), desc="Launch dmenu"), + # FLAMESHOT chord + KeyChord([], "f", [ + Key([], "f", lazy.spawn('flameshot'), desc="Launch flameshot"), + Key([], "s", lazy.spawn('flameshot gui'), desc="Take screenshot"), + Key([], "a", lazy.spawn('flameshot full'), desc="Take screenshot"), + Key([], "c", lazy.spawn('flameshot full --clipboard'), desc="Take screenshot"), + Key([], "l", lazy.spawn('flameshot launcher'), desc="Take screenshot"), + ], + name='flameshot', + ) + ], + #mode=True, + name="launch", + ), + # TOGGLE chord + KeyChord([mod], "d", [ + Key([], "s", lazy.hide_show_bar(), desc="Toggle show bar"), + # BOXES chord + KeyChord([], "t", [ + Key([], "1", lazy.widget['widget_box_1'].toggle(), desc="Toggle Widget Box 1"), + Key([], "2", lazy.widget['widget_box_2'].toggle(), desc="Toggle Widget Box 2"), + Key([], "3", lazy.widget['widget_box_3'].toggle(), desc="Toggle Widget Box 3"), + Key([], "t", lazy.widget['widget_box_1'].toggle(), + lazy.widget['widget_box_2'].toggle(), + lazy.widget['widget_box_3'].toggle(), + lazy.widget['media_box_1'].toggle(), + lazy.widget['media_box_2'].toggle(), + lazy.widget['media_box_3'].toggle(), desc="Toggle Widget Boxes"), + ], + name="boxes", + ), + ], + name="toggle", + ), + # MEDIA chord + KeyChord([mod], "s", [ + Key([], "s", lazy.widget['spotifyd'].play_pause(), desc="Play - Pause"), + Key([], "h", lazy.widget['spotifyd'].previous(), desc="Previous"), + Key([], "l", lazy.widget['spotifyd'].next(), desc="Next"), + ], + name="media", + ), + Key([mod, "shift"], "u", lazy.group['scratchpad'].dropdown_toggle('hotkeys'), desc="Show Hot Keys"), ] -groups = [Group(i) for i in "123456789"] +# Groups +groups = [Group(i) for i in "123456"] + +discord_match = Match(wm_class="discord") +obsidian_match = Match(wm_class="obsidian") +xrdp_match = Match(wm_class="xfreerdp") +vm_match = Match(wm_class="VirtualBox Machine") +groups.extend([Group("7", label='\ue007')]) +groups.extend([Group("8", matches=[obsidian_match], label='\ue13a')]) +groups.extend([Group("9", matches=[discord_match], label='\uf392')]) +groups.extend([Group("0", matches=[xrdp_match], label='\uf512', init=False, persist=False)]) +groups.extend([Group("o", matches=[vm_match], label='\uf511', init=False, persist=False)]) for i in groups: keys.extend( @@ -97,139 +179,751 @@ for i in groups: [mod], i.name, lazy.group[i.name].toscreen(), - desc="Switch to group {}".format(i.name), + desc=f"Switch to group {i.name}", ), # mod1 + shift + letter of group = switch to & move focused window to group + #Key( + #[mod, "shift"], + #i.name, + #lazy.window.togroup(i.name, switch_group=True), + #desc=f"Switch to & move focused window to group {i.name}", + #), + # Or, use below if you prefer not to switch to that group. + # mod1 + shift + letter of group = move focused window to group Key( [mod, "shift"], i.name, - lazy.window.togroup(i.name, switch_group=True), - desc="Switch to & move focused window to group {}".format(i.name), + lazy.window.togroup(i.name), + desc=f"move focused window to group {i.name}", ), - # Or, use below if you prefer not to switch to that group. - # # mod1 + shift + letter of group = move focused window to group - # Key([mod, "shift"], i.name, lazy.window.togroup(i.name), - # desc="move focused window to group {}".format(i.name)), ] ) +def get_hot_keys(): + mod_keys = { + 'mod4':'Super', + 'shift':'Shift', + 'control':'Control', + 'space':'Space', + } + + hot_keys = [] + + for key in keys: + if isinstance(key, Key): + key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers]) + if len(key.key) == 1: + hot_keys.append(f"{key_modifiers} + {key.key}: {key.desc}\n") + elif len(key.key) > 1: + hot_keys.append(f"{key_modifiers} + {key.key.title()}: {key.desc}\n") + for key in keys: + if isinstance(key, KeyChord): + key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers]) + hot_keys.append(f"{key_modifiers} + {key.key}: {key.name.upper()}\n") + for sub in key.submappings: + if isinstance(sub, Key): + hot_keys.append(f" {sub.key}: {sub.desc}\n") + elif isinstance(key, KeyChord): + hot_keys.append(f" {sub.key}: {sub.name.upper()}\n") + for map in sub.submappings: + hot_keys.append(f" {map.key}: {map.desc}\n") + + return ''.join(hot_keys) + +hot_key_text = get_hot_keys() + +hotkeys = f'yad --title "Hotkeys" --text-info --scroll --text="{hot_key_text}"' + +groups.extend( + [ScratchPad("scratchpad", [ + DropDown( + "term", + terminal_opaque, + on_focus_lost_hide=False, + opacity=1.0, + height=0.5, + y=0.1, + ), + DropDown( + "ipython", + ipython, + on_focus_lost_hide=False, + opacity=1.0, + height=0.9, + y=0.05, + ), + DropDown( + "python", + python, + on_focus_lost_hide=False, + opacity=1.0, + height=0.9, + y=0.05, + ), + DropDown( + "qtile-config", + qtile_config, + on_focus_lost_hide=False, + opacity=1.0, + height=0.9, + y=0.05, + ), + DropDown( + "vpn", + vpn_vta, + on_focus_lost_hide=True, + opacity=1.0, + height=0.5, + y=0.1, + ), + DropDown( + "xrdp", + rdp, + on_focus_lost_hide=True, + opacity=1.0, + height=0.5, + y=0.1, + ), + DropDown( + "hotkeys", + hotkeys, + on_focus_lost_hide=True, + opacity=1.0, + height=0.5, + y=0.01, + ), + ]) + ]) + layouts = [ #layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4), - # Try more layouts by unleashing below layouts. - # layout.Stack(num_stacks=2), - # layout.Bsp(), - # layout.Matrix(), + #layout.Stack(num_stacks=2), + #layout.Bsp(), layout.MonadTall( - border_focus=colors['red'], - border_normal=colors['blue'], - border_width=2, + border_focus=nord['nord11'], + border_normal=nord['nord10'], + border_width=4, + margin=4 + ), + layout.Max(), + layout.MonadThreeCol( + main_centered=True, + new_client_position='after_current', + border_focus=nord['nord11'], + border_normal=nord['nord10'], + border_width=4, margin=4 ), - layout.Max(), - # layout.MonadWide(), - # layout.RatioTile(), - # layout.Tile(), - # layout.TreeTab(), - # layout.VerticalTile(), - layout.Zoomy(), + #layout.MonadWide(), + #layout.RatioTile(), + #layout.Spiral(), + #layout.Tile(), + #layout.TreeTab(), + #layout.VerticalTile(), + #layout.Zoomy(), ] widget_defaults = dict( - #font="sans", - font="Hack Nerd Font Mono", - fontsize=14, - padding=4, + font="FontAwesome", + fontsize=18, + padding=2, ) extension_defaults = widget_defaults.copy() +# Mirrored widgets +net = widget.Net( + background=nord['nord10'], + foreground=nord['nord0'], + interface='net0') + +memory = widget.Memory( + background=nord['nord14'], + foreground=nord['nord0']) + +cpu = widget.CPU( + background=nord['nord13'], + foreground=nord['nord0']) + +cpu_thermal_sensor = widget.ThermalSensor( + background=nord['nord13'], + foreground=nord['nord0'], + tag_sensor='Package id 0', + format='{temp:.0f}{unit}') + +disk_free_root = widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + warn_space=40, + visible_on_warn=True) + +disk_free_home = widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + partition='/home', + warn_space=40, + visible_on_warn=True) + +nvme_thermal_sensor = widget.ThermalSensor( + background=nord['nord12'], + foreground=nord['nord0'], + tag_sensor='Composite', + format='NVME: {temp:.0f}{unit}') + +weather = widget.OpenWeather( + background=nord['nord15'], + foreground=nord['nord0'], + cityid='4198514', + app_key='*****', + metric=False) + +chord = widget.Chord( + chords_colors={ + "launch": (nord['nord13'], nord['nord0']), + "flameshot": (nord['nord15'], nord['nord0']), + "toggle": (nord['nord11'], nord['nord0']), + "boxes": (nord['nord12'], nord['nord0']), + "media": (nord['nord14'], nord['nord0']), + }, + name_transform=lambda name: name.upper()) + +clock = widget.Clock( + background=nord['nord11'], + foreground=nord['nord0'], + padding=4, + format="%Y-%m-%d %a %H:%M") + + +def parse_task_text(text): + text = text.replace(' \u2014 Mozilla Firefox','') + text = text.replace(' - qutebrowser','') + text = text.replace(' - Discord','') + return text + + +def get_wallpaper(): + size = run(["xdpyinfo | rg dimensions | awk '{ print $2 }'"], + shell=True, + capture_output=True, + encoding='utf-8') + size = size.stdout.strip() + width, height = size.split('x') + print(f'{size =}', type(size)) + + wallpaper = f'{qtile_dir}not_supported.png' + + match size: + case '3440x1440': + wallpaper = f'{qtile_dir}gunter_wallpaper3440x1440_fill.png' + case '1920x1080': + wallpaper = f'{qtile_dir}gunter_throne.png' + case '3840x1080': + wallpaper = f'{qtile_dir}gunter_throne.png' + case '5760x1080': + wallpaper = f'{qtile_dir}gunter_throne.png' + case '1760x1262': + wallpaper = f'{qtile_dir}gunter_throne_1760x1262.png' + + return wallpaper + screens = [ - Screen( + Screen( #Screen1 bottom=bar.Bar( [ - #widget.CurrentLayout( - #background=colors['dark_blue'], - #), - widget.GroupBox( - background=colors['blue'], - block_highlight_text_color=colors['red'], - disable_drag=True, - #this_screen_border=colors['orange'], - this_current_screen_border=colors['dark_blue'], - #active=colors['dark_blue'], - ), - #lower_left_triangle(colors['blue'], colors['dark_blue']), - right_arrow(colors['dark_blue'], colors['blue']), - # widget.Prompt(), - widget.WindowName( - background=colors['dark_blue'], - ), - widget.Chord( - chords_colors={ - "launch": ("#ff0000", "#ffffff"), - }, - name_transform=lambda name: name.upper(), + widget.CurrentLayoutIcon( + background=nord['nord10'], + foreground=nord['nord4'], + ), + widget.GroupBox( + font="Font Awesome 6 Brands", + background=nord['nord10'], + disable_drag=True, + block_highlight_text_color=nord['nord8'], + this_screen_border=nord['nord13'], + this_current_screen_border=nord['nord11'], + padding=4, + #margin=0, + ), + widget.Spacer( + background=nord['nord0'], + length=4, + ), + widget.WindowCount( + font="Font Awesome 6 Brands", + background=nord['nord0'], + foreground=nord['nord4'], + ), + widget.TaskList( + background=nord['nord0'], + foreground=nord['nord4'], + border=nord['nord11'], + highlight_method='block', + markup_focused='{}', + parse_text=parse_task_text, + margin=2, + padding=2, + ), + chord, + widget.Spacer( + background=nord['nord0'], + length=4, ), - # widget.TextBox("default config", name="default"), - # widget.TextBox("Press <M-r> to spawn", foreground="#d75f5f"), - # NB Systray is incompatible with Wayland, consider using StatusNotifier instead - # widget.StatusNotifier(), widget.Systray( - background=colors['blue'], - ), - widget.OpenWeather( - background=colors['dark_blue'], - #location='Grovetown', - cityid='4198514', - app_key='*****', - metric=False, - ), - #widget.TextBox( - #padding=1, - #background=colors['dark_blue'], - #), - #lower_left_triangle(colors['dark_blue'], colors['blue']), - left_arrow(colors['dark_blue'], colors['blue']), - widget.Net( - background=colors['blue'], - interface='net0', - ), - #widget.TextBox( - #padding=1, - #background=colors['blue'], - #), - #lower_left_triangle(colors['blue'], colors['dark_blue']), - left_arrow(colors['blue'], colors['dark_blue']), - widget.Memory( - background=colors['dark_blue'], - ), - #widget.TextBox( - #padding=1, - #background=colors['dark_blue'], - #), - #lower_left_triangle(colors['dark_blue'], colors['blue']), - left_arrow(colors['dark_blue'], colors['blue']), - widget.ThermalSensor( - format='{tag}: {temp:.0f}{unit}', - background=colors['blue'], - ), - #widget.TextBox( - #padding=1, - #background=colors['blue'], - #), - #lower_left_triangle(colors['blue'], colors['dark_blue']), - left_arrow(colors['blue'], colors['dark_blue']), - widget.Clock( - background=colors['dark_blue'], - format="%Y-%m-%d %a %I:%M %p" - ), - # widget.QuickExit(), + background=nord['nord0'], + icon_size=26, + padding=4, + ), + widget.Spacer( + background=nord['nord0'], + length=6, + ), + widget.WidgetBox( + name='media_box_1', + background=nord['nord0'], + foreground=nord['nord13'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.Mpris2( + name='spotifyd', + #objname=media_player, + format = "{xesam:title} - ({xesam:artist})", + playing_text = " 契 {track}", + paused_text = "  {track}", + width = 400, + scroll_delay = 5, + scroll_interval = 0.25, + scroll_step = 15, + background=nord['nord10'], + foreground=nord['nord0'], + ), + widget.PulseVolume( + font="FontAwesome", + fmt='\uf028 {}', + background=nord['nord0'], + foreground=nord['nord4'], + ), + ], + ), + widget.Spacer( + background=nord['nord0'], + length=4, + ), + widget.WidgetBox( + name='widget_box_1', + background=nord['nord0'], + foreground=nord['nord13'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.OpenWeather( + background=nord['nord15'], + foreground=nord['nord0'], + cityid='4198514', + app_key='*****', + metric=False), + widget.Net( + background=nord['nord10'], + foreground=nord['nord0'], + interface='net0'), + widget.Memory( + background=nord['nord14'], + foreground=nord['nord0']), + widget.CPU( + background=nord['nord13'], + foreground=nord['nord0']), + widget.ThermalSensor( + background=nord['nord13'], + foreground=nord['nord0'], + tag_sensor='Package id 0', + format='{temp:.0f}{unit}'), + widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + warn_space=40, + visible_on_warn=True), + widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + partition='/home', + warn_space=40, + visible_on_warn=True), + widget.ThermalSensor( + background=nord['nord12'], + foreground=nord['nord0'], + tag_sensor='Composite', + format='NVME: {temp:.0f}{unit}'), + widget.Spacer( + background=nord['nord0'], + length=8 + ), + ] + ), + widget.Spacer( + background=nord['nord0'], + length=6 + ), + clock, + widget.WidgetBox( + name='shutdown', + background=nord['nord11'], + foreground=nord['nord0'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.QuickExit( + background=nord['nord11'], + foreground=nord['nord0'], + fontsize=24, + default_text='\uf1e2' + ), + ], + ), + widget.Spacer( + background=nord['nord11'], + length=4 + ), ], - size=26, - border_width=[2, 2, 2, 2], # Draw top and bottom borders - border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']], + size=32, + border_width=[0, 0, 0, 0], + border_color=[nord['nord10'], nord['nord10'], nord['nord10'], nord['nord10']], margin=4, ), - wallpaper='~/.config/qtile/background.jpg', + wallpaper = get_wallpaper(), + wallpaper_mode='fill', + ), + Screen( # Screen2 + bottom=bar.Bar([ + widget.CurrentLayoutIcon( + background=nord['nord10'], + foreground=nord['nord4'], + ), + widget.GroupBox( + font="Font Awesome 6 Brands", + background=nord['nord10'], + disable_drag=True, + block_highlight_text_color=nord['nord8'], + this_screen_border=nord['nord13'], + this_current_screen_border=nord['nord11'], + padding=4, + ), + widget.Spacer( + background=nord['nord0'], + length=4, + ), + widget.WindowCount( + font="Font Awesome 6 Brands", + background=nord['nord0'], + foreground=nord['nord4'], + ), + widget.TaskList( + background=nord['nord0'], + foreground=nord['nord4'], + border=nord['nord11'], + highlight_method='block', + markup_focused='{}', + parse_text=parse_task_text, + margin=2, + padding=2, + ), + chord, + widget.Spacer( + background=nord['nord0'], + length=6, + ), + widget.WidgetBox( + name='media_box_2', + background=nord['nord0'], + foreground=nord['nord13'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.Mpris2( + name='spotifyd', + #objname=media_player, + format = "{xesam:title} - ({xesam:artist})", + playing_text = " 契 {track}", + paused_text = "  {track}", + width = 400, + scroll_delay = 5, + scroll_interval = 0.25, + scroll_step = 15, + background=nord['nord10'], + foreground=nord['nord0'], + ), + widget.PulseVolume( + font="FontAwesome", + fmt='\uf028 {}', + background=nord['nord0'], + foreground=nord['nord4'], + ), + ], + ), + widget.Spacer( + background=nord['nord0'], + length=4, + ), + widget.WidgetBox( + name='widget_box_2', + background=nord['nord0'], + foreground=nord['nord13'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.OpenWeather( + background=nord['nord15'], + foreground=nord['nord0'], + cityid='4198514', + app_key='*****', + metric=False), + widget.Net( + background=nord['nord10'], + foreground=nord['nord0'], + interface='net0'), + widget.Memory( + background=nord['nord14'], + foreground=nord['nord0']), + widget.CPU( + background=nord['nord13'], + foreground=nord['nord0']), + widget.ThermalSensor( + background=nord['nord13'], + foreground=nord['nord0'], + tag_sensor='Package id 0', + format='{temp:.0f}{unit}'), + widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + warn_space=40, + visible_on_warn=True), + widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + partition='/home', + warn_space=40, + visible_on_warn=True), + widget.ThermalSensor( + background=nord['nord12'], + foreground=nord['nord0'], + tag_sensor='Composite', + format='NVME: {temp:.0f}{unit}'), + widget.Spacer( + background=nord['nord0'], + length=8 + ), + ] + ), + widget.Spacer( + background=nord['nord0'], + length=6 + ), + clock, + widget.WidgetBox( + name='shutdown', + background=nord['nord11'], + foreground=nord['nord0'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.QuickExit( + background=nord['nord11'], + foreground=nord['nord0'], + fontsize=24, + default_text='\uf1e2' + ), + ], + ), + widget.Spacer( + background=nord['nord11'], + length=4 + ), + ], + size=32, + border_width=[0, 0, 0, 0], + border_color=[nord['nord10'], nord['nord10'], nord['nord10'], nord['nord10']], + margin=4, + ), + wallpaper = get_wallpaper(), + wallpaper_mode='fill', + ), + Screen( # Screen3 + bottom=bar.Bar([ + widget.CurrentLayoutIcon( + background=nord['nord10'], + foreground=nord['nord4'], + ), + widget.GroupBox( + font="Font Awesome 6 Brands", + background=nord['nord10'], + disable_drag=True, + block_highlight_text_color=nord['nord8'], + this_screen_border=nord['nord13'], + this_current_screen_border=nord['nord11'], + padding=4, + ), + widget.Spacer( + background=nord['nord0'], + length=4, + ), + widget.WindowCount( + font="Font Awesome 6 Brands", + background=nord['nord0'], + foreground=nord['nord4'], + ), + widget.TaskList( + background=nord['nord0'], + foreground=nord['nord4'], + border=nord['nord11'], + highlight_method='block', + markup_focused='{}', + parse_text=parse_task_text, + margin=2, + padding=2, + ), + chord, + widget.Spacer( + background=nord['nord0'], + length=6, + ), + widget.WidgetBox( + name='media_box_3', + background=nord['nord0'], + foreground=nord['nord13'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.Mpris2( + name='spotifyd', + #objname=media_player, + format = "{xesam:title} - ({xesam:artist})", + playing_text = " 契 {track}", + paused_text = "  {track}", + width = 400, + scroll_delay = 5, + scroll_interval = 0.25, + scroll_step = 15, + background=nord['nord10'], + foreground=nord['nord0'], + ), + widget.PulseVolume( + font="FontAwesome", + fmt='\uf028 {}', + background=nord['nord0'], + foreground=nord['nord4'], + ), + ], + ), + widget.Spacer( + background=nord['nord0'], + length=4, + ), + widget.WidgetBox( + name='widget_box_3', + background=nord['nord0'], + foreground=nord['nord13'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.OpenWeather( + background=nord['nord15'], + foreground=nord['nord0'], + cityid='4198514', + app_key='*****', + metric=False), + widget.Net( + background=nord['nord10'], + foreground=nord['nord0'], + interface='net0'), + widget.Memory( + background=nord['nord14'], + foreground=nord['nord0']), + widget.CPU( + background=nord['nord13'], + foreground=nord['nord0']), + widget.ThermalSensor( + background=nord['nord13'], + foreground=nord['nord0'], + tag_sensor='Package id 0', + format='{temp:.0f}{unit}'), + widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + warn_space=40, + visible_on_warn=True), + widget.DF( + background=nord['nord12'], + foreground=nord['nord0'], + partition='/home', + warn_space=40, + visible_on_warn=True), + widget.ThermalSensor( + background=nord['nord12'], + foreground=nord['nord0'], + tag_sensor='Composite', + format='NVME: {temp:.0f}{unit}'), + widget.Spacer( + background=nord['nord0'], + length=8 + ), + ] + ), + widget.Spacer( + background=nord['nord0'], + length=6 + ), + clock, + widget.WidgetBox( + name='shutdown', + background=nord['nord11'], + foreground=nord['nord0'], + fontsize=30, + close_button_location='right', + text_closed='\uf100', + text_open='\uf101', + padding=15, + widgets=[ + widget.QuickExit( + background=nord['nord11'], + foreground=nord['nord0'], + fontsize=24, + default_text='\uf1e2' + ), + ], + ), + widget.Spacer( + background=nord['nord11'], + length=4 + ), + ], + size=32, + border_width=[0, 0, 0, 0], + border_color=[nord['nord10'], nord['nord10'], nord['nord10'], nord['nord10']], + margin=4, + ), + wallpaper = get_wallpaper(), wallpaper_mode='fill', ), ] @@ -256,9 +950,12 @@ floating_layout = layout.Floating( Match(wm_class="ssh-askpass"), # ssh-askpass Match(title="branchdialog"), # gitk Match(title="pinentry"), # GPG key password entry - ] + ], + border_width=4, + border_focus=nord['nord11'], + border_normal=nord['nord10'], ) -auto_fullscreen = True +auto_fullscreen = False focus_on_window_activation = "smart" reconfigure_screens = True @@ -278,4 +975,34 @@ wl_input_rules = None # We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in # java that happens to be on java's whitelist. # wmname = "LG3D" -wmname = "qtile" +wmname = f"qtile {VERSION}" + +#mod_keys = { + #'mod4':'Super', + #'shift':'Shift', + #'control':'Control', + #'space':'Space', + #} +# +#hot_keys = [] +# +#for key in keys: + #if isinstance(key, Key): + #key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers]) + #if len(key.key) == 1: + #hot_keys.append(f"{key_modifiers} + {key.key}: {key.desc}\n") + #elif len(key.key) > 1: + #hot_keys.append(f"{key_modifiers} + {key.key.title()}: {key.desc}\n") +#for key in keys: + #if isinstance(key, KeyChord): + #key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers]) + #hot_keys.append(f"{key_modifiers} + {key.key}: {key.name.upper()}\n") + #for sub in key.submappings: + #if isinstance(sub, Key): + #hot_keys.append(f" {sub.key}: {sub.desc}\n") + #elif isinstance(key, KeyChord): + #hot_keys.append(f" {sub.key}: {sub.name.upper()}\n") + #for map in sub.submappings: + #hot_keys.append(f" {map.key}: {map.desc}\n") +# +#print(''.join(hot_keys)) diff --git a/.config/qtile/config.py.old b/.config/qtile/config.py.old new file mode 100644 index 0000000..1de1824 --- /dev/null +++ b/.config/qtile/config.py.old @@ -0,0 +1,440 @@ +# Copyright (c) 2010 Aldo Cortesi +# Copyright (c) 2010, 2014 dequis +# Copyright (c) 2012 Randall Mmeasure_mem='G'# Copyright (c) 2012-2014 Tycho Andersen +# Copyright (c) 2012 Craig Barnes +# Copyright (c) 2013 horsik +# Copyright (c) 2013 Tao Sauvage +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from libqtile import bar, layout, widget, extension +from libqtile.config import Click, Drag, Group, Key, Match, Screen, ScratchPad, DropDown +from libqtile.lazy import lazy +from libqtile.utils import guess_terminal +from unicodes import left_arrow, right_arrow, right_half_circle, lower_left_triangle + +mod = "mod4" +terminal = guess_terminal() +rofi= 'rofi -combi-modi window,drun,ssh -theme nord -font "hack 10" -show drun -icon-theme "Papirus" -show-icons' + +colors = { + 'purple':'#52497e', + 'teal':'#559d92', + 'dark_orange':'#9d6e55', + 'orange':'#e7510b', + 'dark_red':'#9d5560', + 'dark_blue':'#2e3440', + 'light_blue':'#8fbcbb', + 'blue':'#5e81ac', + 'red':'#bf616a', + 'dark_text':'#d8dee9', + } + +nord = { + 'nord0':'#2E3440', + 'nord1':'#3B4252', + 'nord2':'#434C5E', + 'nord3':'#4C566A', + 'nord4':'#D8DEE9', + 'nord5':'#E5E9F0', + 'nord6':'#ECEFF4', + 'nord7':'#8FBCBB', + 'nord8':'#88C0D0', + 'nord9':'#81A1C1', + 'nord10':'#5E81AC', + 'nord11':'#BF616A', + 'nord12':'#D08770', + 'nord13':'#EBCB8B', + 'nord14':'#A3BE8C', + 'nord15':'#B48EAD', + } + +keys = [ + # A list of available commands that can be bound to keys can be found + # at https://docs.qtile.org/en/latest/manual/config/lazy.html + # Switch between windows + Key([mod], "h", lazy.layout.left(), desc="Move focus to left"), + Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), + Key([mod], "j", lazy.layout.down(), desc="Move focus down"), + Key([mod], "k", lazy.layout.up(), desc="Move focus up"), + Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"), + # Move windows between left/right columns or move up/down in current stack. + # Moving out of range in Columns layout will create new column. + Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"), + Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"), + Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"), + Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), + # Grow windows. If current window is on the edge of screen and direction + # will be to screen edge - window would shrink. + Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"), + Key([mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right"), + Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"), + Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), + Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), + # Toggle between split and unsplit sides of stack. + # Split = all windows displayed + # Unsplit = 1 window displayed, like Max layout, but still with + # multiple stack panes + Key( + [mod, "shift"], + "Return", + lazy.layout.toggle_split(), + desc="Toggle between split and unsplit sides of stack", + ), + Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), + # Toggle between different layouts as defined below + Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), + Key([mod], "w", lazy.window.kill(), desc="Kill focused window"), + Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"), + Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), + Key([mod, "control"], "s", lazy.hide_show_bar()), + # Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"), + Key([mod], "r", lazy.run_extension(extension.DmenuRun(dmenu_prompt = ">"))), + Key([mod], "q", lazy.spawn(rofi), desc="Launch rofi"), + Key([mod], "z", lazy.run_extension(extension.WindowList())), +] + +groups = [Group(i) for i in "123456789"] + +for i in groups: + keys.extend( + [ + # mod1 + letter of group = switch to group + Key( + [mod], + i.name, + lazy.group[i.name].toscreen(), + desc="Switch to group {}".format(i.name), + ), + # mod1 + shift + letter of group = switch to & move focused window to group + #Key( + #[mod, "shift"], + #i.name, + #lazy.window.togroup(i.name, switch_group=True), + #desc="Switch to & move focused window to group {}".format(i.name), + #), + # Or, use below if you prefer not to switch to that group. + # # mod1 + shift + letter of group = move focused window to group + Key( + [mod, "shift"], + i.name, + lazy.window.togroup(i.name), + desc="move focused window to group {}".format(i.name) + ), + ] + ) + +layouts = [ + #layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4), + # Try more layouts by unleashing below layouts. + #layout.Stack(num_stacks=2), + #layout.Bsp(), + #layout.Matrix(), + #layout.MonadThreeCol( + #main_centered=True, + #new_client_position='after_current', + #border_focus=colors['red'], + #border_normal=colors['blue'], + #border_width=2, + #margin=4 + #), + layout.MonadTall( + border_focus=colors['red'], + border_normal=colors['blue'], + border_width=2, + margin=8 + ), + #layout.Spiral(), + layout.Max(), + #layout.MonadWide(), + #layout.RatioTile(), + #layout.Tile(), + #layout.TreeTab(), + #layout.VerticalTile(), + #layout.Zoomy(), +] + +widget_defaults = dict( + #font="sans", + font="Hack Nerd Font Mono", + fontsize=14, + padding=4, +) +extension_defaults = widget_defaults.copy() + +screens = [ + Screen( + bottom=bar.Bar( + [ + widget.GroupBox( + background=colors['blue'], + block_highlight_text_color=colors['red'], + disable_drag=True, + this_screen_border=nord['nord11'], + this_current_screen_border=nord['nord13'], + #active=nord['nord6'], + ), + #lower_left_triangle(colors['blue'], colors['dark_blue']), + #right_arrow(colors['dark_blue'], colors['blue']), + # widget.Prompt(), + widget.CurrentLayoutIcon( + background=colors['blue'], + foreground=colors['dark_text'], + ), + widget.WindowCount( + background=colors['dark_blue'], + foreground=colors['dark_text'], + ), + widget.TaskList( + background=colors['dark_blue'], + foreground=colors['dark_text'], + ), + #widget.WindowName( + #background=colors['dark_blue'], + #foreground=colors['dark_text'], + #), + widget.Chord( + chords_colors={ + "launch": ("#ff0000", "#ffffff"), + }, + name_transform=lambda name: name.upper(), + ), + # widget.TextBox("default config", name="default"), + # widget.TextBox("Press <M-r> to spawn", foreground="#d75f5f"), + # NB Systray is incompatible with Wayland, consider using StatusNotifier instead + # widget.StatusNotifier(), + widget.Systray( + background=colors['dark_blue'], + ), + widget.OpenWeather( + background=nord['nord15'], + foreground=colors['dark_blue'], + cityid='4198514', + app_key='*****', + metric=False, + ), + #widget.TextBox( + #padding=1, + #background=colors['dark_blue'], + #), + #lower_left_triangle(colors['dark_blue'], colors['blue']), + #left_arrow(colors['dark_blue'], colors['blue']), + widget.Net( + background=nord['nord10'], + #background=colors['blue'], + foreground=colors['dark_blue'], + interface='net0', + ), + #widget.TextBox( + #padding=1, + #background=colors['blue'], + #), + #lower_left_triangle(colors['blue'], colors['dark_blue']), + #left_arrow(colors['blue'], colors['dark_blue']), + widget.Memory( + background=nord['nord14'], + #background=colors['dark_blue'], + foreground=colors['dark_blue'], + ), + #widget.TextBox( + #padding=1, + #background=colors['dark_blue'], + #), + #lower_left_triangle(colors['dark_blue'], colors['blue']), + #left_arrow(colors['dark_blue'], colors['blue']), + widget.CPU( + background=nord['nord13'], + foreground=colors['dark_blue'], + ), + widget.ThermalSensor( + tag_sensor='Package id 0', + format='{temp:.0f}{unit}', + background=nord['nord13'], + #background=colors['blue'], + foreground=colors['dark_blue'], + ), + widget.DF( + background=nord['nord12'], + foreground=colors['dark_blue'], + warn_sapce=40, + visible_on_warn=True, + ), + widget.DF( + background=nord['nord12'], + foreground=colors['dark_blue'], + partition='/home', + warn_sapce=40, + visible_on_warn=True, + ), + widget.ThermalSensor( + tag_sensor='Composite', + format='NVME:{temp:.0f}{unit}', + background=nord['nord12'], + #background=colors['blue'], + foreground=colors['dark_blue'], + ), + #widget.TextBox( + #padding=1, + #background=colors['blue'], + #), + #lower_left_triangle(colors['blue'], colors['dark_blue']), + #left_arrow(colors['blue'], colors['dark_blue']), + widget.Clock( + background=nord['nord11'], + foreground=colors['dark_blue'], + format="%Y-%m-%d %a %H:%M" + ), + # widget.QuickExit(), + ], + size=26, + border_width=[2, 2, 2, 2], # Draw top and bottom borders + border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']], + margin=4, + ), + wallpaper='~/.config/qtile/background.jpg', + wallpaper_mode='fill', + ), + Screen( + bottom=bar.Bar([ + widget.GroupBox( + background=colors['blue'], + block_highlight_text_color=colors['red'], + disable_drag=True, + this_screen_border=nord['nord11'], + this_current_screen_border=nord['nord13'], + #active=nord['nord15'], + ), + widget.CurrentLayoutIcon( + background=colors['blue'], + foreground=colors['dark_blue'], + ), + widget.WindowCount( + background=colors['dark_blue'], + foreground=colors['dark_text'], + ), + widget.TaskList( + background=colors['dark_blue'], + foreground=colors['dark_text'], + ), + #widget.WindowName( + #background=colors['dark_blue'], + #foreground=colors['dark_text'], + #), + widget.Clock( + background=nord['nord11'], + foreground=colors['dark_blue'], + format="%Y-%m-%d %a %H:%M" + ), + ], + size=26, + border_width=[2, 2, 2, 2], # Draw top and bottom borders + border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']], + margin=4, + ), + wallpaper='~/.config/qtile/background.jpg', + wallpaper_mode='fill', + ), + Screen( + bottom=bar.Bar([ + widget.GroupBox( + background=colors['blue'], + block_highlight_text_color=colors['red'], + disable_drag=True, + this_screen_border=nord['nord11'], + this_current_screen_border=nord['nord13'], + #active=nord['nord15'], + ), + widget.CurrentLayoutIcon( + background=colors['blue'], + foreground=colors['dark_text'], + ), + widget.WindowCount( + background=colors['dark_blue'], + foreground=colors['dark_text'], + ), + widget.TaskList( + background=colors['dark_blue'], + foreground=colors['dark_text'], + ), + #widget.WindowName( + #background=colors['dark_blue'], + #foreground=colors['dark_text'], + #), + widget.Clock( + background=nord['nord11'], + foreground=colors['dark_blue'], + format="%Y-%m-%d %a %H:%M" + ), + ], + size=26, + border_width=[2, 2, 2, 2], # Draw top and bottom borders + border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']], + margin=4, + ), + wallpaper='~/.config/qtile/background.jpg', + wallpaper_mode='fill', + ), +] + +# Drag floating layouts. +mouse = [ + Drag([mod], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()), + Drag([mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()), + Click([mod], "Button2", lazy.window.bring_to_front()), +] + +dgroups_key_binder = None +dgroups_app_rules = [] # type: list +follow_mouse_focus = True +bring_front_click = False +cursor_warp = False +floating_layout = layout.Floating( + float_rules=[ + # Run the utility of `xprop` to see the wm class and name of an X client. + *layout.Floating.default_float_rules, + Match(wm_class="confirmreset"), # gitk + Match(wm_class="makebranch"), # gitk + Match(wm_class="maketag"), # gitk + Match(wm_class="ssh-askpass"), # ssh-askpass + #Match(wm_class="VirtualBox Machine"), # virt box + Match(title="branchdialog"), # gitk + Match(title="pinentry"), # GPG key password entry + ] +) +auto_fullscreen = False +focus_on_window_activation = "smart" +reconfigure_screens = True + +# If things like steam games want to auto-minimize themselves when losing +# focus, should we respect this or not? +auto_minimize = True + +# When using the Wayland backend, this can be used to configure input devices. +wl_input_rules = None + +# XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this +# string besides java UI toolkits; you can see several discussions on the +# mailing lists, GitHub issues, and other WM documentation that suggest setting +# this string if your java app doesn't work correctly. We may as well just lie +# and say that we're a working one by default. +# +# We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in +# java that happens to be on java's whitelist. +# wmname = "LG3D" +wmname = "qtile" diff --git a/.config/spotifyd/spotifyd.conf b/.config/spotifyd/spotifyd.conf index 42a54c5..dc4546f 100644 --- a/.config/spotifyd/spotifyd.conf +++ b/.config/spotifyd/spotifyd.conf @@ -3,7 +3,7 @@ username = "21trp6fa6clzosibpccdvipma" # Your Spotify account password. -# password = "yourpassword" +#password = "" # A command that gets executed and can be used to # retrieve your password. diff --git a/.tmux.conf b/.tmux.conf index 96d1df4..8c31223 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -19,14 +19,28 @@ bind j select-pane -D bind k select-pane -U bind l select-pane -R -set-option -g status on -set-option -g status-interval 2 -set-option -g status-justify "centre" -set-option -g status-left-length 60 -set-option -g status-right-length 90 -set-option -g status-left "#(~/share/tmux-powerline/powerline.sh left)" -set-option -g status-right "#(~/share/tmux-powerline/powerline.sh right)" -set-hook -g session-created 'run-shell "~/share/tmux-powerline/powerline.sh init"' # prettifies the window-status segments +#set-option -g status on +#set-option -g status-interval 2 +#set-option -g status-justify "centre" +#set-option -g status-left-length 60 +#set-option -g status-right-length 90 +#set-option -g status-left "#(~/share/tmux-powerline/powerline.sh left)" +#set-option -g status-right "#(~/share/tmux-powerline/powerline.sh right)" +#set-hook -g session-created 'run-shell "~/share/tmux-powerline/powerline.sh init"' # prettifies the window-status segments -bind C-[ run '~/share/tmux-powerline/mute_powerline.sh left' # Mute left statusbar. -bind C-] run '~/share/tmux-powerline/mute_powerline.sh right' # Mute right statusbar. +#bind C-[ run '~/share/tmux-powerline/mute_powerline.sh left' # Mute left statusbar. +#bind C-] run '~/share/tmux-powerline/mute_powerline.sh right' # Mute right statusbar. + +# List of plugins +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin "arcticicestudio/nord-tmux" + +# Other examples: +# set -g @plugin 'github_username/plugin_name' +# set -g @plugin 'github_username/plugin_name#branch' +# set -g @plugin 'git@github.com:user/plugin' +# set -g @plugin 'git@bitbucket.com:user/plugin' + +# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) +run '~/.tmux/plugins/tpm/tpm' diff --git a/.vimrc b/.vimrc index bb11a37..284b22a 100644 --- a/.vimrc +++ b/.vimrc @@ -9,11 +9,18 @@ set copyindent set number +set laststatus=2 +" +call plug#begin(expand('~/.vim/plugged')) +" Color Scheme +Plug 'arcticicestudio/nord-vim' +Plug 'itchyny/lightline.vim' +Plug 'ap/vim-css-color' +Plug 'ycm-core/YouCompleteMe' +Plug 'preservim/nerdtree' +call plug#end() + colorscheme nord -let g:airline_theme='base16_nord' - -" python3 from powerline.vim import setup as powerline_setup -" python3 powerline_setup() -" python3 del powerline_setup - -" set laststatus=2 +let g:lightline = { + \ 'colorscheme': 'nord', + \ } diff --git a/.xinitrc b/.xinitrc index 159e4d9..d5d8e3e 100644 --- a/.xinitrc +++ b/.xinitrc @@ -8,15 +8,7 @@ sysmodmap=/etc/X11/xinit/.Xmodmap # merge in defaults and keymaps if [ -f $sysresources ]; then - - - - - - - xrdb -merge $sysresources - fi if [ -f $sysmodmap ]; then @@ -24,15 +16,7 @@ if [ -f $sysmodmap ]; then fi if [ -f "$userresources" ]; then - - - - - - - xrdb -merge "$userresources" - fi if [ -f "$usermodmap" ]; then @@ -48,6 +32,5 @@ if [ -d /etc/X11/xinit/xinitrc.d ] ; then unset f fi -# exec /usr/local/bin/dwm -# exec picom -b +picom --animations --no-fading-openclose -b exec qtile start