diff --git a/.Xdefaults b/.Xdefaults new file mode 100644 index 0000000..be9d3a6 --- /dev/null +++ b/.Xdefaults @@ -0,0 +1,34 @@ +URxvt.perl-ext-common: selection-to-clipboard + +urxvt*font: xft:Ubuntu Mono:pixelsize=13 +urxvt*termName: rxvt +urxvt*foreground: #cccccc +urxvt*scrollBar: false +urxvt*perl-lib: /usr/lib/urxvt/perl/ +urxvt*perl-ext-common: default,matcher +urxvt*urlLauncher: firefox +urxvt*matcher.button: 1 + +Xft*dpi: 96 +Xft*antialias: true +Xft*hinting: full + +urxvt*depth: 32 +urxvt*background: rgba:0000/0000/0200/c800 + +URxvt*color0: #222222 +URxvt*color1: #9e1828 +URxvt*color2: #aece92 +URxvt*color3: #968a38 +URxvt*color4: #414171 +URxvt*color5: #963c59 +URxvt*color6: #418179 +URxvt*color7: #bebebe +URxvt*color8: #666666 +URxvt*color9: #cf6171 +URxvt*color10: #c5f779 +URxvt*color11: #fff796 +URxvt*color12: #4186be +URxvt*color13: #cf9ebe +URxvt*color14: #71bebe +URxvt*color15: #ffffff diff --git a/.gitconfig b/.gitconfig index 1aa74a4..db2e11b 100644 --- a/.gitconfig +++ b/.gitconfig @@ -13,3 +13,10 @@ fuck = reset --hard ktokurwa = blame + +[push] + default = simple +[merge "ours"] + driver = true +[core] + autocrlf = input diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..538c2e1 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "awesome/awesome-copycats"] + path = awesome/awesome-copycats + url = https://github.com/lcpz/awesome-copycats.git diff --git a/.ideavimrc b/.ideavimrc index 348f51f..8482714 100644 --- a/.ideavimrc +++ b/.ideavimrc @@ -1,5 +1,6 @@ set rnu set surround +set iskeyword+=$ set vb set ignorecase smartcase diff --git a/.vimrc b/.vimrc index ac57274..5a6c045 100644 --- a/.vimrc +++ b/.vimrc @@ -2,8 +2,15 @@ set nocompatible " be iMproved, required if has('win32') || has ('win64') let $VIMHOME = $HOME."/vimfiles" + + set backupdir=$TEMP// + set directory=$TEMP// else let $VIMHOME = $HOME."/.vim" + + let &t_SI = "\[6 q" + let &t_SR = "\[4 q" + let &t_EI = "\[2 q" endif call plug#begin($VIMHOME.'/plugged') @@ -22,9 +29,6 @@ Plug 'tpope/vim-surround' call plug#end() -set backupdir=$TEMP// -set directory=$TEMP// - set colorcolumn=80,120 " diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..f7ecd95 --- /dev/null +++ b/.zshrc @@ -0,0 +1,87 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH + +# Path to your oh-my-zsh installation. + export ZSH=/home/kacper/.oh-my-zsh + +# Set name of the theme to load. Optionally, if you set this to "random" +# it'll load a random theme each time that oh-my-zsh is loaded. +# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes +ZSH_THEME="robbyrussell" + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. Case +# sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment the following line to disable bi-weekly auto-update checks. +# DISABLE_AUTO_UPDATE="true" + +# Uncomment the following line to change how often to auto-update (in days). +# export UPDATE_ZSH_DAYS=13 + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) +# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=(git zsh-syntax-highlighting symfony2) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +unsetopt share_history + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# ssh +# export SSH_KEY_PATH="~/.ssh/rsa_id" + +# Set personal aliases, overriding those provided by oh-my-zsh libs, +# plugins, and themes. Aliases can be placed here, though oh-my-zsh +# users are encouraged to define aliases within the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" diff --git a/awesome/ISSUE_TEMPLATE.md b/awesome/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..09dda28 --- /dev/null +++ b/awesome/ISSUE_TEMPLATE.md @@ -0,0 +1,29 @@ +# If you have a question + +Take the following steps: + +1. [Google it](https://encrypted.google.com) +2. Search [Awesome doc](https://awesomewm.org/doc) +3. Ask [community](https://awesomewm.org/community) + +and, if you still don't have an answer, you can ask here. + +**Please be warned:** if your question is unrelated to this repository, a reply is only an act of kindness. + +# If you have an issue + +First do + +1. search the [issues section](https://github.com/copycat-killer/awesome-copycats/issues) and +2. search [lain issues section](https://github.com/copycat-killer/lain/issues) and +2. try with default Awesome configuration, usually located in `/etc/xdg/awesome/rc.lua` or `/usr/local/etc/xdg/awesome/rc.lua`. + +If you can't find a solution and your issue doesn't happen with default configuration, then go ahead and provide: + +* output of `awesome -v` and `lua -v` +* expected behavior and actual behavior +* steps to reproduce the problem + +# If you have a new feature or theme request + +Write a detailed description of the desired design, preferably with screenshots or mockups. diff --git a/awesome/README.rst b/awesome/README.rst new file mode 100644 index 0000000..9dc26e9 --- /dev/null +++ b/awesome/README.rst @@ -0,0 +1,168 @@ +Awesome WM Copycats +=================== + +------------------------- +Themes for Awesome WM 4.x +------------------------- + +:Author: Luke Bonham +:Version: git +:License: BY-NC-SA_ +:Source: https://github.com/copycat-killer/awesome-copycats + +Description +=========== + +A set of themes for the Awesome_ window manager, version >= 4.0. + +See branches_ for previous versions. + +Features +======== + +- Modularity +- Autohide widgets +- Autostart windowless processes +- Fast MPD and volume shortcuts (first time this trick has been used in Awesome) +- Shortcuts for copying to the clipboard (no need for clipboard managers), toggle wiboxes, widgets popups, screenshots capture, moving and magnifying clients +- Quake drop-down terminal +- Calendar with current day highlighted and months switch with a click/scroll +- Notifications for new mails, current song, volume level, hdd critical state, low battery +- OpenWeatherMap integration +- Net carrier status notifier +- Symbolic tag names +- DWM-like textual layoutbox +- Cairo wibar +- Custom layouts +- No borders when there's only one visible client +- Freedesktop.org compliant menu and desktop icons +- Vi-like client focus +- Non-empty tag browsing +- On-the-fly useless gaps resize +- Dynamic tagging + +Gallery +======= + +**Multicolor**, inspired by lucamanni_ + +.. image:: http://dotshare.it/public/images/uploads/650.png + +**Powerarrow**, porting of romockee_'s + +.. image:: http://dotshare.it/public/images/uploads/1453.png + +**Powerarrow Dark** + +.. image:: http://dotshare.it/public/images/uploads/649.jpg + +**Steamburn**, porting of ok100_'s dwm + +.. image:: http://dotshare.it/public/images/uploads/648.png + +**Blackburn** + +.. image:: http://dotshare.it/public/images/uploads/553.png + +**Dremora** + +.. image:: http://dotshare.it/public/images/uploads/652.png + +**Rainbow** + +.. image:: http://dotshare.it/public/images/uploads/606.png + +**Holo**, requested by amouly_ + +.. image:: http://dotshare.it/public/images/uploads/651.jpg + +**Copland**, inspired by foozer_ + +.. image:: http://dotshare.it/public/images/uploads/655.png + +**Vertex**, requested by swordfischer_ + +.. image:: http://dotshare.it/public/images/uploads/1432.jpg + +Installation +============ + +.. code-block:: shell + + $ git clone --recursive https://github.com/copycat-killer/awesome-copycats.git + $ mv -bv awesome-copycats/* ~/.config/awesome; rm -r awesome-copycats + +Usage +===== + +The modular structure allows to + +* set variables +* define startup processes +* change keybindings and layouts +* set client properties + +in ``rc.lua``, and + +* configure widgets +* define wiboxes and screen settings + +in ``theme.lua``, so that you just need to change ``chosen_theme`` variable in ``rc.lua`` to preserve your preferences *and* switch the theme, instead of having N different ``rc.lua`` full of redundancy. + +Just do the following: + +.. code-block:: shell + + $ cd ~/.config/awesome + $ cp rc.lua.template rc.lua + +Then, set the variable ``chosen_theme`` in ``rc.lua`` to your preferred theme, do your settings, and restart Awesome (``Mod4 + ctrl + r``). + +To customize a theme, head over ``themes/$chosen_theme/theme.lua``. + +Otherwise, if you want to be synced with upstream, modify ``theme_path`` variable in ``rc.lua`` like this: + +.. code-block:: diff + + -local theme_path = string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), chosen_theme) + +local theme_path = string.format("%s/.config/awesome/themes/%s/theme-personal.lua", os.getenv("HOME"), chosen_theme) + +then, copy ``theme.lua`` to ``theme-personal.lua`` and do your customizations there. + +This way, you can safely ``git pull`` anytime. + +Notes +===== + +Complements are provided by lain_ and freedesktop_. + +Fonts are Terminus_ (Multicolor, Powerarrow Darker), Tamzen_ (Copland), Roboto_ (Holo, Vertex) and Tamsyn_ (other ones). + +Every theme has a colorscheme_. + +Blackburn and Dremora use Icons_, Vertex uses FontAwesome_: be sure to have bitmaps enabled if running under Debian or Ubuntu_. + +Additional software used: :: + + unclutter firefox scrot mpd mpc dmenu xsel + +.. _BY-NC-SA: http://creativecommons.org/licenses/by-nc-sa/4.0 +.. _b0ab0d7: https://github.com/copycat-killer/awesome-copycats/tree/b0ab0d7837987be81b9195a36631df773113d491 +.. _Awesome: http://github.com/awesomeWM/awesome +.. _lucamanni: https://github.com/lucamanni/awesome +.. _romockee: https://github.com/romockee/powerarrow +.. _ok100: http://ok100.deviantart.com/art/DWM-January-2013-348656846 +.. _amouly: https://bbs.archlinux.org/viewtopic.php?pid=1307158#p1307158 +.. _swordfischer: https://github.com/copycat-killer/awesome-copycats/issues/53 +.. _foozer: http://dotshare.it/dots/499 +.. _lain: https://github.com/copycat-killer/lain +.. _freedesktop: https://github.com/copycat-killer/freedesktop +.. _Terminus: http://terminus-font.sourceforge.net +.. _Tamzen: https://github.com/sunaku/tamzen-font +.. _Roboto: https://fonts.google.com/specimen/Roboto +.. _Tamsyn: http://www.fial.com/~scott/tamsyn-font +.. _colorscheme: https://github.com/copycat-killer/dots/tree/master/.colors +.. _Icons: https://github.com/copycat-killer/dots/tree/master/.fonts +.. _Ubuntu: https://wiki.ubuntu.com/Fonts#Enabling_Bitmapped_Fonts +.. _FontAwesome: https://github.com/FortAwesome/Font-Awesome +.. _branches: https://github.com/copycat-killer/awesome-copycats/branches diff --git a/awesome/awesome-copycats b/awesome/awesome-copycats new file mode 160000 index 0000000..03d3722 --- /dev/null +++ b/awesome/awesome-copycats @@ -0,0 +1 @@ +Subproject commit 03d372281ce9358a8d73689a2ffcb429918d5f39 diff --git a/awesome/freedesktop/LICENSE b/awesome/freedesktop/LICENSE new file mode 100644 index 0000000..23cb790 --- /dev/null +++ b/awesome/freedesktop/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/awesome/freedesktop/README.rst b/awesome/freedesktop/README.rst new file mode 100644 index 0000000..cb7351f --- /dev/null +++ b/awesome/freedesktop/README.rst @@ -0,0 +1,52 @@ +Awesome-Freedesktop +=================== + +------------------------------------------------------------------- +Freedesktop.org menu and desktop icons support for Awesome WM 4.x +------------------------------------------------------------------- + +:Original author: Antonio Terceiro +:Maintainer: Luke Bonham +:Version: git +:License: GNU-GPL2_ +:Source: https://github.com/copycat-killer/awesome-freedesktop + +Description +----------- + +This is a port of awesome-freedesktop_ to Awesome_ 4.x. + +**Note**: if you still have to use branch 3.5.x, you can refer to the commit 2c695a9_, but be aware that it's no longer supported. + +Since the introduction of Menubar_ as core library for providing Freedesktop.org menu functionalities in Awesome, +we can now avoid all the dirty work by just exploiting ``menubar.utils`` functions. + +At the initial status of this port, the menu is pretty much complete, while the desktop icons are very basic, +so the long term objective will be to complete functionalities on this part too. + +More specifically, the todo list is: + +- A better way to handle desktop icons path +- Ability to drag and line up icons +- Event-based signals, in particular: + - Updating trash icon according to its status + - Dynamic update (no need to restart Awesome to see changes on desktop) + +Screenshot +---------- + +.. image:: screenshot.png + :align: center + :alt: Showcase of Freedesktop support in Awesome, using Adwaita icons + +Installation and usage +---------------------- + +Read the wiki_. + +.. _GNU-GPL2: http://www.gnu.org/licenses/gpl-2.0.html +.. _awesome-freedesktop: https://github.com/terceiro/awesome-freedesktop +.. _Awesome: https://github.com/awesomeWM/awesome +.. _2c695a9: https://github.com/copycat-killer/awesome-freedesktop/tree/2c695a922856e22d117cd80486d6ce67d79a72df +.. _Menubar: https://github.com/awesomeWM/awesome/tree/master/lib/menubar +.. _wiki: https://github.com/copycat-killer/awesome-freedesktop/wiki diff --git a/awesome/freedesktop/awesome-freedesktop-git.rockspec b/awesome/freedesktop/awesome-freedesktop-git.rockspec new file mode 100644 index 0000000..36264f2 --- /dev/null +++ b/awesome/freedesktop/awesome-freedesktop-git.rockspec @@ -0,0 +1,20 @@ +package = "awesome-freedesktop" +version = "git" +source = { + url = "https://github.com/copycat-killer/awesome-freedesktop", + tag = "git" +} +description = { + summary = "Freedesktop.org menu and desktop icons support for Awesome WM", + homepage = "https://github.com/copycat-killer/awesome-freedesktop", + license = "GPL v2" +} +dependencies = { + "lua >= 5.3", + "awesome >= 4.0" +} +supported_platforms = { "linux" } +build = { + type = "builtin", + modules = { freedesktop = "init.lua" } +} diff --git a/awesome/freedesktop/desktop.lua b/awesome/freedesktop/desktop.lua new file mode 100644 index 0000000..cf6139b --- /dev/null +++ b/awesome/freedesktop/desktop.lua @@ -0,0 +1,255 @@ + +--[[ + + Awesome-Freedesktop + Freedesktop.org compliant desktop entries and menu + + Desktop section + + Licensed under GNU General Public License v2 + * (c) 2016, Luke Bonham + * (c) 2009-2015, Antonio Terceiro + +--]] + +local awful = require("awful") +local theme = require("beautiful") +local utils = require("menubar.utils") +local wibox = require("wibox") + +local capi = { screen = screen } +local io = io +local ipairs = ipairs +local mouse = mouse +local os = os +local string = { format = string.format } +local table = table + +-- Desktop icons +-- freedesktop.desktop +local desktop = { + -- Default desktop basic icons + baseicons = { + [1] = { + label = "This PC", + icon = "computer", + onclick = "computer://" + }, + [2] = { + label = "Home", + icon = "user-home", + onclick = os.getenv("HOME") + }, + [3] = { + label = "Trash", + icon = "user-trash", + onclick = "trash://" + } + }, + -- Default parameters + iconsize = { width = 48, height = 48 }, + labelsize = { width = 140, height = 20 }, + margin = { x = 20, y = 20 }, +} + +-- MIME types list +local mime_types = {} + +-- Icons positioning +local desktop_current_pos = {} + +-- @return iterator on input pipe +local function pipelines(...) + local f = assert(io.popen(...)) + return function () + local data = f:read() + if data == nil then f:close() end + return data + end +end + +-- Adds an icon to desktop +-- @param args settings from desktop.add_icons +-- @param label icon string label +-- @param icon icon string file path +-- @param onclick function to execute on click +function desktop.add_single_icon(args, label, icon, onclick) + local s = args.screen + + -- define icon dimensions and position + if not desktop_current_pos[s] then + desktop_current_pos[s] = { x = (capi.screen[s].geometry.x + args.iconsize.width + args.margin.x), y = 40 } + end + + local totheight = (icon and args.iconsize.height or 0) + (label and args.labelsize.height or 0) + if totheight == 0 then return end + + if desktop_current_pos[s].y + totheight > capi.screen[s].geometry.height - 40 then + desktop_current_pos[s].x = desktop_current_pos[s].x + args.labelsize.width + args.iconsize.width + args.margin.x + desktop_current_pos[s].y = 40 + end + + local common = { screen = s, bg = "#00000000", visible = true, type = "desktop" } + + -- create icon container + if icon then + common.width = args.iconsize.width + common.height = args.iconsize.height + common.x = desktop_current_pos[s].x + common.y = desktop_current_pos[s].y + + icon = wibox.widget { + image = icon, + resize = false, + widget = wibox.widget.imagebox + } + + icon:buttons(awful.button({ }, 1, nil, onclick)) + + icon_container = wibox(common) + icon_container:set_widget(icon) + + desktop_current_pos[s].y = desktop_current_pos[s].y + args.iconsize.height + 5 + end + + -- create label container + if label then + common.width = args.labelsize.width + common.height = args.labelsize.height + common.x = desktop_current_pos[s].x - (args.labelsize.width/2) + args.iconsize.width/2 + common.y = desktop_current_pos[s].y + + caption = wibox.widget { + text = label, + align = "center", + forced_width = common.width, + forced_height = common.height, + ellipsize = "middle", + widget = wibox.widget.textbox + } + + caption:buttons(awful.button({ }, 1, onclick)) + caption_container = wibox(common) + caption_container:set_widget(caption) + end + + desktop_current_pos[s].y = desktop_current_pos[s].y + args.labelsize.height + args.margin.y +end + +-- Adds base icons (This PC, Trash, etc) to desktop +-- @param args settings from desktop.add_icons +function desktop.add_base_icons(args) + for _,base in ipairs(args.baseicons) do + desktop.add_single_icon(args, base.label, utils.lookup_icon(base.icon), function() + awful.spawn(string.format("%s '%s'", args.open_width, base.onclick)) + end) + end +end + +-- Looks up a suitable icon for filename +-- @param filename string file name +-- @return icon file path (string) +function desktop.lookup_file_icon(filename) + -- load system MIME types + if #mime_types == 0 then + for line in io.lines("/etc/mime.types") do + if not line:find("^#") then + local parsed = {} + for w in line:gmatch("[^%s]+") do + table.insert(parsed, w) + end + if #parsed > 1 then + for i = 2, #parsed do + mime_types[parsed[i]] = parsed[1]:gsub("/", "-") + end + end + end + end + end + + -- try to search a possible icon among standards + local extension = filename:match("%a+$") + local mime = mime_types[extension] or "" + local mime_family = mime:match("^%a+") or "" + + local possible_filenames = { + mime, "gnome-mime-" .. mime, + mime_family, "gnome-mime-" .. mime_family, + extension + } + + for i, filename in ipairs(possible_filenames) do + local icon = utils.lookup_icon(filename) + if icon then return icon end + end + + -- if we don"t find ad icon, then pretend is a plain text file + return utils.lookup_icon("text-x-generic") +end + +-- Parse subdirectories and files list from input directory +-- @input dir directory to parse (string) +-- @return files table with found entries +function desktop.parse_dirs_and_files(dir) + local files = {} + local paths = pipelines('find '..dir..' -maxdepth 1 -type d | tail -1') + for path in paths do + if path:match("[^/]+$") then + local file = {} + file.filename = path:match("[^/]+$") + file.path = path + file.show = true + file.icon = utils.lookup_icon("folder") + table.insert(files, file) + end + end + local paths = pipelines('find '..dir..' -maxdepth 1 -type f') + for path in paths do + if not path:find("%.desktop$") then + local file = {} + file.filename = path:match("[^/]+$") + file.path = path + file.show = true + file.icon = desktop.lookup_file_icon(file.filename) + table.insert(files, file) + end + end + return files +end + +-- Adds subdirectories and files icons from args.dir +-- @param args settings from desktop.add_icons +function desktop.add_dirs_and_files_icons(args) + for _, file in ipairs(desktop.parse_dirs_and_files(args.dir)) do + if file.show then + local label = args.showlabels and file.filename or nil + local onclick = function () awful.spawn(string.format("%s '%s'", args.open_with, file.path)) end + desktop.add_single_icon(args, label, file.icon, onclick) + end + end +end + +-- Main function, adds base, directory and files icons +-- @param args user defined settings, with fallback on defaults +function desktop.add_icons(args) + args = args or {} + args.screen = args.screen or mouse.screen + args.dir = args.dir or os.getenv("HOME") .. "/Desktop" + args.showlabels = args.showlabel or true + args.open_with = args.open_with or "xdg_open" + args.baseicons = args.baseicons or desktop.baseicons + args.iconsize = args.iconsize or desktop.iconsize + args.labelsize = args.labelsize or desktop.labelsize + args.margin = args.margin or desktop.margin + + -- trying to fallback on Adwaita if theme.icon_theme is not defined + -- if Adwaita is missing too, no icons will be shown + if not theme.icon_theme then + theme.icon_theme = args.icon_theme or "Adwaita" + end + + desktop.add_base_icons(args) + desktop.add_dirs_and_files_icons(args) +end + +return desktop diff --git a/awesome/freedesktop/init.lua b/awesome/freedesktop/init.lua new file mode 100644 index 0000000..cb0548f --- /dev/null +++ b/awesome/freedesktop/init.lua @@ -0,0 +1,16 @@ + +--[[ + + Awesome-Freedesktop + Freedesktop.org compliant desktop entries and menu + + Licensed under GNU General Public License v2 + * (c) 2016, Luke Bonham + * (c) 2009-2015, Antonio Terceiro + +--]] + +return { + desktop = require("freedesktop.desktop"), + menu = require("freedesktop.menu") +} diff --git a/awesome/freedesktop/menu.lua b/awesome/freedesktop/menu.lua new file mode 100644 index 0000000..591fd74 --- /dev/null +++ b/awesome/freedesktop/menu.lua @@ -0,0 +1,123 @@ + +--[[ + + Awesome-Freedesktop + Freedesktop.org compliant desktop entries and menu + + Menu section + + Licensed under GNU General Public License v2 + * (c) 2016, Luke Bonham + * (c) 2014, Harvey Mittens + +--]] + +local awful_menu = require("awful.menu") +local menu_gen = require("menubar.menu_gen") +local menu_utils = require("menubar.utils") +local icon_theme = require("menubar.icon_theme") + +local os = { execute = os.execute, + getenv = os.getenv } +local pairs = pairs +local string = { byte = string.byte, + format = string.format } +local table = { insert = table.insert, + remove = table.remove, + sort = table.sort } + +-- Add support for NixOS systems too +table.insert(menu_gen.all_menu_dirs, string.format("%s/.nix-profile/share/applications", os.getenv("HOME"))) + +-- Remove non existent paths in order to avoid issues +local existent_paths = {} +for k,v in pairs(menu_gen.all_menu_dirs) do + if os.execute(string.format("ls %s &> /dev/null", v)) then + table.insert(existent_paths, v) + end +end +menu_gen.all_menu_dirs = existent_paths + +-- Expecting a wm_name of awesome omits too many applications and tools +menu_utils.wm_name = "" + +-- Menu +-- freedesktop.menu +local menu = {} + +-- Determines whether an table includes a certain element +-- @param tab a given table +-- @param val the element to search for +-- @return true if the given string is found within the search table; otherwise, false if not +local function has_value (tab, val) + for index, value in ipairs(tab) do + if val:find(value) then + return true + end + end + return false +end + +-- Use MenuBar parsing utils to build a menu for Awesome +-- @return awful.menu +function menu.build(args) + local args = args or {} + local icon_size = args.icon_size + local before = args.before or {} + local after = args.after or {} + local skip_items = args.skip_items or {} + + local result = {} + local _menu = awful_menu({ items = before }) + + menu_gen.generate(function(entries) + -- Add category icons + for k, v in pairs(menu_gen.all_categories) do + table.insert(result, { k, {}, v.icon }) + end + + -- Get items table + for k, v in pairs(entries) do + for _, cat in pairs(result) do + if cat[1] == v.category then + if not has_value(skip_items, v.name) then + table.insert(cat[2], { v.name, v.cmdline, v.icon }) + end + break + end + end + end + + -- Cleanup things a bit + for i = #result, 1, -1 do + local v = result[i] + if #v[2] == 0 then + -- Remove unused categories + table.remove(result, i) + else + --Sort entries alphabetically (by name) + table.sort(v[2], function (a, b) return string.byte(a[1]) < string.byte(b[1]) end) + -- Replace category name with nice name + v[1] = menu_gen.all_categories[v[1]].name + end + end + + -- Sort categories alphabetically also + table.sort(result, function(a, b) return string.byte(a[1]) < string.byte(b[1]) end) + + -- Add items to menu + for _, v in pairs(result) do _menu:add(v) end + for _, v in pairs(after) do _menu:add(v) end + end) + + -- Set icon size + if icon_size then + for _,v in pairs(menu_gen.all_categories) do + v.icon = icon_theme():find_icon_path(v.icon_name, icon_size) + end + end + + return _menu +end + +return menu diff --git a/awesome/freedesktop/screenshot.png b/awesome/freedesktop/screenshot.png new file mode 100644 index 0000000..2cf88e5 Binary files /dev/null and b/awesome/freedesktop/screenshot.png differ diff --git a/awesome/lain b/awesome/lain new file mode 160000 index 0000000..245ab7c --- /dev/null +++ b/awesome/lain @@ -0,0 +1 @@ +Subproject commit 245ab7c33a3261bd2730fdb054e888e31b26f1db diff --git a/awesome/rc.lua b/awesome/rc.lua new file mode 100644 index 0000000..70808a2 --- /dev/null +++ b/awesome/rc.lua @@ -0,0 +1,707 @@ + +--[[ + + Awesome WM configuration template + github.com/copycat-killer + +--]] + +-- {{{ Required libraries +local awesome, client, mouse, screen, tag = awesome, client, mouse, screen, tag +local ipairs, string, os, table, tostring, tonumber, type = ipairs, string, os, table, tostring, tonumber, type + +local gears = require("gears") +local awful = require("awful") + require("awful.autofocus") +local wibox = require("wibox") +local beautiful = require("beautiful") +local naughty = require("naughty") +local lain = require("lain") +--local menubar = require("menubar") +local freedesktop = require("freedesktop") +local hotkeys_popup = require("awful.hotkeys_popup").widget +-- }}} + +-- {{{ Error handling +if awesome.startup_errors then + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) +end + +do + local in_error = false + awesome.connect_signal("debug::error", function (err) + if in_error then return end + in_error = true + + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = tostring(err) }) + in_error = false + end) +end +-- }}} + +-- {{{ Autostart windowless processes +local function run_once(cmd_arr) + for _, cmd in ipairs(cmd_arr) do + findme = cmd + firstspace = cmd:find(" ") + if firstspace then + findme = cmd:sub(0, firstspace-1) + end + awful.spawn.with_shell(string.format("pgrep -u $USER -x %s > /dev/null || (%s)", findme, cmd)) + end +end + +-- Toggle titlebar on or off depending on s. Creates titlebar if it doesn't exist +local function setTitlebar(client, s) + if s then + if client.titlebar == nil then + client:emit_signal("request::titlebars", "rules", {}) + end + awful.titlebar.show(client) + else + awful.titlebar.hide(client) + end +end + +run_once({ "unclutter -root" }) -- entries must be comma-separated +run_once({ "xcompmgr" }) -- entries must be comma-separated +-- }}} + +-- {{{ Variable definitions +local chosen_theme = "powerarrow-dark" +local modkey = "Mod4" +local altkey = "Mod1" +local terminal = "urxvt" +local editor = os.getenv("EDITOR") or "vim" +local gui_editor = "code" +local browser = "firefox" + + +awful.util.terminal = terminal + +awful.util.tagnames = { "WORK", "WWW", "CLI", "MSG", "OTHER", "DB" } +awful.util.taglayout = { + awful.layout.suit.tile, + awful.layout.suit.tile, + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile, + awful.layout.suit.tile +} + +awful.layout.layouts = { + awful.layout.suit.floating, + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile.bottom, + awful.layout.suit.tile.top, + --awful.layout.suit.fair, + --awful.layout.suit.fair.horizontal, + --awful.layout.suit.spiral, + --awful.layout.suit.spiral.dwindle, + --awful.layout.suit.max, + --awful.layout.suit.max.fullscreen, + --awful.layout.suit.magnifier, + --awful.layout.suit.corner.nw, + --awful.layout.suit.corner.ne, + --awful.layout.suit.corner.sw, + --awful.layout.suit.corner.se, + --lain.layout.cascade, + --lain.layout.cascade.tile, + --lain.layout.centerwork, + --lain.layout.centerwork.horizontal, + --lain.layout.termfair, + --lain.layout.termfair.center, +} +awful.util.taglist_buttons = awful.util.table.join( + awful.button({ }, 1, function(t) t:view_only() end), + awful.button({ modkey }, 1, function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, function(t) + if client.focus then + client.focus:toggle_tag(t) + end + end), + awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end), + awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end) + ) +awful.util.tasklist_buttons = awful.util.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + -- Without this, the following + -- :isvisible() makes no sense + c.minimized = false + if not c:isvisible() and c.first_tag then + c.first_tag:view_only() + end + -- This will also un-minimize + -- the client, if needed + client.focus = c + c:raise() + end + end), + awful.button({ }, 3, function() + local instance = nil + + return function () + if instance and instance.wibox.visible then + instance:hide() + instance = nil + else + instance = awful.menu.clients({ theme = { width = 250 } }) + end + end + end), + awful.button({ }, 4, function () + awful.client.focus.byidx(1) + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(-1) + end)) + +lain.layout.termfair.nmaster = 3 +lain.layout.termfair.ncol = 1 +lain.layout.termfair.center.nmaster = 3 +lain.layout.termfair.center.ncol = 1 +lain.layout.cascade.tile.offset_x = 2 +lain.layout.cascade.tile.offset_y = 32 +lain.layout.cascade.tile.extra_padding = 5 +lain.layout.cascade.tile.nmaster = 5 +lain.layout.cascade.tile.ncol = 2 + +local theme_path = string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), chosen_theme) +beautiful.init(theme_path) +beautiful.notification_height = 32 +-- }}} + +-- {{{ Menu +local myawesomemenu = { + { "hotkeys", function() return false, hotkeys_popup.show_help end }, + { "manual", terminal .. " -e man awesome" }, + { "edit config", string.format("%s -e %s %s", terminal, editor, awesome.conffile) }, + { "restart", awesome.restart }, + { "quit", function() awesome.quit() end } +} +awful.util.mymainmenu = freedesktop.menu.build({ + icon_size = beautiful.menu_height or 16, + before = { + { "Awesome", myawesomemenu, beautiful.awesome_icon }, + -- other triads can be put here + }, + after = { + { "Open terminal", terminal }, + -- other triads can be put here + } +}) +--menubar.utils.terminal = terminal -- Set the Menubar terminal for applications that require it +-- }}} + +-- {{{ Screen +-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) +screen.connect_signal("property::geometry", function(s) + -- Wallpaper + if beautiful.wallpaper then + local wallpaper = beautiful.wallpaper + -- If wallpaper is a function, call it with the screen + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + end +end) +-- Create a wibox for each screen and add it +awful.screen.connect_for_each_screen(function(s) beautiful.at_screen_connect(s) end) +-- }}} + +-- {{{ Mouse bindings +root.buttons(awful.util.table.join( + awful.button({ }, 3, function () awful.util.mymainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) +)) +-- }}} + +-- {{{ Key bindings +globalkeys = awful.util.table.join( + -- Take a screenshot + -- https://github.com/copycat-killer/dots/blob/master/bin/screenshot + awful.key({ altkey }, "p", function() os.execute("screenshot") end), + + -- Hotkeys + awful.key({ modkey, }, "s", hotkeys_popup.show_help, + {description="show help", group="awesome"}), + -- Tag browsing + awful.key({ modkey, }, "Left", awful.tag.viewprev, + {description = "view previous", group = "tag"}), + awful.key({ modkey, }, "Right", awful.tag.viewnext, + {description = "view next", group = "tag"}), + awful.key({ modkey, }, "Escape", awful.tag.history.restore, + {description = "go back", group = "tag"}), + + -- Non-empty tag browsing + awful.key({ altkey }, "Left", function () lain.util.tag_view_nonempty(-1) end, + {description = "view previous nonempty", group = "tag"}), + awful.key({ altkey }, "Right", function () lain.util.tag_view_nonempty(1) end, + {description = "view previous nonempty", group = "tag"}), + + -- Default client focus + awful.key({ altkey, }, "j", + function () + awful.client.focus.byidx( 1) + end, + {description = "focus next by index", group = "client"} + ), + awful.key({ altkey, }, "k", + function () + awful.client.focus.byidx(-1) + end, + {description = "focus previous by index", group = "client"} + ), + + -- By direction client focus + awful.key({ modkey }, "j", + function() + awful.client.focus.bydirection("down") + if client.focus then client.focus:raise() end + end), + awful.key({ modkey }, "k", + function() + awful.client.focus.bydirection("up") + if client.focus then client.focus:raise() end + end), + awful.key({ modkey }, "h", + function() + awful.client.focus.bydirection("left") + if client.focus then client.focus:raise() end + end), + awful.key({ modkey }, "l", + function() + awful.client.focus.bydirection("right") + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "w", function () awful.util.mymainmenu:show() end, + {description = "show main menu", group = "awesome"}), + + -- Layout manipulation + awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, + {description = "swap with next client by index", group = "client"}), + awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, + {description = "swap with previous client by index", group = "client"}), + awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end, + {description = "focus the next screen", group = "screen"}), + awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end, + {description = "focus the previous screen", group = "screen"}), + awful.key({ modkey, }, "u", awful.client.urgent.jumpto, + {description = "jump to urgent client", group = "client"}), + awful.key({ altkey, }, "Tab", + function () + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end, + {description = "go back", group = "client"}), + + -- Show/Hide Wibox + awful.key({ modkey }, "b", function () + for s in screen do + s.mywibox.visible = not s.mywibox.visible + if s.mybottomwibox then + s.mybottomwibox.visible = not s.mybottomwibox.visible + end + end + end), + + -- On the fly useless gaps change + awful.key({ altkey, "Control" }, "[", function () lain.util.useless_gaps_resize(1) end), + awful.key({ altkey, "Control" }, "]", function () lain.util.useless_gaps_resize(-1) end), + + -- Dynamic tagging + awful.key({ modkey, "Shift" }, "n", function () lain.util.add_tag() end), + awful.key({ modkey, "Shift" }, "r", function () lain.util.rename_tag() end), + awful.key({ modkey, "Shift" }, "Left", function () lain.util.move_tag(-1) end), -- move to previous tag + awful.key({ modkey, "Shift" }, "Right", function () lain.util.move_tag(1) end), -- move to next tag + awful.key({ modkey, "Shift" }, "d", function () lain.util.delete_tag() end), + + -- Standard program + awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end, + {description = "open a terminal", group = "launcher"}), + awful.key({ modkey, "Control" }, "r", awesome.restart, + {description = "reload awesome", group = "awesome"}), + awful.key({ modkey, "Shift" }, "q", awesome.quit, + {description = "quit awesome", group = "awesome"}), + + awful.key({ altkey, "Shift" }, "l", function () awful.tag.incmwfact( 0.05) end, + {description = "increase master width factor", group = "layout"}), + awful.key({ altkey, "Shift" }, "h", function () awful.tag.incmwfact(-0.05) end, + {description = "decrease master width factor", group = "layout"}), + awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, + {description = "increase the number of master clients", group = "layout"}), + awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, + {description = "decrease the number of master clients", group = "layout"}), + awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, + {description = "increase the number of columns", group = "layout"}), + awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, + {description = "decrease the number of columns", group = "layout"}), + awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end, + {description = "select next", group = "layout"}), + awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end, + {description = "select previous", group = "layout"}), + + awful.key({ modkey, "Control" }, "n", + function () + local c = awful.client.restore() + -- Focus restored client + if c then + client.focus = c + c:raise() + end + end, + {description = "restore minimized", group = "client"}), + + -- Dropdown application + awful.key({ modkey, }, "z", function () awful.screen.focused().quake:toggle() end), + + -- Screenshots + awful.key({ }, "Print", function () awful.spawn("flameshot gui") end), + awful.key({ "Control" }, "Print", function () awful.spawn("shutter -s") end), + + -- Widgets popups + awful.key({ altkey, }, "c", function () lain.widget.calendar.show(7) end), + awful.key({ altkey, }, "h", function () if beautiful.fs then beautiful.fs.show(7) end end), + awful.key({ altkey, }, "w", function () if beautiful.weather then beautiful.weather.show(7) end end), + + -- ALSA volume control + awful.key({ altkey }, "Up", + function () + os.execute(string.format("amixer -q set %s 1%%+", beautiful.volume.channel)) + beautiful.volume.update() + end), + awful.key({ altkey }, "Down", + function () + os.execute(string.format("amixer -q set %s 1%%-", beautiful.volume.channel)) + beautiful.volume.update() + end), + awful.key({ altkey }, "m", + function () + os.execute(string.format("amixer -q set %s toggle", beautiful.volume.togglechannel or beautiful.volume.channel)) + beautiful.volume.update() + end), + awful.key({ altkey, "Control" }, "m", + function () + os.execute(string.format("amixer -q set %s 100%%", beautiful.volume.channel)) + beautiful.volume.update() + end), + awful.key({ altkey, "Control" }, "0", + function () + os.execute(string.format("amixer -q set %s 0%%", beautiful.volume.channel)) + beautiful.volume.update() + end), + + -- MPD control + awful.key({ altkey, "Control" }, "Up", + function () + awful.spawn.with_shell("mpc toggle") + beautiful.mpd.update() + end), + awful.key({ altkey, "Control" }, "Down", + function () + awful.spawn.with_shell("mpc stop") + beautiful.mpd.update() + end), + awful.key({ altkey, "Control" }, "Left", + function () + awful.spawn.with_shell("mpc prev") + beautiful.mpd.update() + end), + awful.key({ altkey, "Control" }, "Right", + function () + awful.spawn.with_shell("mpc next") + beautiful.mpd.update() + end), + awful.key({ altkey }, "0", + function () + local common = { text = "MPD widget ", position = "top_middle", timeout = 2 } + if beautiful.mpd.timer.started then + beautiful.mpd.timer:stop() + common.text = common.text .. lain.util.markup.bold("OFF") + else + beautiful.mpd.timer:start() + common.text = common.text .. lain.util.markup.bold("ON") + end + naughty.notify(common) + end), + + -- Copy primary to clipboard (terminals to gtk) + awful.key({ modkey }, "c", function () awful.spawn("xsel | xsel -i -b") end), + -- Copy clipboard to primary (gtk to terminals) + awful.key({ modkey }, "v", function () awful.spawn("xsel -b | xsel") end), + + -- User programs + awful.key({ modkey }, "e", function () awful.spawn(gui_editor) end), + awful.key({ modkey }, "q", function () awful.spawn(browser) end), + + -- Default + --[[ Menubar + awful.key({ modkey }, "p", function() menubar.show() end, + {description = "show the menubar", group = "launcher"}) + --]] + --[[ dmenu + awful.key({ modkey }, "x", function () + awful.spawn(string.format("dmenu_run -i -fn 'Monospace' -nb '%s' -nf '%s' -sb '%s' -sf '%s'", + beautiful.bg_normal, beautiful.fg_normal, beautiful.bg_focus, beautiful.fg_focus)) + end) + --]] + -- Prompt + awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end, + {description = "run prompt", group = "launcher"}), + + awful.key({ modkey }, "x", + function () + awful.prompt.run { + prompt = "Run Lua code: ", + textbox = awful.screen.focused().mypromptbox.widget, + exe_callback = awful.util.eval, + history_path = awful.util.get_cache_dir() .. "/history_eval" + } + end, + {description = "lua execute prompt", group = "awesome"}) + --]] +) + +clientkeys = awful.util.table.join( + awful.key({ altkey, "Shift" }, "m", lain.util.magnify_client ), + awful.key({ modkey, }, "f", + function (c) + c.fullscreen = not c.fullscreen + c:raise() + end, + {description = "toggle fullscreen", group = "client"}), + awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end, + {description = "close", group = "client"}), + awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle , + {description = "toggle floating", group = "client"}), + awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, + {description = "move to master", group = "client"}), + awful.key({ modkey, }, "o", function (c) c:move_to_screen() end, + {description = "move to screen", group = "client"}), + awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end, + {description = "toggle keep on top", group = "client"}), + awful.key({ modkey, }, "n", + function (c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end , + {description = "minimize", group = "client"}), + awful.key({ modkey, }, "m", + function (c) + c.maximized = not c.maximized + c:raise() + end , + {description = "maximize", group = "client"}) +) + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it works on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = awful.util.table.join(globalkeys, + -- View tag only. + awful.key({ modkey }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() + end + end, + {description = "view tag #"..i, group = "tag"}), + -- Toggle tag display. + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + awful.tag.viewtoggle(tag) + end + end, + {description = "toggle tag #" .. i, group = "tag"}), + -- Move client to tag. + awful.key({ modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, + {description = "move focused client to tag #"..i, group = "tag"}), + -- Toggle tag on focused client. + awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:toggle_tag(tag) + end + end + end, + {description = "toggle focused client on tag #" .. i, group = "tag"}) + ) +end + +clientbuttons = awful.util.table.join( + awful.button({ }, 1, function (c) client.focus = c; c:raise() end), + awful.button({ modkey }, 1, awful.mouse.client.move), + awful.button({ modkey }, 3, awful.mouse.client.resize)) + +-- Set keys +root.keys(globalkeys) +-- }}} + +-- {{{ Rules +-- Rules to apply to new clients (through the "manage" signal). +awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = 0, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = awful.screen.preferred, + placement = awful.placement.no_overlap+awful.placement.no_offscreen, + size_hints_honor = false + }, + callback = awful.client.setslave + }, + + -- Titlebars + { rule_any = { type = { "dialog" } }, + properties = { titlebars_enabled = true } }, + + -- Set Firefox to always map on the first tag on screen 1. + { rule = { class = "urxvt" }, callback = awful.client.setslave }, + + -- Set Firefox to always map on the first tag on screen 1. + { rule = { class = "Firefox" }, properties = { + tag = "WWW", maximized = true + } }, + + { rule = { class = "jetbrains-phpstorm" }, properties = { titlebar_bg = "red" }, callback = function(c) + c:setmaster() + end }, + + { rule_any = { class = { "pidgin", "discord", "Thunderbird" } }, properties = { + tag = "MSG" + } }, + + { rule = { class = "Spotify" }, properties = { + tag = "OTHER" + } }, +} +-- }}} + +-- {{{ Signals +-- Signal function to execute when a new client appears. +client.connect_signal("manage", function (c) + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- if not awesome.startup then awful.client.setslave(c) end + + if awesome.startup and + not c.size_hints.user_position + and not c.size_hints.program_position then + -- Prevent clients from being unreachable after screen count changes. + awful.placement.no_offscreen(c) + end +end) + +-- Add a titlebar if titlebars_enabled is set to true in the rules. +client.connect_signal("request::titlebars", function(c) + -- Custom + if beautiful.titlebar_fun then + beautiful.titlebar_fun(c) + return + end + + -- Default + -- buttons for the titlebar + local buttons = awful.util.table.join( + awful.button({ }, 1, function() + client.focus = c + c:raise() + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + client.focus = c + c:raise() + awful.mouse.client.resize(c) + end) + ) + + awful.titlebar(c, {size = 16}) : setup { + { -- Left + awful.titlebar.widget.iconwidget(c), + buttons = buttons, + layout = wibox.layout.fixed.horizontal + }, + { -- Middle + { -- Title + align = "center", + widget = awful.titlebar.widget.titlewidget(c) + }, + buttons = buttons, + layout = wibox.layout.flex.horizontal + }, + { -- Right + awful.titlebar.widget.floatingbutton (c), + awful.titlebar.widget.maximizedbutton(c), + awful.titlebar.widget.stickybutton (c), + awful.titlebar.widget.ontopbutton (c), + awful.titlebar.widget.closebutton (c), + layout = wibox.layout.fixed.horizontal() + }, + layout = wibox.layout.align.horizontal + } +end) + +-- Enable sloppy focus, so that focus follows mouse. +--[[ client.connect_signal("mouse::enter", function(c) + if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier + and awful.client.focus.filter(c) then + client.focus = c + end +end) +]]-- + +-- No border for maximized clients +client.connect_signal("focus", + function(c) + if c.maximized then -- no borders if only 1 client visible + c.border_width = 0 + elseif #awful.screen.focused().clients > 1 then + c.border_width = 0 + c.border_color = beautiful.border_focus + end + end) +client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +-- }}} + +--Toggle titlebar on floating status change +client.connect_signal("property::floating", function(c) + setTitlebar(c, c.floating) +end) diff --git a/awesome/rc.lua.bckp b/awesome/rc.lua.bckp new file mode 100644 index 0000000..5b6e02f --- /dev/null +++ b/awesome/rc.lua.bckp @@ -0,0 +1,453 @@ +-- Standard awesome library +local gears = require("gears") +local awful = require("awful") +awful.rules = require("awful.rules") +require("awful.autofocus") +-- Widget and layout library +local wibox = require("wibox") +-- Theme handling library +local beautiful = require("beautiful") +-- Notification library +local naughty = require("naughty") +local menubar = require("menubar") + +-- Load Debian menu entries +require("debian.menu") + +-- {{{ Error handling +-- Check if awesome encountered an error during startup and fell back to +-- another config (This code will only ever execute for the fallback config) +if awesome.startup_errors then + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) +end + +-- Handle runtime errors after startup +do + local in_error = false + awesome.connect_signal("debug::error", function (err) + -- Make sure we don't go into an endless error loop + if in_error then return end + in_error = true + + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = err }) + in_error = false + end) +end +-- }}} + +-- {{{ Variable definitions +-- Themes define colours, icons, font and wallpapers. +beautiful.init("/usr/share/awesome/themes/default/theme.lua") + +-- This is used later as the default terminal and editor to run. +terminal = "x-terminal-emulator" +editor = os.getenv("EDITOR") or "editor" +editor_cmd = terminal .. " -e " .. editor + +-- Default modkey. +-- Usually, Mod4 is the key with a logo between Control and Alt. +-- If you do not like this or do not have such a key, +-- I suggest you to remap Mod4 to another key using xmodmap or other tools. +-- However, you can use another modifier like Mod1, but it may interact with others. +modkey = "Mod4" + +-- Table of layouts to cover with awful.layout.inc, order matters. +local layouts = +{ + awful.layout.suit.floating, + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile.bottom, + awful.layout.suit.tile.top, + awful.layout.suit.fair, + awful.layout.suit.fair.horizontal, + awful.layout.suit.spiral, + awful.layout.suit.spiral.dwindle, + awful.layout.suit.max, + awful.layout.suit.max.fullscreen, + awful.layout.suit.magnifier +} +-- }}} + +-- {{{ Wallpaper +if beautiful.wallpaper then + for s = 1, screen.count() do + gears.wallpaper.maximized(beautiful.wallpaper, s, true) + end +end +-- }}} + +-- {{{ Tags +-- Define a tag table which hold all screen tags. +tags = {} +for s = 1, screen.count() do + -- Each screen has its own tag table. + tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1]) +end +-- }}} + +-- {{{ Menu +-- Create a laucher widget and a main menu +myawesomemenu = { + { "manual", terminal .. " -e man awesome" }, + { "edit config", editor_cmd .. " " .. awesome.conffile }, + { "restart", awesome.restart }, + { "quit", awesome.quit } +} + +mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, + { "Debian", debian.menu.Debian_menu.Debian }, + { "open terminal", terminal } + } + }) + +mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, + menu = mymainmenu }) + +-- Menubar configuration +menubar.utils.terminal = terminal -- Set the terminal for applications that require it +-- }}} + +-- {{{ Wibox +-- Create a textclock widget +mytextclock = awful.widget.textclock() + +-- Create a wibox for each screen and add it +mywibox = {} +mypromptbox = {} +mylayoutbox = {} +mytaglist = {} +mytaglist.buttons = awful.util.table.join( + awful.button({ }, 1, awful.tag.viewonly), + awful.button({ modkey }, 1, awful.client.movetotag), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, awful.client.toggletag), + awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end), + awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end) + ) +mytasklist = {} +mytasklist.buttons = awful.util.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + -- Without this, the following + -- :isvisible() makes no sense + c.minimized = false + if not c:isvisible() then + awful.tag.viewonly(c:tags()[1]) + end + -- This will also un-minimize + -- the client, if needed + client.focus = c + c:raise() + end + end), + awful.button({ }, 3, function () + if instance then + instance:hide() + instance = nil + else + instance = awful.menu.clients({ + theme = { width = 250 } + }) + end + end), + awful.button({ }, 4, function () + awful.client.focus.byidx(1) + if client.focus then client.focus:raise() end + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end)) + +for s = 1, screen.count() do + -- Create a promptbox for each screen + mypromptbox[s] = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + mylayoutbox[s] = awful.widget.layoutbox(s) + mylayoutbox[s]:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), + awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) + -- Create a taglist widget + mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons) + + -- Create a tasklist widget + mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons) + + -- Create the wibox + mywibox[s] = awful.wibox({ position = "top", screen = s }) + + -- Widgets that are aligned to the left + local left_layout = wibox.layout.fixed.horizontal() + left_layout:add(mylauncher) + left_layout:add(mytaglist[s]) + left_layout:add(mypromptbox[s]) + + -- Widgets that are aligned to the right + local right_layout = wibox.layout.fixed.horizontal() + if s == 1 then right_layout:add(wibox.widget.systray()) end + right_layout:add(mytextclock) + right_layout:add(mylayoutbox[s]) + + -- Now bring it all together (with the tasklist in the middle) + local layout = wibox.layout.align.horizontal() + layout:set_left(left_layout) + layout:set_middle(mytasklist[s]) + layout:set_right(right_layout) + + mywibox[s]:set_widget(layout) +end +-- }}} + +-- {{{ Mouse bindings +root.buttons(awful.util.table.join( + awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) +)) +-- }}} + +-- {{{ Key bindings +globalkeys = awful.util.table.join( + awful.key({ modkey, }, "Left", awful.tag.viewprev ), + awful.key({ modkey, }, "Right", awful.tag.viewnext ), + awful.key({ modkey, }, "Escape", awful.tag.history.restore), + + awful.key({ modkey, }, "j", + function () + awful.client.focus.byidx( 1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "k", + function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "w", function () mymainmenu:show() end), + + -- Layout manipulation + awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), + awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), + awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), + awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), + awful.key({ modkey, }, "u", awful.client.urgent.jumpto), + awful.key({ modkey, }, "Tab", + function () + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end), + + -- Standard program + awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end), + awful.key({ modkey, "Control" }, "r", awesome.restart), + awful.key({ modkey, "Shift" }, "q", awesome.quit), + + awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), + awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), + awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), + awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), + awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), + awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), + awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end), + awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end), + + awful.key({ modkey, "Control" }, "n", awful.client.restore), + + -- Prompt + awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), + + awful.key({ modkey }, "x", + function () + awful.prompt.run({ prompt = "Run Lua code: " }, + mypromptbox[mouse.screen].widget, + awful.util.eval, nil, + awful.util.getdir("cache") .. "/history_eval") + end), + -- Menubar + awful.key({ modkey }, "p", function() menubar.show() end) +) + +clientkeys = awful.util.table.join( + awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), + awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), + awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), + awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), + awful.key({ modkey, }, "o", awful.client.movetoscreen ), + awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end), + awful.key({ modkey, }, "n", + function (c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end), + awful.key({ modkey, }, "m", + function (c) + c.maximized_horizontal = not c.maximized_horizontal + c.maximized_vertical = not c.maximized_vertical + end) +) + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it works on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = awful.util.table.join(globalkeys, + -- View tag only. + awful.key({ modkey }, "#" .. i + 9, + function () + local screen = mouse.screen + local tag = awful.tag.gettags(screen)[i] + if tag then + awful.tag.viewonly(tag) + end + end), + -- Toggle tag. + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = mouse.screen + local tag = awful.tag.gettags(screen)[i] + if tag then + awful.tag.viewtoggle(tag) + end + end), + -- Move client to tag. + awful.key({ modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = awful.tag.gettags(client.focus.screen)[i] + if tag then + awful.client.movetotag(tag) + end + end + end), + -- Toggle tag. + awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = awful.tag.gettags(client.focus.screen)[i] + if tag then + awful.client.toggletag(tag) + end + end + end)) +end + +clientbuttons = awful.util.table.join( + awful.button({ }, 1, function (c) client.focus = c; c:raise() end), + awful.button({ modkey }, 1, awful.mouse.client.move), + awful.button({ modkey }, 3, awful.mouse.client.resize)) + +-- Set keys +root.keys(globalkeys) +-- }}} + +-- {{{ Rules +-- Rules to apply to new clients (through the "manage" signal). +awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + size_hints_honor = false, + raise = true, + keys = clientkeys, + buttons = clientbuttons } }, + { rule = { class = "MPlayer" }, + properties = { floating = true } }, + { rule = { class = "pinentry" }, + properties = { floating = true } }, + { rule = { class = "gimp" }, + properties = { floating = true } }, + -- Set Firefox to always map on tags number 2 of screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { tag = tags[1][2] } }, +} +-- }}} + +-- {{{ Signals +-- Signal function to execute when a new client appears. +client.connect_signal("manage", function (c, startup) + -- Enable sloppy focus + c:connect_signal("mouse::enter", function(c) + if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier + and awful.client.focus.filter(c) then + client.focus = c + end + end) + + if not startup then + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- awful.client.setslave(c) + + -- Put windows in a smart way, only if they does not set an initial position. + if not c.size_hints.user_position and not c.size_hints.program_position then + awful.placement.no_overlap(c) + awful.placement.no_offscreen(c) + end + elseif not c.size_hints.user_position and not c.size_hints.program_position then + -- Prevent clients from being unreachable after screen count change + awful.placement.no_offscreen(c) + end + + local titlebars_enabled = false + if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then + -- buttons for the titlebar + local buttons = awful.util.table.join( + awful.button({ }, 1, function() + client.focus = c + c:raise() + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + client.focus = c + c:raise() + awful.mouse.client.resize(c) + end) + ) + + -- Widgets that are aligned to the left + local left_layout = wibox.layout.fixed.horizontal() + left_layout:add(awful.titlebar.widget.iconwidget(c)) + left_layout:buttons(buttons) + + -- Widgets that are aligned to the right + local right_layout = wibox.layout.fixed.horizontal() + right_layout:add(awful.titlebar.widget.floatingbutton(c)) + right_layout:add(awful.titlebar.widget.maximizedbutton(c)) + right_layout:add(awful.titlebar.widget.stickybutton(c)) + right_layout:add(awful.titlebar.widget.ontopbutton(c)) + right_layout:add(awful.titlebar.widget.closebutton(c)) + + -- The title goes in the middle + local middle_layout = wibox.layout.flex.horizontal() + local title = awful.titlebar.widget.titlewidget(c) + title:set_align("center") + middle_layout:add(title) + middle_layout:buttons(buttons) + + -- Now bring it all together + local layout = wibox.layout.align.horizontal() + layout:set_left(left_layout) + layout:set_right(right_layout) + layout:set_middle(middle_layout) + + awful.titlebar(c):set_widget(layout) + end +end) + +client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) +client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +-- }}} diff --git a/awesome/themes/blackburn/icons/awesome.png b/awesome/themes/blackburn/icons/awesome.png new file mode 100644 index 0000000..8193454 Binary files /dev/null and b/awesome/themes/blackburn/icons/awesome.png differ diff --git a/awesome/themes/blackburn/icons/dwindle.png b/awesome/themes/blackburn/icons/dwindle.png new file mode 100644 index 0000000..b911f94 Binary files /dev/null and b/awesome/themes/blackburn/icons/dwindle.png differ diff --git a/awesome/themes/blackburn/icons/fairh.png b/awesome/themes/blackburn/icons/fairh.png new file mode 100644 index 0000000..67656a3 Binary files /dev/null and b/awesome/themes/blackburn/icons/fairh.png differ diff --git a/awesome/themes/blackburn/icons/fairv.png b/awesome/themes/blackburn/icons/fairv.png new file mode 100644 index 0000000..274ed38 Binary files /dev/null and b/awesome/themes/blackburn/icons/fairv.png differ diff --git a/awesome/themes/blackburn/icons/floating.png b/awesome/themes/blackburn/icons/floating.png new file mode 100644 index 0000000..21326f4 Binary files /dev/null and b/awesome/themes/blackburn/icons/floating.png differ diff --git a/awesome/themes/blackburn/icons/magnifier.png b/awesome/themes/blackburn/icons/magnifier.png new file mode 100644 index 0000000..61e2867 Binary files /dev/null and b/awesome/themes/blackburn/icons/magnifier.png differ diff --git a/awesome/themes/blackburn/icons/max.png b/awesome/themes/blackburn/icons/max.png new file mode 100644 index 0000000..27905b6 Binary files /dev/null and b/awesome/themes/blackburn/icons/max.png differ diff --git a/awesome/themes/blackburn/icons/spiral.png b/awesome/themes/blackburn/icons/spiral.png new file mode 100644 index 0000000..85c1b99 Binary files /dev/null and b/awesome/themes/blackburn/icons/spiral.png differ diff --git a/awesome/themes/blackburn/icons/square_sel.png b/awesome/themes/blackburn/icons/square_sel.png new file mode 100644 index 0000000..6938cca Binary files /dev/null and b/awesome/themes/blackburn/icons/square_sel.png differ diff --git a/awesome/themes/blackburn/icons/square_unsel.png b/awesome/themes/blackburn/icons/square_unsel.png new file mode 100644 index 0000000..dd8064d Binary files /dev/null and b/awesome/themes/blackburn/icons/square_unsel.png differ diff --git a/awesome/themes/blackburn/icons/submenu.png b/awesome/themes/blackburn/icons/submenu.png new file mode 100644 index 0000000..10ca014 Binary files /dev/null and b/awesome/themes/blackburn/icons/submenu.png differ diff --git a/awesome/themes/blackburn/icons/tile.png b/awesome/themes/blackburn/icons/tile.png new file mode 100644 index 0000000..045eafa Binary files /dev/null and b/awesome/themes/blackburn/icons/tile.png differ diff --git a/awesome/themes/blackburn/icons/tilebottom.png b/awesome/themes/blackburn/icons/tilebottom.png new file mode 100644 index 0000000..556b465 Binary files /dev/null and b/awesome/themes/blackburn/icons/tilebottom.png differ diff --git a/awesome/themes/blackburn/icons/tileleft.png b/awesome/themes/blackburn/icons/tileleft.png new file mode 100644 index 0000000..7a5d3d4 Binary files /dev/null and b/awesome/themes/blackburn/icons/tileleft.png differ diff --git a/awesome/themes/blackburn/icons/tiletop.png b/awesome/themes/blackburn/icons/tiletop.png new file mode 100644 index 0000000..11cab1a Binary files /dev/null and b/awesome/themes/blackburn/icons/tiletop.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/close_focus.png b/awesome/themes/blackburn/icons/titlebar/close_focus.png new file mode 100644 index 0000000..e835562 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/close_focus.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/close_normal.png b/awesome/themes/blackburn/icons/titlebar/close_normal.png new file mode 100644 index 0000000..54b26f8 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/close_normal.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/floating_focus_active.png b/awesome/themes/blackburn/icons/titlebar/floating_focus_active.png new file mode 100644 index 0000000..7f01323 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/floating_focus_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/floating_focus_inactive.png b/awesome/themes/blackburn/icons/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..47f19f6 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/floating_focus_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/floating_normal_active.png b/awesome/themes/blackburn/icons/titlebar/floating_normal_active.png new file mode 100644 index 0000000..44b8dac Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/floating_normal_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/floating_normal_inactive.png b/awesome/themes/blackburn/icons/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..98f7f1d Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/floating_normal_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/maximized_focus_active.png b/awesome/themes/blackburn/icons/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..13c2c15 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/maximized_focus_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/maximized_focus_inactive.png b/awesome/themes/blackburn/icons/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..bce1d00 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/maximized_normal_active.png b/awesome/themes/blackburn/icons/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..00ae107 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/maximized_normal_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/maximized_normal_inactive.png b/awesome/themes/blackburn/icons/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..2e56d32 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/ontop_focus_active.png b/awesome/themes/blackburn/icons/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..1d82a6e Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/ontop_focus_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/ontop_focus_inactive.png b/awesome/themes/blackburn/icons/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..2f3a2be Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/ontop_normal_active.png b/awesome/themes/blackburn/icons/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..499dfbf Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/ontop_normal_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/ontop_normal_inactive.png b/awesome/themes/blackburn/icons/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..a9a3206 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/sticky_focus_active.png b/awesome/themes/blackburn/icons/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..0d56a16 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/sticky_focus_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/sticky_focus_inactive.png b/awesome/themes/blackburn/icons/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..5493d8e Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/sticky_normal_active.png b/awesome/themes/blackburn/icons/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..a150154 Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/sticky_normal_active.png differ diff --git a/awesome/themes/blackburn/icons/titlebar/sticky_normal_inactive.png b/awesome/themes/blackburn/icons/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..7e6c99b Binary files /dev/null and b/awesome/themes/blackburn/icons/titlebar/sticky_normal_inactive.png differ diff --git a/awesome/themes/blackburn/theme.lua b/awesome/themes/blackburn/theme.lua new file mode 100644 index 0000000..f842be0 --- /dev/null +++ b/awesome/themes/blackburn/theme.lua @@ -0,0 +1,270 @@ + +--[[ + + Blackburn Awesome WM theme 3.0 + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv } + +local theme = {} +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/blackburn" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "Misc Tamsyn 10.5" +theme.taglist_font = "Icons 10" +theme.fg_normal = "#D7D7D7" +theme.fg_focus = "#F6784F" +theme.bg_normal = "#060606" +theme.bg_focus = "#060606" +theme.fg_urgent = "#CC9393" +theme.bg_urgent = "#2A1F1E" +theme.border_width = 1 +theme.border_normal = "#0E0E0E" +theme.border_focus = "#F79372" +theme.taglist_fg_focus = "#F6784F" +theme.taglist_bg_focus = "#060606" +theme.tasklist_fg_focus = "#F6784F" +theme.tasklist_bg_focus = "#060606" +theme.menu_height = 16 +theme.menu_width = 130 +theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" +theme.awesome_icon = theme.dir .."/icons/awesome.png" +theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.layout_tile = theme.dir .. "/icons/tile.png" +theme.layout_tileleft = theme.dir .. "/icons/tileleft.png" +theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png" +theme.layout_tiletop = theme.dir .. "/icons/tiletop.png" +theme.layout_fairv = theme.dir .. "/icons/fairv.png" +theme.layout_fairh = theme.dir .. "/icons/fairh.png" +theme.layout_spiral = theme.dir .. "/icons/spiral.png" +theme.layout_dwindle = theme.dir .. "/icons/dwindle.png" +theme.layout_max = theme.dir .. "/icons/max.png" +theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png" +theme.layout_magnifier = theme.dir .. "/icons/magnifier.png" +theme.layout_floating = theme.dir .. "/icons/floating.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 0 +theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png" +theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png" +theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png" +theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png" +theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png" +theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png" +theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png" +theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png" +theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png" +theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png" + +awful.util.tagnames = { "ƀ", "Ƅ", "Ɗ", "ƈ", "ƙ" } + +local markup = lain.util.markup +local separators = lain.util.separators +local gray = "#9E9C9A" + +-- Textclock +local mytextclock = wibox.widget.textclock(" %H:%M ") +mytextclock.font = theme.font + +-- Calendar +lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + font = "Misc Tamsyn 11", + fg = theme.fg_normal, + bg = theme.bg_normal +}}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + notification_preset = { fg = white } + settings = function() + mail = "" + count = "" + + if mailcount > 0 then + mail = "Mail " + count = mailcount .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, mail) .. count)) + end +}) +--]] + +-- MPD +theme.mpd = lain.widget.mpd({ + settings = function() + mpd_notification_preset.fg = white + artist = mpd_now.artist .. " " + title = mpd_now.title .. " " + + if mpd_now.state == "pause" then + artist = "mpd " + title = "paused " + elseif mpd_now.state == "stop" then + artist = "" + title = "" + end + + widget:set_markup(markup.font(theme.font, markup(gray, artist) .. title .. " ")) + end +}) + +-- /home fs +theme.fs = lain.widget.fs({ + partition = "/home", + options = "--exclude-type=tmpfs", + notification_preset = { fg = white, bg = theme.bg_normal, font = "Misc Tamsyn 10.5" }, + settings = function() + fs_header = "" + fs_p = "" + + if tonumber(fs_now.used) >= 90 then + fs_header = " Hdd " + fs_p = fs_now.used + end + + widget:set_markup(markup.font(theme.font, markup(gray, fs_header) .. fs_p)) + end +}) + +-- Battery +local bat = lain.widget.bat({ + settings = function() + bat_header = " Bat " + bat_p = bat_now.perc .. " " + widget:set_markup(markup.font(theme.font, markup(gray, bat_header) .. bat_p)) + end +}) + +-- ALSA volume +theme.volume = lain.widget.alsa({ + --togglechannel = "IEC958,3", + settings = function() + header = " Vol " + vlevel = volume_now.level + + if volume_now.status == "off" then + vlevel = vlevel .. "M " + else + vlevel = vlevel .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, header) .. vlevel)) + end +}) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) + settings = function() + units = math.floor(weather_now["main"]["temp"]) + widget:set_markup(" " .. units .. " ") + end +}) + +-- Separators +local first = wibox.widget.textbox(' ') +local arrl_pre = separators.arrow_right("alpha", "#1A1A1A") +local arrl_post = separators.arrow_right("#1A1A1A", "alpha") + +local barheight = 18 +local barcolor = gears.color({ + type = "linear", + from = { barheight, 0 }, + to = { barheight, barheight }, + stops = { {0, theme.bg_focus }, {0.8, theme.border_normal}, {1, "#1A1A1A"} } +}) +theme.titlebar_bg = barcolor + +theme.titlebar_bg_focus = gears.color({ + type = "linear", + from = { barheight, 0 }, + to = { barheight, barheight }, + stops = { {0, theme.bg_normal}, {0.5, theme.border_normal}, {1, "#492417"} } +}) + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons, { bg_normal = barcolor, bg_focus = barcolor }) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = barcolor }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + first, + s.mytaglist, + arrl_pre, + s.mylayoutbox, + arrl_post, + s.mypromptbox, + first, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + first, + theme.mpd.widget, + --mail.widget, + theme.weather.icon, + theme.weather.widget, + theme.fs.widget, + bat, + theme.volume.widget, + mytextclock, + }, + } +end + +return theme diff --git a/awesome/themes/blackburn/wall.png b/awesome/themes/blackburn/wall.png new file mode 100644 index 0000000..6774d91 Binary files /dev/null and b/awesome/themes/blackburn/wall.png differ diff --git a/awesome/themes/copland/icons/ac.png b/awesome/themes/copland/icons/ac.png new file mode 100644 index 0000000..b103ac9 Binary files /dev/null and b/awesome/themes/copland/icons/ac.png differ diff --git a/awesome/themes/copland/icons/awesome.png b/awesome/themes/copland/icons/awesome.png new file mode 100644 index 0000000..1441881 Binary files /dev/null and b/awesome/themes/copland/icons/awesome.png differ diff --git a/awesome/themes/copland/icons/bat.png b/awesome/themes/copland/icons/bat.png new file mode 100644 index 0000000..ad16256 Binary files /dev/null and b/awesome/themes/copland/icons/bat.png differ diff --git a/awesome/themes/copland/icons/bat_low.png b/awesome/themes/copland/icons/bat_low.png new file mode 100644 index 0000000..c198675 Binary files /dev/null and b/awesome/themes/copland/icons/bat_low.png differ diff --git a/awesome/themes/copland/icons/bat_no.png b/awesome/themes/copland/icons/bat_no.png new file mode 100644 index 0000000..4110543 Binary files /dev/null and b/awesome/themes/copland/icons/bat_no.png differ diff --git a/awesome/themes/copland/icons/centerfair.png b/awesome/themes/copland/icons/centerfair.png new file mode 100644 index 0000000..178e24d Binary files /dev/null and b/awesome/themes/copland/icons/centerfair.png differ diff --git a/awesome/themes/copland/icons/centerwork.png b/awesome/themes/copland/icons/centerwork.png new file mode 100644 index 0000000..b8b728b Binary files /dev/null and b/awesome/themes/copland/icons/centerwork.png differ diff --git a/awesome/themes/copland/icons/disk.png b/awesome/themes/copland/icons/disk.png new file mode 100644 index 0000000..8ecee6b Binary files /dev/null and b/awesome/themes/copland/icons/disk.png differ diff --git a/awesome/themes/copland/icons/dwindle.png b/awesome/themes/copland/icons/dwindle.png new file mode 100644 index 0000000..b576f7b Binary files /dev/null and b/awesome/themes/copland/icons/dwindle.png differ diff --git a/awesome/themes/copland/icons/fairh.png b/awesome/themes/copland/icons/fairh.png new file mode 100644 index 0000000..3ec0abd Binary files /dev/null and b/awesome/themes/copland/icons/fairh.png differ diff --git a/awesome/themes/copland/icons/fairv.png b/awesome/themes/copland/icons/fairv.png new file mode 100644 index 0000000..e1d543c Binary files /dev/null and b/awesome/themes/copland/icons/fairv.png differ diff --git a/awesome/themes/copland/icons/floating.png b/awesome/themes/copland/icons/floating.png new file mode 100644 index 0000000..fe4a801 Binary files /dev/null and b/awesome/themes/copland/icons/floating.png differ diff --git a/awesome/themes/copland/icons/fullscreen.png b/awesome/themes/copland/icons/fullscreen.png new file mode 100644 index 0000000..feb44d1 Binary files /dev/null and b/awesome/themes/copland/icons/fullscreen.png differ diff --git a/awesome/themes/copland/icons/magnifier.png b/awesome/themes/copland/icons/magnifier.png new file mode 100644 index 0000000..49616bc Binary files /dev/null and b/awesome/themes/copland/icons/magnifier.png differ diff --git a/awesome/themes/copland/icons/max.png b/awesome/themes/copland/icons/max.png new file mode 100644 index 0000000..3f4bdec Binary files /dev/null and b/awesome/themes/copland/icons/max.png differ diff --git a/awesome/themes/copland/icons/pause.png b/awesome/themes/copland/icons/pause.png new file mode 100644 index 0000000..381e532 Binary files /dev/null and b/awesome/themes/copland/icons/pause.png differ diff --git a/awesome/themes/copland/icons/play.png b/awesome/themes/copland/icons/play.png new file mode 100644 index 0000000..897f027 Binary files /dev/null and b/awesome/themes/copland/icons/play.png differ diff --git a/awesome/themes/copland/icons/spiral.png b/awesome/themes/copland/icons/spiral.png new file mode 100644 index 0000000..10c9f99 Binary files /dev/null and b/awesome/themes/copland/icons/spiral.png differ diff --git a/awesome/themes/copland/icons/square_sel.png b/awesome/themes/copland/icons/square_sel.png new file mode 100644 index 0000000..d89011a Binary files /dev/null and b/awesome/themes/copland/icons/square_sel.png differ diff --git a/awesome/themes/copland/icons/square_unsel.png b/awesome/themes/copland/icons/square_unsel.png new file mode 100644 index 0000000..ef7469c Binary files /dev/null and b/awesome/themes/copland/icons/square_unsel.png differ diff --git a/awesome/themes/copland/icons/stop.png b/awesome/themes/copland/icons/stop.png new file mode 100644 index 0000000..b01b75e Binary files /dev/null and b/awesome/themes/copland/icons/stop.png differ diff --git a/awesome/themes/copland/icons/submenu.png b/awesome/themes/copland/icons/submenu.png new file mode 100644 index 0000000..10ed739 Binary files /dev/null and b/awesome/themes/copland/icons/submenu.png differ diff --git a/awesome/themes/copland/icons/termfair.png b/awesome/themes/copland/icons/termfair.png new file mode 100644 index 0000000..4f437b3 Binary files /dev/null and b/awesome/themes/copland/icons/termfair.png differ diff --git a/awesome/themes/copland/icons/tile.png b/awesome/themes/copland/icons/tile.png new file mode 100644 index 0000000..ec8e4d3 Binary files /dev/null and b/awesome/themes/copland/icons/tile.png differ diff --git a/awesome/themes/copland/icons/tilebottom.png b/awesome/themes/copland/icons/tilebottom.png new file mode 100644 index 0000000..6eda28d Binary files /dev/null and b/awesome/themes/copland/icons/tilebottom.png differ diff --git a/awesome/themes/copland/icons/tileleft.png b/awesome/themes/copland/icons/tileleft.png new file mode 100644 index 0000000..c87a32f Binary files /dev/null and b/awesome/themes/copland/icons/tileleft.png differ diff --git a/awesome/themes/copland/icons/tiletop.png b/awesome/themes/copland/icons/tiletop.png new file mode 100644 index 0000000..a09ed3b Binary files /dev/null and b/awesome/themes/copland/icons/tiletop.png differ diff --git a/awesome/themes/copland/icons/titlebar/close_focus.png b/awesome/themes/copland/icons/titlebar/close_focus.png new file mode 100644 index 0000000..e56b280 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/close_focus.png differ diff --git a/awesome/themes/copland/icons/titlebar/close_normal.png b/awesome/themes/copland/icons/titlebar/close_normal.png new file mode 100644 index 0000000..5a99f56 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/close_normal.png differ diff --git a/awesome/themes/copland/icons/titlebar/floating_focus_active.png b/awesome/themes/copland/icons/titlebar/floating_focus_active.png new file mode 100644 index 0000000..b0bdf86 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/floating_focus_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/floating_focus_inactive.png b/awesome/themes/copland/icons/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..47f19f6 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/floating_focus_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/floating_normal_active.png b/awesome/themes/copland/icons/titlebar/floating_normal_active.png new file mode 100644 index 0000000..df17970 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/floating_normal_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/floating_normal_inactive.png b/awesome/themes/copland/icons/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..98f7f1d Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/floating_normal_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/maximized_focus_active.png b/awesome/themes/copland/icons/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..f94d40c Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/maximized_focus_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/maximized_focus_inactive.png b/awesome/themes/copland/icons/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..bce1d00 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/maximized_normal_active.png b/awesome/themes/copland/icons/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..9e87af5 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/maximized_normal_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/maximized_normal_inactive.png b/awesome/themes/copland/icons/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..2e56d32 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/ontop_focus_active.png b/awesome/themes/copland/icons/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..c5821a6 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/ontop_focus_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/ontop_focus_inactive.png b/awesome/themes/copland/icons/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..2f3a2be Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/ontop_normal_active.png b/awesome/themes/copland/icons/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..9a26d34 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/ontop_normal_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/ontop_normal_inactive.png b/awesome/themes/copland/icons/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..a9a3206 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/sticky_focus_active.png b/awesome/themes/copland/icons/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..2cf0bd0 Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/sticky_focus_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/sticky_focus_inactive.png b/awesome/themes/copland/icons/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..5493d8e Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/themes/copland/icons/titlebar/sticky_normal_active.png b/awesome/themes/copland/icons/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..a06138d Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/sticky_normal_active.png differ diff --git a/awesome/themes/copland/icons/titlebar/sticky_normal_inactive.png b/awesome/themes/copland/icons/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..7e6c99b Binary files /dev/null and b/awesome/themes/copland/icons/titlebar/sticky_normal_inactive.png differ diff --git a/awesome/themes/copland/icons/vol.png b/awesome/themes/copland/icons/vol.png new file mode 100644 index 0000000..281dddb Binary files /dev/null and b/awesome/themes/copland/icons/vol.png differ diff --git a/awesome/themes/copland/icons/vol_low.png b/awesome/themes/copland/icons/vol_low.png new file mode 100644 index 0000000..63c2293 Binary files /dev/null and b/awesome/themes/copland/icons/vol_low.png differ diff --git a/awesome/themes/copland/icons/vol_mute.png b/awesome/themes/copland/icons/vol_mute.png new file mode 100644 index 0000000..68d0de7 Binary files /dev/null and b/awesome/themes/copland/icons/vol_mute.png differ diff --git a/awesome/themes/copland/icons/vol_no.png b/awesome/themes/copland/icons/vol_no.png new file mode 100644 index 0000000..e801344 Binary files /dev/null and b/awesome/themes/copland/icons/vol_no.png differ diff --git a/awesome/themes/copland/theme.lua b/awesome/themes/copland/theme.lua new file mode 100644 index 0000000..e6b9c0c --- /dev/null +++ b/awesome/themes/copland/theme.lua @@ -0,0 +1,370 @@ + +--[[ + + Copland Awesome WM theme 2.0 + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv, setlocale = os.setlocale } +local awesome, client = awesome, client + +local theme = {} +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/copland" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "Tamzen 10.5" +theme.fg_normal = "#BBBBBB" +theme.fg_focus = "#78A4FF" +theme.bg_normal = "#111111" +theme.bg_focus = "#111111" +theme.fg_urgent = "#000000" +theme.bg_urgent = "#FFFFFF" +theme.border_width = 1 +theme.border_normal = "#141414" +theme.border_focus = "#93B6FF" +theme.taglist_fg_focus = "#FFFFFF" +theme.taglist_bg_focus = "#111111" +theme.taglist_bg_normal = "#111111" +theme.titlebar_bg_normal = "#191919" +theme.titlebar_bg_focus = "#262626" +theme.menu_height = 16 +theme.menu_width = 130 +theme.tasklist_disable_icon = true +theme.awesome_icon = theme.dir .."/icons/awesome.png" +theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" +theme.taglist_squares_sel = theme.dir .. "/icons/square_unsel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.vol = theme.dir .. "/icons/vol.png" +theme.vol_low = theme.dir .. "/icons/vol_low.png" +theme.vol_no = theme.dir .. "/icons/vol_no.png" +theme.vol_mute = theme.dir .. "/icons/vol_mute.png" +theme.disk = theme.dir .. "/icons/disk.png" +theme.ac = theme.dir .. "/icons/ac.png" +theme.bat = theme.dir .. "/icons/bat.png" +theme.bat_low = theme.dir .. "/icons/bat_low.png" +theme.bat_no = theme.dir .. "/icons/bat_no.png" +theme.play = theme.dir .. "/icons/play.png" +theme.pause = theme.dir .. "/icons/pause.png" +theme.stop = theme.dir .. "/icons/stop.png" +theme.layout_tile = theme.dir .. "/icons/tile.png" +theme.layout_tileleft = theme.dir .. "/icons/tileleft.png" +theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png" +theme.layout_tiletop = theme.dir .. "/icons/tiletop.png" +theme.layout_fairv = theme.dir .. "/icons/fairv.png" +theme.layout_fairh = theme.dir .. "/icons/fairh.png" +theme.layout_spiral = theme.dir .. "/icons/spiral.png" +theme.layout_dwindle = theme.dir .. "/icons/dwindle.png" +theme.layout_max = theme.dir .. "/icons/max.png" +theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png" +theme.layout_magnifier = theme.dir .. "/icons/magnifier.png" +theme.layout_floating = theme.dir .. "/icons/floating.png" +theme.useless_gap = 0 +theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png" +theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png" +theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png" +theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png" +theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png" +theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png" +theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png" +theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png" +theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png" +theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png" + +-- lain related +theme.layout_centerfair = theme.dir .. "/icons/centerfair.png" +theme.layout_termfair = theme.dir .. "/icons/termfair.png" +theme.layout_centerwork = theme.dir .. "/icons/centerwork.png" + +local markup = lain.util.markup +local blue = theme.fg_focus +local red = "#EB8F8F" +local green = "#8FEB8F" + +-- Textclock +--os.setlocale(os.getenv("LANG")) -- to localize the clock +local mytextclock = wibox.widget.textclock(" %H:%M ") +mytextclock.font = theme.font + +-- Calendar +lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + font = "Tamzen 11", + fg = theme.fg_normal, + bg = theme.bg_normal + } +}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + mail = "" + count = "" + + if mailcount > 0 then + mail = " Mail " + count = mailcount .. " " + end + + widget:set_markup(markup(blue, mail) .. count) + end +}) +--]] + +-- MPD +local mpdicon = wibox.widget.imagebox() +theme.mpd = lain.widget.mpd({ + settings = function() + if mpd_now.state == "play" then + title = mpd_now.title + artist = " " .. mpd_now.artist .. markup("#333333", " | ") + mpdicon:set_image(theme.play) + elseif mpd_now.state == "pause" then + title = "mpd " + artist = "paused" .. markup("#333333", " | ") + mpdicon:set_image(theme.pause) + else + title = "" + artist = "" + mpdicon._private.image = nil + mpdicon:emit_signal("widget::redraw_needed") + mpdicon:emit_signal("widget::layout_changed") + end + + widget:set_markup(markup.font(theme.font, markup(blue, title) .. artist)) + end +}) + +-- Battery +local baticon = wibox.widget.imagebox(theme.bat) +local batbar = wibox.widget { + forced_height = 1, + forced_width = 59, + color = theme.fg_normal, + background_color = theme.bg_normal, + margins = 1, + paddings = 1, + ticks = true, + ticks_size = 6, + widget = wibox.widget.progressbar, +} +local batupd = lain.widget.bat({ + settings = function() + if bat_now.status == "N/A" or type(bat_now.perc) ~= "number" then return end + + if bat_now.status == "Charging" then + baticon:set_image(theme.ac) + if bat_now.perc >= 98 then + batbar:set_color(green) + elseif bat_now.perc > 50 then + batbar:set_color(theme.fg_normal) + elseif bat_now.perc > 15 then + batbar:set_color(theme.fg_normal) + else + batbar:set_color(red) + end + else + if bat_now.perc >= 98 then + batbar:set_color(green) + elseif bat_now.perc > 50 then + batbar:set_color(theme.fg_normal) + baticon:set_image(theme.bat) + elseif bat_now.perc > 15 then + batbar:set_color(theme.fg_normal) + baticon:set_image(theme.bat_low) + else + batbar:set_color(red) + baticon:set_image(theme.bat_no) + end + end + batbar:set_value(bat_now.perc / 100) + end +}) +local batbg = wibox.container.background(batbar, "#474747", gears.shape.rectangle) +local batwidget = wibox.container.margin(batbg, 2, 7, 4, 4) + +-- /home fs +local fsicon = wibox.widget.imagebox(theme.disk) +local fsbar = wibox.widget { + forced_height = 1, + forced_width = 59, + color = theme.fg_normal, + background_color = theme.bg_normal, + margins = 1, + paddings = 1, + ticks = true, + ticks_size = 6, + widget = wibox.widget.progressbar, +} +theme.fs = lain.widget.fs({ + partition = "/home", + options = "--exclude-type=tmpfs", + notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "Tamzen 10.5" }, + settings = function() + if tonumber(fs_now.used) < 90 then + fsbar:set_color(theme.fg_normal) + else + fsbar:set_color("#EB8F8F") + end + fsbar:set_value(fs_now.used / 100) + end +}) +local fsbg = wibox.container.background(fsbar, "#474747", gears.shape.rectangle) +local fswidget = wibox.container.margin(fsbg, 2, 7, 4, 4) + +-- ALSA volume bar +local volicon = wibox.widget.imagebox(theme.vol) +theme.volume = lain.widget.alsabar({ + width = 59, border_width = 0, ticks = true, ticks_size = 6, + notification_preset = { font = theme.font }, + --togglechannel = "IEC958,3", + settings = function() + if volume_now.status == "off" then + volicon:set_image(theme.vol_mute) + elseif volume_now.level == 0 then + volicon:set_image(theme.vol_no) + elseif volume_now.level <= 50 then + volicon:set_image(theme.vol_low) + else + volicon:set_image(theme.vol) + end + end, + colors = { + background = theme.bg_normal, + mute = red, + unmute = theme.fg_normal + } +}) +theme.volume.tooltip.wibox.fg = theme.fg_focus +theme.volume.bar:buttons(awful.util.table.join ( + awful.button({}, 1, function() + awful.spawn.with_shell(string.format("%s -e alsamixer", awful.util.terminal)) + end), + awful.button({}, 2, function() + awful.spawn(string.format("%s set %s 100%%", theme.volume.cmd, theme.volume.channel)) + theme.volume.update() + end), + awful.button({}, 3, function() + awful.spawn(string.format("%s set %s toggle", theme.volume.cmd, theme.volume.togglechannel or theme.volume.channel)) + theme.volume.update() + end), + awful.button({}, 4, function() + awful.spawn(string.format("%s set %s 1%%+", theme.volume.cmd, theme.volume.channel)) + theme.volume.update() + end), + awful.button({}, 5, function() + awful.spawn(string.format("%s set %s 1%%-", theme.volume.cmd, theme.volume.channel)) + theme.volume.update() + end) +)) +local volumebg = wibox.container.background(theme.volume.bar, "#474747", gears.shape.rectangle) +local volumewidget = wibox.container.margin(volumebg, 2, 7, 4, 4) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) +}) + +-- Separators +local first = wibox.widget.textbox(markup.font("Tamzen 3", " ")) +local spr = wibox.widget.textbox(' ') +local small_spr = wibox.widget.textbox(markup.font("Tamzen 4", " ")) +local bar_spr = wibox.widget.textbox(markup.font("Tamzen 3", " ") .. markup.fontfg(theme.font, "#333333", "|") .. markup.font("Tamzen 5", " ")) + +-- Eminent-like task filtering +local orig_filter = awful.widget.taglist.filter.all + +-- Taglist label functions +awful.widget.taglist.filter.all = function (t, args) + if t.selected or #t:clients() > 0 then + return orig_filter(t, args) + end +end + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + small_spr, + s.mylayoutbox, + first, + bar_spr, + s.mytaglist, + first, + s.mypromptbox, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + small_spr, + --mail.widget, + mpdicon, + theme.mpd.widget, + baticon, + batwidget, + bar_spr, + fsicon, + fswidget, + bar_spr, + volicon, + volumewidget, + bar_spr, + mytextclock, + }, + } +end + +return theme diff --git a/awesome/themes/copland/wall.png b/awesome/themes/copland/wall.png new file mode 100644 index 0000000..fe13898 Binary files /dev/null and b/awesome/themes/copland/wall.png differ diff --git a/awesome/themes/dremora/icons/awesome.png b/awesome/themes/dremora/icons/awesome.png new file mode 100644 index 0000000..6ada627 Binary files /dev/null and b/awesome/themes/dremora/icons/awesome.png differ diff --git a/awesome/themes/dremora/icons/dwindle.png b/awesome/themes/dremora/icons/dwindle.png new file mode 100644 index 0000000..2547a17 Binary files /dev/null and b/awesome/themes/dremora/icons/dwindle.png differ diff --git a/awesome/themes/dremora/icons/fairh.png b/awesome/themes/dremora/icons/fairh.png new file mode 100644 index 0000000..578417c Binary files /dev/null and b/awesome/themes/dremora/icons/fairh.png differ diff --git a/awesome/themes/dremora/icons/fairv.png b/awesome/themes/dremora/icons/fairv.png new file mode 100644 index 0000000..e308555 Binary files /dev/null and b/awesome/themes/dremora/icons/fairv.png differ diff --git a/awesome/themes/dremora/icons/floating.png b/awesome/themes/dremora/icons/floating.png new file mode 100755 index 0000000..55be201 Binary files /dev/null and b/awesome/themes/dremora/icons/floating.png differ diff --git a/awesome/themes/dremora/icons/magnifier.png b/awesome/themes/dremora/icons/magnifier.png new file mode 100644 index 0000000..1678b83 Binary files /dev/null and b/awesome/themes/dremora/icons/magnifier.png differ diff --git a/awesome/themes/dremora/icons/max.png b/awesome/themes/dremora/icons/max.png new file mode 100644 index 0000000..bda3c6a Binary files /dev/null and b/awesome/themes/dremora/icons/max.png differ diff --git a/awesome/themes/dremora/icons/spiral.png b/awesome/themes/dremora/icons/spiral.png new file mode 100644 index 0000000..60c2583 Binary files /dev/null and b/awesome/themes/dremora/icons/spiral.png differ diff --git a/awesome/themes/dremora/icons/square_sel.png b/awesome/themes/dremora/icons/square_sel.png new file mode 100644 index 0000000..85cc605 Binary files /dev/null and b/awesome/themes/dremora/icons/square_sel.png differ diff --git a/awesome/themes/dremora/icons/square_unsel.png b/awesome/themes/dremora/icons/square_unsel.png new file mode 100644 index 0000000..1c58e4b Binary files /dev/null and b/awesome/themes/dremora/icons/square_unsel.png differ diff --git a/awesome/themes/dremora/icons/submenu.png b/awesome/themes/dremora/icons/submenu.png new file mode 100644 index 0000000..988ef9e Binary files /dev/null and b/awesome/themes/dremora/icons/submenu.png differ diff --git a/awesome/themes/dremora/icons/tile.png b/awesome/themes/dremora/icons/tile.png new file mode 100755 index 0000000..02047e8 Binary files /dev/null and b/awesome/themes/dremora/icons/tile.png differ diff --git a/awesome/themes/dremora/icons/tilebottom.png b/awesome/themes/dremora/icons/tilebottom.png new file mode 100755 index 0000000..5f5ab79 Binary files /dev/null and b/awesome/themes/dremora/icons/tilebottom.png differ diff --git a/awesome/themes/dremora/icons/tileleft.png b/awesome/themes/dremora/icons/tileleft.png new file mode 100755 index 0000000..7ed1c5e Binary files /dev/null and b/awesome/themes/dremora/icons/tileleft.png differ diff --git a/awesome/themes/dremora/icons/tiletop.png b/awesome/themes/dremora/icons/tiletop.png new file mode 100755 index 0000000..dc83550 Binary files /dev/null and b/awesome/themes/dremora/icons/tiletop.png differ diff --git a/awesome/themes/dremora/icons/titlebar/close_focus.png b/awesome/themes/dremora/icons/titlebar/close_focus.png new file mode 100644 index 0000000..6a18125 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/close_focus.png differ diff --git a/awesome/themes/dremora/icons/titlebar/close_normal.png b/awesome/themes/dremora/icons/titlebar/close_normal.png new file mode 100644 index 0000000..1c8809f Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/close_normal.png differ diff --git a/awesome/themes/dremora/icons/titlebar/floating_focus_active.png b/awesome/themes/dremora/icons/titlebar/floating_focus_active.png new file mode 100644 index 0000000..b22ef22 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/floating_focus_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/floating_focus_inactive.png b/awesome/themes/dremora/icons/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..47f19f6 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/floating_focus_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/floating_normal_active.png b/awesome/themes/dremora/icons/titlebar/floating_normal_active.png new file mode 100644 index 0000000..b788552 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/floating_normal_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/floating_normal_inactive.png b/awesome/themes/dremora/icons/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..4adc5e9 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/floating_normal_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/maximized_focus_active.png b/awesome/themes/dremora/icons/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..70af3d5 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/maximized_focus_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/maximized_focus_inactive.png b/awesome/themes/dremora/icons/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..bce1d00 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/maximized_normal_active.png b/awesome/themes/dremora/icons/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..70e2ddc Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/maximized_normal_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/maximized_normal_inactive.png b/awesome/themes/dremora/icons/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..2e56d32 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/ontop_focus_active.png b/awesome/themes/dremora/icons/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..ade12fe Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/ontop_focus_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/ontop_focus_inactive.png b/awesome/themes/dremora/icons/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..2f3a2be Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/ontop_normal_active.png b/awesome/themes/dremora/icons/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..02facc4 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/ontop_normal_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/ontop_normal_inactive.png b/awesome/themes/dremora/icons/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..a9a3206 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/sticky_focus_active.png b/awesome/themes/dremora/icons/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..f3c533c Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/sticky_focus_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/sticky_focus_inactive.png b/awesome/themes/dremora/icons/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..5493d8e Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/themes/dremora/icons/titlebar/sticky_normal_active.png b/awesome/themes/dremora/icons/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..15f0bc4 Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/sticky_normal_active.png differ diff --git a/awesome/themes/dremora/icons/titlebar/sticky_normal_inactive.png b/awesome/themes/dremora/icons/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..7e6c99b Binary files /dev/null and b/awesome/themes/dremora/icons/titlebar/sticky_normal_inactive.png differ diff --git a/awesome/themes/dremora/theme.lua b/awesome/themes/dremora/theme.lua new file mode 100644 index 0000000..f412df6 --- /dev/null +++ b/awesome/themes/dremora/theme.lua @@ -0,0 +1,250 @@ + +--[[ + + Dremora Awesome WM theme 2.0 + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv } + +local theme = {} +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/dremora" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "Misc Tamsyn 10.5" +theme.taglist_font = "Icons 10" +theme.fg_normal = "#747474" +theme.fg_focus = "#DDDCFF" +theme.bg_normal = "#121212" +theme.bg_focus = "#121212" +theme.fg_urgent = "#CC9393" +theme.bg_urgent = "#2A1F1E" +theme.border_width = "0" +theme.border_normal = "#121212" +theme.border_focus = "#292929" +theme.titlebar_bg_focus = "#292929" +theme.taglist_fg_focus = "#dddcff" +theme.taglist_bg_focus = "#121212" +theme.menu_height = 16 +theme.menu_width = 130 +theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" +theme.awesome_icon = theme.dir .."/icons/awesome.png" +theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.layout_tile = theme.dir .. "/icons/tile.png" +theme.layout_tileleft = theme.dir .. "/icons/tileleft.png" +theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png" +theme.layout_tiletop = theme.dir .. "/icons/tiletop.png" +theme.layout_fairv = theme.dir .. "/icons/fairv.png" +theme.layout_fairh = theme.dir .. "/icons/fairh.png" +theme.layout_spiral = theme.dir .. "/icons/spiral.png" +theme.layout_dwindle = theme.dir .. "/icons/dwindle.png" +theme.layout_max = theme.dir .. "/icons/max.png" +theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png" +theme.layout_magnifier = theme.dir .. "/icons/magnifier.png" +theme.layout_floating = theme.dir .. "/icons/floating.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 10 +theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png" +theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png" +theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png" +theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png" +theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png" +theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png" +theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png" +theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png" +theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png" +theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png" + +awful.util.tagnames = { "ƀ", "Ƅ", "Ɗ", "ƈ", "ƙ" } + +local markup = lain.util.markup +local separators = lain.util.separators +local white = theme.fg_focus +local gray = "#858585" + +-- Textclock +local mytextclock = wibox.widget.textclock(markup(gray, " %a") +.. markup(white, " %d ") .. markup(gray, "%b ") .. markup(white, "%H:%M ")) +mytextclock.font = theme.font + +-- Calendar +lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + font = "Misc Tamsyn 11", + fg = white, + bg = theme.bg_normal +}}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + notification_preset = { fg = white } + settings = function() + mail = "" + count = "" + + if mailcount > 0 then + mail = "Mail " + count = mailcount .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, mail) .. markup(white, count))) + end +}) +--]] + +-- MPD +theme.mpd = lain.widget.mpd({ + settings = function() + mpd_notification_preset.fg = white + artist = mpd_now.artist .. " " + title = mpd_now.title .. " " + + if mpd_now.state == "pause" then + artist = "mpd " + title = "paused " + elseif mpd_now.state == "stop" then + artist = "" + title = "" + end + + widget:set_markup(markup.font(theme.font, markup(gray, artist) .. markup(white, title))) + end +}) + +-- /home fs +theme.fs = lain.widget.fs({ + partition = "/home", + options = "--exclude-type=tmpfs", + notification_preset = { fg = white, bg = theme.bg_normal, font = "Misc Tamsyn 10.5" }, + settings = function() + fs_header = "" + fs_p = "" + + if tonumber(fs_now.used) >= 90 then + fs_header = " Hdd " + fs_p = fs_now.used + end + + widget:set_markup(markup.font(theme.font, markup(gray, fs_header) .. markup(white, fs_p))) + end +}) + +-- Battery +local bat = lain.widget.bat({ + settings = function() + bat_header = " Bat " + bat_p = bat_now.perc .. " " + widget:set_markup(markup.font(theme.font, markup(gray, bat_header) .. markup(white, bat_p))) + end +}) + +-- ALSA volume +theme.volume = lain.widget.alsa({ + --togglechannel = "IEC958,3", + settings = function() + header = " Vol " + vlevel = volume_now.level + + if volume_now.status == "off" then + vlevel = vlevel .. "M " + else + vlevel = vlevel .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, header) .. markup(white, vlevel))) + end +}) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) + notification_preset = { fg = white } +}) + +-- Separators +local first = wibox.widget.textbox(' ') +local arrl_pre = separators.arrow_right("alpha", "#1A1A1A") +local arrl_post = separators.arrow_right("#1A1A1A", "alpha") + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + first, + s.mytaglist, + arrl_pre, + s.mylayoutbox, + arrl_post, + s.mypromptbox, + first, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + first, + theme.mpd.widget, + --mail.widget, + theme.fs.widget, + bat.widget, + theme.volume.widget, + mytextclock, + }, + } +end + +return theme diff --git a/awesome/themes/dremora/wall.png b/awesome/themes/dremora/wall.png new file mode 100644 index 0000000..5694c4b Binary files /dev/null and b/awesome/themes/dremora/wall.png differ diff --git a/awesome/themes/holo/icons/awesome_icon.png b/awesome/themes/holo/icons/awesome_icon.png new file mode 100644 index 0000000..596cc4a Binary files /dev/null and b/awesome/themes/holo/icons/awesome_icon.png differ diff --git a/awesome/themes/holo/icons/awesome_icon_white.png b/awesome/themes/holo/icons/awesome_icon_white.png new file mode 100644 index 0000000..476a86a Binary files /dev/null and b/awesome/themes/holo/icons/awesome_icon_white.png differ diff --git a/awesome/themes/holo/icons/bar.png b/awesome/themes/holo/icons/bar.png new file mode 100644 index 0000000..767885c Binary files /dev/null and b/awesome/themes/holo/icons/bar.png differ diff --git a/awesome/themes/holo/icons/bottom_bar.png b/awesome/themes/holo/icons/bottom_bar.png new file mode 100644 index 0000000..fa6a7ae Binary files /dev/null and b/awesome/themes/holo/icons/bottom_bar.png differ diff --git a/awesome/themes/holo/icons/cal.png b/awesome/themes/holo/icons/cal.png new file mode 100644 index 0000000..909d5a4 Binary files /dev/null and b/awesome/themes/holo/icons/cal.png differ diff --git a/awesome/themes/holo/icons/clock.png b/awesome/themes/holo/icons/clock.png new file mode 100644 index 0000000..ea33cc1 Binary files /dev/null and b/awesome/themes/holo/icons/clock.png differ diff --git a/awesome/themes/holo/icons/cpu.png b/awesome/themes/holo/icons/cpu.png new file mode 100644 index 0000000..51e86dc Binary files /dev/null and b/awesome/themes/holo/icons/cpu.png differ diff --git a/awesome/themes/holo/icons/dwindle.png b/awesome/themes/holo/icons/dwindle.png new file mode 100644 index 0000000..bc86db8 Binary files /dev/null and b/awesome/themes/holo/icons/dwindle.png differ diff --git a/awesome/themes/holo/icons/fairh.png b/awesome/themes/holo/icons/fairh.png new file mode 100644 index 0000000..43ed1d5 Binary files /dev/null and b/awesome/themes/holo/icons/fairh.png differ diff --git a/awesome/themes/holo/icons/fairv.png b/awesome/themes/holo/icons/fairv.png new file mode 100644 index 0000000..d58319b Binary files /dev/null and b/awesome/themes/holo/icons/fairv.png differ diff --git a/awesome/themes/holo/icons/floating.png b/awesome/themes/holo/icons/floating.png new file mode 100644 index 0000000..626136f Binary files /dev/null and b/awesome/themes/holo/icons/floating.png differ diff --git a/awesome/themes/holo/icons/magnifier.png b/awesome/themes/holo/icons/magnifier.png new file mode 100644 index 0000000..616a366 Binary files /dev/null and b/awesome/themes/holo/icons/magnifier.png differ diff --git a/awesome/themes/holo/icons/max.png b/awesome/themes/holo/icons/max.png new file mode 100644 index 0000000..f809ea1 Binary files /dev/null and b/awesome/themes/holo/icons/max.png differ diff --git a/awesome/themes/holo/icons/mpd.png b/awesome/themes/holo/icons/mpd.png new file mode 100644 index 0000000..c61030b Binary files /dev/null and b/awesome/themes/holo/icons/mpd.png differ diff --git a/awesome/themes/holo/icons/net_down.png b/awesome/themes/holo/icons/net_down.png new file mode 100644 index 0000000..168201c Binary files /dev/null and b/awesome/themes/holo/icons/net_down.png differ diff --git a/awesome/themes/holo/icons/net_up.png b/awesome/themes/holo/icons/net_up.png new file mode 100644 index 0000000..45b29a6 Binary files /dev/null and b/awesome/themes/holo/icons/net_up.png differ diff --git a/awesome/themes/holo/icons/next.png b/awesome/themes/holo/icons/next.png new file mode 100644 index 0000000..d3caba7 Binary files /dev/null and b/awesome/themes/holo/icons/next.png differ diff --git a/awesome/themes/holo/icons/pause.png b/awesome/themes/holo/icons/pause.png new file mode 100644 index 0000000..2a443dd Binary files /dev/null and b/awesome/themes/holo/icons/pause.png differ diff --git a/awesome/themes/holo/icons/play.png b/awesome/themes/holo/icons/play.png new file mode 100644 index 0000000..9567b8a Binary files /dev/null and b/awesome/themes/holo/icons/play.png differ diff --git a/awesome/themes/holo/icons/prev.png b/awesome/themes/holo/icons/prev.png new file mode 100644 index 0000000..8b9b50e Binary files /dev/null and b/awesome/themes/holo/icons/prev.png differ diff --git a/awesome/themes/holo/icons/spiral.png b/awesome/themes/holo/icons/spiral.png new file mode 100644 index 0000000..e5afd83 Binary files /dev/null and b/awesome/themes/holo/icons/spiral.png differ diff --git a/awesome/themes/holo/icons/spr_bottom_right.png b/awesome/themes/holo/icons/spr_bottom_right.png new file mode 100644 index 0000000..b7038a0 Binary files /dev/null and b/awesome/themes/holo/icons/spr_bottom_right.png differ diff --git a/awesome/themes/holo/icons/spr_left.png b/awesome/themes/holo/icons/spr_left.png new file mode 100644 index 0000000..44822ed Binary files /dev/null and b/awesome/themes/holo/icons/spr_left.png differ diff --git a/awesome/themes/holo/icons/spr_right.png b/awesome/themes/holo/icons/spr_right.png new file mode 100644 index 0000000..f1953b3 Binary files /dev/null and b/awesome/themes/holo/icons/spr_right.png differ diff --git a/awesome/themes/holo/icons/spr_small.png b/awesome/themes/holo/icons/spr_small.png new file mode 100644 index 0000000..235410a Binary files /dev/null and b/awesome/themes/holo/icons/spr_small.png differ diff --git a/awesome/themes/holo/icons/spr_very_small.png b/awesome/themes/holo/icons/spr_very_small.png new file mode 100644 index 0000000..0db6077 Binary files /dev/null and b/awesome/themes/holo/icons/spr_very_small.png differ diff --git a/awesome/themes/holo/icons/square_sel.png b/awesome/themes/holo/icons/square_sel.png new file mode 100644 index 0000000..cd9bf0a Binary files /dev/null and b/awesome/themes/holo/icons/square_sel.png differ diff --git a/awesome/themes/holo/icons/square_unsel.png b/awesome/themes/holo/icons/square_unsel.png new file mode 100644 index 0000000..c77f1f8 Binary files /dev/null and b/awesome/themes/holo/icons/square_unsel.png differ diff --git a/awesome/themes/holo/icons/stop.png b/awesome/themes/holo/icons/stop.png new file mode 100644 index 0000000..63ed405 Binary files /dev/null and b/awesome/themes/holo/icons/stop.png differ diff --git a/awesome/themes/holo/icons/tile.png b/awesome/themes/holo/icons/tile.png new file mode 100644 index 0000000..31884f6 Binary files /dev/null and b/awesome/themes/holo/icons/tile.png differ diff --git a/awesome/themes/holo/icons/tilebottom.png b/awesome/themes/holo/icons/tilebottom.png new file mode 100644 index 0000000..e289816 Binary files /dev/null and b/awesome/themes/holo/icons/tilebottom.png differ diff --git a/awesome/themes/holo/icons/tileleft.png b/awesome/themes/holo/icons/tileleft.png new file mode 100644 index 0000000..687d247 Binary files /dev/null and b/awesome/themes/holo/icons/tileleft.png differ diff --git a/awesome/themes/holo/icons/tiletop.png b/awesome/themes/holo/icons/tiletop.png new file mode 100644 index 0000000..17cd06b Binary files /dev/null and b/awesome/themes/holo/icons/tiletop.png differ diff --git a/awesome/themes/holo/theme.lua b/awesome/themes/holo/theme.lua new file mode 100644 index 0000000..7d5d2d6 --- /dev/null +++ b/awesome/themes/holo/theme.lua @@ -0,0 +1,389 @@ + +--[[ + + Holo Awesome WM theme 3.0 + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local string = string +local os = { getenv = os.getenv } + +local theme = {} +theme.default_dir = require("awful.util").get_themes_dir() .. "default" +theme.icon_dir = os.getenv("HOME") .. "/.config/awesome/themes/holo/icons" +theme.wallpaper = os.getenv("HOME") .. "/.config/awesome/themes/holo/wall.png" +theme.font = "Roboto Bold 10" +theme.taglist_font = "Roboto Condensed Regular 8" +theme.fg_normal = "#FFFFFF" +theme.fg_focus = "#0099CC" +theme.bg_focus = "#303030" +theme.bg_normal = "#242424" +theme.fg_urgent = "#CC9393" +theme.bg_urgent = "#006B8E" +theme.border_width = 3 +theme.border_normal = "#252525" +theme.border_focus = "#0099CC" +theme.taglist_fg_focus = "#FFFFFF" +theme.tasklist_bg_normal = "#222222" +theme.tasklist_fg_focus = "#4CB7DB" +theme.menu_height = 20 +theme.menu_width = 160 +theme.menu_icon_size = 32 +theme.awesome_icon = theme.icon_dir .. "/awesome_icon_white.png" +theme.awesome_icon_launcher = theme.icon_dir .. "/awesome_icon.png" +theme.taglist_squares_sel = theme.icon_dir .. "/square_sel.png" +theme.taglist_squares_unsel = theme.icon_dir .. "/square_unsel.png" +theme.spr_small = theme.icon_dir .. "/spr_small.png" +theme.spr_very_small = theme.icon_dir .. "/spr_very_small.png" +theme.spr_right = theme.icon_dir .. "/spr_right.png" +theme.spr_bottom_right = theme.icon_dir .. "/spr_bottom_right.png" +theme.spr_left = theme.icon_dir .. "/spr_left.png" +theme.bar = theme.icon_dir .. "/bar.png" +theme.bottom_bar = theme.icon_dir .. "/bottom_bar.png" +theme.mpdl = theme.icon_dir .. "/mpd.png" +theme.mpd_on = theme.icon_dir .. "/mpd_on.png" +theme.prev = theme.icon_dir .. "/prev.png" +theme.nex = theme.icon_dir .. "/next.png" +theme.stop = theme.icon_dir .. "/stop.png" +theme.pause = theme.icon_dir .. "/pause.png" +theme.play = theme.icon_dir .. "/play.png" +theme.clock = theme.icon_dir .. "/clock.png" +theme.calendar = theme.icon_dir .. "/cal.png" +theme.cpu = theme.icon_dir .. "/cpu.png" +theme.net_up = theme.icon_dir .. "/net_up.png" +theme.net_down = theme.icon_dir .. "/net_down.png" +theme.layout_tile = theme.icon_dir .. "/tile.png" +theme.layout_tileleft = theme.icon_dir .. "/tileleft.png" +theme.layout_tilebottom = theme.icon_dir .. "/tilebottom.png" +theme.layout_tiletop = theme.icon_dir .. "/tiletop.png" +theme.layout_fairv = theme.icon_dir .. "/fairv.png" +theme.layout_fairh = theme.icon_dir .. "/fairh.png" +theme.layout_spiral = theme.icon_dir .. "/spiral.png" +theme.layout_dwindle = theme.icon_dir .. "/dwindle.png" +theme.layout_max = theme.icon_dir .. "/max.png" +theme.layout_fullscreen = theme.icon_dir .. "/fullscreen.png" +theme.layout_magnifier = theme.icon_dir .. "/magnifier.png" +theme.layout_floating = theme.icon_dir .. "/floating.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 4 +theme.titlebar_close_button_normal = theme.default_dir.."/titlebar/close_normal.png" +theme.titlebar_close_button_focus = theme.default_dir.."/titlebar/close_focus.png" +theme.titlebar_minimize_button_normal = theme.default_dir.."/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = theme.default_dir.."/titlebar/minimize_focus.png" +theme.titlebar_ontop_button_normal_inactive = theme.default_dir.."/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = theme.default_dir.."/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = theme.default_dir.."/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = theme.default_dir.."/titlebar/ontop_focus_active.png" +theme.titlebar_sticky_button_normal_inactive = theme.default_dir.."/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = theme.default_dir.."/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = theme.default_dir.."/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = theme.default_dir.."/titlebar/sticky_focus_active.png" +theme.titlebar_floating_button_normal_inactive = theme.default_dir.."/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = theme.default_dir.."/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = theme.default_dir.."/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = theme.default_dir.."/titlebar/floating_focus_active.png" +theme.titlebar_maximized_button_normal_inactive = theme.default_dir.."/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = theme.default_dir.."/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = theme.default_dir.."/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = theme.default_dir.."/titlebar/maximized_focus_active.png" + +theme.musicplr = string.format("%s -e ncmpcpp", awful.util.terminal) + +local markup = lain.util.markup +local blue = "#80CCE6" +local space3 = markup.font("Roboto 3", " ") + +-- Clock +local mytextclock = wibox.widget.textclock(markup("#FFFFFF", space3 .. "%H:%M " .. markup.font("Roboto 4", " "))) +mytextclock.font = theme.font +local clock_icon = wibox.widget.imagebox(theme.clock) +local clockbg = wibox.container.background(mytextclock, theme.bg_focus, gears.shape.rectangle) +local clockwidget = wibox.container.margin(clockbg, 0, 3, 5, 5) + +-- Calendar +local mytextcalendar = wibox.widget.textclock(markup.fontfg(theme.font, "#FFFFFF", space3 .. "%d %b " .. markup.font("Roboto 5", " "))) +local calendar_icon = wibox.widget.imagebox(theme.calendar) +local calbg = wibox.container.background(mytextcalendar, theme.bg_focus, gears.shape.rectangle) +local calendarwidget = wibox.container.margin(calbg, 0, 0, 5, 5) +lain.widget.calendar({ + attach_to = { mytextclock, mytextcalendar }, + notification_preset = { + fg = "#FFFFFF", + bg = theme.bg_normal, + position = "bottom_right", + font = "Monospace 10" + } +}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + mail_notification_preset.fg = "#FFFFFF" + mail = "" + count = "" + + if mailcount > 0 then + mail = "Mail " + count = mailcount .. " " + end + + widget:set_markup(markup.font(theme.font, markup(blue, mail) .. markup("#FFFFFF", count))) + end +}) +--]] + +-- MPD +local mpd_icon = awful.widget.launcher({ image = theme.mpdl, command = theme.musicplr }) +local prev_icon = wibox.widget.imagebox(theme.prev) +local next_icon = wibox.widget.imagebox(theme.nex) +local stop_icon = wibox.widget.imagebox(theme.stop) +local pause_icon = wibox.widget.imagebox(theme.pause) +local play_pause_icon = wibox.widget.imagebox(theme.play) +theme.mpd = lain.widget.mpd({ + settings = function () + if mpd_now.state == "play" then + mpd_now.artist = mpd_now.artist:upper():gsub("&.-;", string.lower) + mpd_now.title = mpd_now.title:upper():gsub("&.-;", string.lower) + widget:set_markup(markup.font("Roboto 4", " ") + .. markup.font(theme.taglist_font, + " " .. mpd_now.artist + .. " - " .. + mpd_now.title .. " ") .. markup.font("Roboto 5", " ")) + play_pause_icon:set_image(theme.pause) + elseif mpd_now.state == "pause" then + widget:set_markup(markup.font("Roboto 4", " ") .. + markup.font(theme.taglist_font, " MPD PAUSED ") .. + markup.font("Roboto 5", " ")) + play_pause_icon:set_image(theme.play) + else + widget:set_markup("") + play_pause_icon:set_image(theme.play) + end + end +}) +local musicbg = wibox.container.background(theme.mpd.widget, theme.bg_focus, gears.shape.rectangle) +local musicwidget = wibox.container.margin(musicbg, 0, 0, 5, 5) + +musicwidget:buttons(awful.util.table.join(awful.button({ }, 1, +function () awful.spawn(theme.musicplr) end))) +prev_icon:buttons(awful.util.table.join(awful.button({}, 1, +function () + awful.spawn.with_shell("mpc prev") + theme.mpd.update() +end))) +next_icon:buttons(awful.util.table.join(awful.button({}, 1, +function () + awful.spawn.with_shell("mpc next") + theme.mpd.update() +end))) +stop_icon:buttons(awful.util.table.join(awful.button({}, 1, +function () + play_pause_icon:set_image(theme.play) + awful.spawn.with_shell("mpc stop") + theme.mpd.update() +end))) +play_pause_icon:buttons(awful.util.table.join(awful.button({}, 1, +function () + awful.spawn.with_shell("mpc toggle") + theme.mpd.update() +end))) + +-- Battery +--[[ +local bat = lain.widget.bat({ + settings = function() + bat_header = " Bat " + bat_p = bat_now.perc .. " " + if bat_now.ac_status == 1 then + bat_p = bat_p .. "Plugged " + end + widget:set_markup(markup.font(theme.font, markup(blue, bat_header) .. bat_p)) + end +}) +--]] +-- +-- fs +theme.fs = lain.widget.fs({ + options = "--exclude-type=tmpfs", + notification_preset = { bg = theme.bg_normal, font = "Monospace 9, " }, +}) + +-- ALSA volume bar +theme.volume = lain.widget.alsabar({ + notification_preset = { font = "Monospace 9"}, + --togglechannel = "IEC958,3", + width = 80, height = 10, border_width = 0, + colors = { + background = "#383838", + unmute = "#80CCE6", + mute = "#FF9F9F" + }, +}) +theme.volume.bar.paddings = 0 +theme.volume.bar.margins = 5 +local volumewidget = wibox.container.background(theme.volume.bar, theme.bg_focus, gears.shape.rectangle) +volumewidget = wibox.container.margin(volumewidget, 0, 0, 5, 5) + +-- CPU +local cpu_icon = wibox.widget.imagebox(theme.cpu) +local cpu = lain.widget.cpu({ + settings = function() + widget:set_markup(space3 .. markup.font(theme.font, "CPU " .. cpu_now.usage + .. "% ") .. markup.font("Roboto 5", " ")) + end +}) +local cpubg = wibox.container.background(cpu.widget, theme.bg_focus, gears.shape.rectangle) +local cpuwidget = wibox.container.margin(cpubg, 0, 0, 5, 5) + +-- Net +local netdown_icon = wibox.widget.imagebox(theme.net_down) +local netup_icon = wibox.widget.imagebox(theme.net_up) +local net = lain.widget.net({ + settings = function() + widget:set_markup(markup.font("Roboto 1", " ") .. markup.font(theme.font, net_now.received .. " - " + .. net_now.sent) .. markup.font("Roboto 2", " ")) + end +}) +local netbg = wibox.container.background(net.widget, theme.bg_focus, gears.shape.rectangle) +local networkwidget = wibox.container.margin(netbg, 0, 0, 5, 5) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) + notification_preset = { font = "Monospace 9", position = "bottom_right" }, +}) + +-- Launcher +local mylauncher = awful.widget.button({ image = theme.awesome_icon_launcher }) +mylauncher:connect_signal("button::press", function() awful.util.mymainmenu:toggle() end) + +-- Separators +local first = wibox.widget.textbox(' ') +local spr_small = wibox.widget.imagebox(theme.spr_small) +local spr_very_small = wibox.widget.imagebox(theme.spr_very_small) +local spr_right = wibox.widget.imagebox(theme.spr_right) +local spr_bottom_right = wibox.widget.imagebox(theme.spr_bottom_right) +local spr_left = wibox.widget.imagebox(theme.spr_left) +local bar = wibox.widget.imagebox(theme.bar) +local bottom_bar = wibox.widget.imagebox(theme.bottom_bar) + +local barcolor = gears.color({ + type = "linear", + from = { 32, 0 }, + to = { 32, 32 }, + stops = { {0, theme.bg_focus}, {0.25, "#505050"}, {1, theme.bg_focus} } +}) + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons, { bg_focus = barcolor }) + + mytaglistcont = wibox.container.background(s.mytaglist, theme.bg_focus, gears.shape.rectangle) + s.mytag = wibox.container.margin(mytaglistcont, 0, 0, 5, 5) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons, { bg_focus = theme.bg_focus, shape = gears.shape.rectangle, shape_border_width = 5, shape_border_color = theme.tasklist_bg_normal, align = "center" }) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 32 }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + first, + s.mytag, + spr_small, + s.mylayoutbox, + spr_small, + s.mypromptbox, + }, + nil, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + --mail.widget, + --bat.widget, + spr_right, + musicwidget, + bar, + prev_icon, + next_icon, + stop_icon, + play_pause_icon, + bar, + mpd_icon, + bar, + spr_very_small, + volumewidget, + spr_left, + }, + } + + -- Create the bottom wibox + s.mybottomwibox = awful.wibar({ position = "bottom", screen = s, border_width = 0, height = 32 }) + s.borderwibox = awful.wibar({ position = "bottom", screen = s, height = 1, bg = theme.fg_focus, x = 0, y = 33}) + + -- Add widgets to the bottom wibox + s.mybottomwibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + mylauncher, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + spr_bottom_right, + netdown_icon, + networkwidget, + netup_icon, + bottom_bar, + cpu_icon, + cpuwidget, + bottom_bar, + calendar_icon, + calendarwidget, + bottom_bar, + clock_icon, + clockwidget, + }, + } +end + +return theme diff --git a/awesome/themes/holo/wall.png b/awesome/themes/holo/wall.png new file mode 100644 index 0000000..0e8a128 Binary files /dev/null and b/awesome/themes/holo/wall.png differ diff --git a/awesome/themes/multicolor/icons/ac.png b/awesome/themes/multicolor/icons/ac.png new file mode 100644 index 0000000..41f49c5 Binary files /dev/null and b/awesome/themes/multicolor/icons/ac.png differ diff --git a/awesome/themes/multicolor/icons/bat.png b/awesome/themes/multicolor/icons/bat.png new file mode 100755 index 0000000..9610766 Binary files /dev/null and b/awesome/themes/multicolor/icons/bat.png differ diff --git a/awesome/themes/multicolor/icons/clock.png b/awesome/themes/multicolor/icons/clock.png new file mode 100644 index 0000000..22aef71 Binary files /dev/null and b/awesome/themes/multicolor/icons/clock.png differ diff --git a/awesome/themes/multicolor/icons/cpu.png b/awesome/themes/multicolor/icons/cpu.png new file mode 100644 index 0000000..1e3cba5 Binary files /dev/null and b/awesome/themes/multicolor/icons/cpu.png differ diff --git a/awesome/themes/multicolor/icons/dish.png b/awesome/themes/multicolor/icons/dish.png new file mode 100644 index 0000000..6ae19fd Binary files /dev/null and b/awesome/themes/multicolor/icons/dish.png differ diff --git a/awesome/themes/multicolor/icons/dwindle.png b/awesome/themes/multicolor/icons/dwindle.png new file mode 100755 index 0000000..81bf3e9 Binary files /dev/null and b/awesome/themes/multicolor/icons/dwindle.png differ diff --git a/awesome/themes/multicolor/icons/fairh.png b/awesome/themes/multicolor/icons/fairh.png new file mode 100755 index 0000000..89712e2 Binary files /dev/null and b/awesome/themes/multicolor/icons/fairh.png differ diff --git a/awesome/themes/multicolor/icons/fairv.png b/awesome/themes/multicolor/icons/fairv.png new file mode 100755 index 0000000..e1ac18b Binary files /dev/null and b/awesome/themes/multicolor/icons/fairv.png differ diff --git a/awesome/themes/multicolor/icons/floating.png b/awesome/themes/multicolor/icons/floating.png new file mode 100755 index 0000000..e0a3c39 Binary files /dev/null and b/awesome/themes/multicolor/icons/floating.png differ diff --git a/awesome/themes/multicolor/icons/fs.png b/awesome/themes/multicolor/icons/fs.png new file mode 100644 index 0000000..f869349 Binary files /dev/null and b/awesome/themes/multicolor/icons/fs.png differ diff --git a/awesome/themes/multicolor/icons/fullscreen.png b/awesome/themes/multicolor/icons/fullscreen.png new file mode 100755 index 0000000..84b7c27 Binary files /dev/null and b/awesome/themes/multicolor/icons/fullscreen.png differ diff --git a/awesome/themes/multicolor/icons/magnifier.png b/awesome/themes/multicolor/icons/magnifier.png new file mode 100755 index 0000000..1188d50 Binary files /dev/null and b/awesome/themes/multicolor/icons/magnifier.png differ diff --git a/awesome/themes/multicolor/icons/mail.png b/awesome/themes/multicolor/icons/mail.png new file mode 100755 index 0000000..e8cf11e Binary files /dev/null and b/awesome/themes/multicolor/icons/mail.png differ diff --git a/awesome/themes/multicolor/icons/max.png b/awesome/themes/multicolor/icons/max.png new file mode 100755 index 0000000..f0979c9 Binary files /dev/null and b/awesome/themes/multicolor/icons/max.png differ diff --git a/awesome/themes/multicolor/icons/mem.png b/awesome/themes/multicolor/icons/mem.png new file mode 100644 index 0000000..a71c2d5 Binary files /dev/null and b/awesome/themes/multicolor/icons/mem.png differ diff --git a/awesome/themes/multicolor/icons/net_down.png b/awesome/themes/multicolor/icons/net_down.png new file mode 100644 index 0000000..09433b1 Binary files /dev/null and b/awesome/themes/multicolor/icons/net_down.png differ diff --git a/awesome/themes/multicolor/icons/net_up.png b/awesome/themes/multicolor/icons/net_up.png new file mode 100644 index 0000000..395d014 Binary files /dev/null and b/awesome/themes/multicolor/icons/net_up.png differ diff --git a/awesome/themes/multicolor/icons/note.png b/awesome/themes/multicolor/icons/note.png new file mode 100644 index 0000000..78f85bf Binary files /dev/null and b/awesome/themes/multicolor/icons/note.png differ diff --git a/awesome/themes/multicolor/icons/note_on.png b/awesome/themes/multicolor/icons/note_on.png new file mode 100755 index 0000000..264d2c8 Binary files /dev/null and b/awesome/themes/multicolor/icons/note_on.png differ diff --git a/awesome/themes/multicolor/icons/spiral.png b/awesome/themes/multicolor/icons/spiral.png new file mode 100755 index 0000000..ec32ff3 Binary files /dev/null and b/awesome/themes/multicolor/icons/spiral.png differ diff --git a/awesome/themes/multicolor/icons/spkr.png b/awesome/themes/multicolor/icons/spkr.png new file mode 100644 index 0000000..80c20b0 Binary files /dev/null and b/awesome/themes/multicolor/icons/spkr.png differ diff --git a/awesome/themes/multicolor/icons/square_a.png b/awesome/themes/multicolor/icons/square_a.png new file mode 100755 index 0000000..1774d95 Binary files /dev/null and b/awesome/themes/multicolor/icons/square_a.png differ diff --git a/awesome/themes/multicolor/icons/square_b.png b/awesome/themes/multicolor/icons/square_b.png new file mode 100755 index 0000000..b47e9f3 Binary files /dev/null and b/awesome/themes/multicolor/icons/square_b.png differ diff --git a/awesome/themes/multicolor/icons/submenu.png b/awesome/themes/multicolor/icons/submenu.png new file mode 100644 index 0000000..7c81cab Binary files /dev/null and b/awesome/themes/multicolor/icons/submenu.png differ diff --git a/awesome/themes/multicolor/icons/temp.png b/awesome/themes/multicolor/icons/temp.png new file mode 100755 index 0000000..6c8f8bd Binary files /dev/null and b/awesome/themes/multicolor/icons/temp.png differ diff --git a/awesome/themes/multicolor/icons/tile.png b/awesome/themes/multicolor/icons/tile.png new file mode 100755 index 0000000..9bbf2fa Binary files /dev/null and b/awesome/themes/multicolor/icons/tile.png differ diff --git a/awesome/themes/multicolor/icons/tilebottom.png b/awesome/themes/multicolor/icons/tilebottom.png new file mode 100755 index 0000000..ea85f92 Binary files /dev/null and b/awesome/themes/multicolor/icons/tilebottom.png differ diff --git a/awesome/themes/multicolor/icons/tileleft.png b/awesome/themes/multicolor/icons/tileleft.png new file mode 100755 index 0000000..1b8e3c0 Binary files /dev/null and b/awesome/themes/multicolor/icons/tileleft.png differ diff --git a/awesome/themes/multicolor/icons/tiletop.png b/awesome/themes/multicolor/icons/tiletop.png new file mode 100755 index 0000000..a2d0f6a Binary files /dev/null and b/awesome/themes/multicolor/icons/tiletop.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/close_focus.png b/awesome/themes/multicolor/icons/titlebar/close_focus.png new file mode 100644 index 0000000..98c5056 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/close_focus.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/close_normal.png b/awesome/themes/multicolor/icons/titlebar/close_normal.png new file mode 100644 index 0000000..7702839 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/close_normal.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/floating_focus_active.png b/awesome/themes/multicolor/icons/titlebar/floating_focus_active.png new file mode 100644 index 0000000..37c1afe Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/floating_focus_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/floating_focus_inactive.png b/awesome/themes/multicolor/icons/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..07ee69d Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/floating_focus_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/floating_normal_active.png b/awesome/themes/multicolor/icons/titlebar/floating_normal_active.png new file mode 100644 index 0000000..b9c70ca Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/floating_normal_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/floating_normal_inactive.png b/awesome/themes/multicolor/icons/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..55cbc0c Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/floating_normal_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/maximized_focus_active.png b/awesome/themes/multicolor/icons/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..35c1801 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/maximized_focus_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/maximized_focus_inactive.png b/awesome/themes/multicolor/icons/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..043dae7 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/maximized_normal_active.png b/awesome/themes/multicolor/icons/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..0bbbf6a Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/maximized_normal_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/maximized_normal_inactive.png b/awesome/themes/multicolor/icons/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..5f1e98f Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/minimize_focus.png b/awesome/themes/multicolor/icons/titlebar/minimize_focus.png new file mode 100644 index 0000000..85d8196 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/minimize_focus.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/minimize_normal.png b/awesome/themes/multicolor/icons/titlebar/minimize_normal.png new file mode 100644 index 0000000..aa47447 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/minimize_normal.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/ontop_focus_active.png b/awesome/themes/multicolor/icons/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..968f89b Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/ontop_focus_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/ontop_focus_inactive.png b/awesome/themes/multicolor/icons/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..43d6274 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/ontop_normal_active.png b/awesome/themes/multicolor/icons/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..e09f32d Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/ontop_normal_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/ontop_normal_inactive.png b/awesome/themes/multicolor/icons/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..9917b9e Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/sticky_focus_active.png b/awesome/themes/multicolor/icons/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..147ce6a Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/sticky_focus_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/sticky_focus_inactive.png b/awesome/themes/multicolor/icons/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..a5cdf21 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/sticky_normal_active.png b/awesome/themes/multicolor/icons/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..0d003ef Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/sticky_normal_active.png differ diff --git a/awesome/themes/multicolor/icons/titlebar/sticky_normal_inactive.png b/awesome/themes/multicolor/icons/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..f1e8789 Binary files /dev/null and b/awesome/themes/multicolor/icons/titlebar/sticky_normal_inactive.png differ diff --git a/awesome/themes/multicolor/theme.lua b/awesome/themes/multicolor/theme.lua new file mode 100644 index 0000000..2642a5e --- /dev/null +++ b/awesome/themes/multicolor/theme.lua @@ -0,0 +1,344 @@ + +--[[ + + Multicolor Awesome WM theme 2.0 + github.com/copycat-killer + +--]] + + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv, setlocale = os.setlocale } + +local theme = {} +theme.confdir = os.getenv("HOME") .. "/.config/awesome/themes/multicolor" +theme.wallpaper = theme.confdir .. "/wall.png" +theme.font = "xos4 Terminus 8" +theme.menu_bg_normal = "#000000" +theme.menu_bg_focus = "#000000" +theme.bg_normal = "#000000" +theme.bg_focus = "#000000" +theme.bg_urgent = "#000000" +theme.fg_normal = "#aaaaaa" +theme.fg_focus = "#ff8c00" +theme.fg_urgent = "#af1d18" +theme.fg_minimize = "#ffffff" +theme.border_width = 1 +theme.border_normal = "#1c2022" +theme.border_focus = "#606060" +theme.border_marked = "#3ca4d8" +theme.menu_border_width = 0 +theme.menu_width = 130 +theme.menu_submenu_icon = theme.confdir .. "/icons/submenu.png" +theme.menu_fg_normal = "#aaaaaa" +theme.menu_fg_focus = "#ff8c00" +theme.menu_bg_normal = "#050505dd" +theme.menu_bg_focus = "#050505dd" +theme.widget_temp = theme.confdir .. "/icons/temp.png" +theme.widget_uptime = theme.confdir .. "/icons/ac.png" +theme.widget_cpu = theme.confdir .. "/icons/cpu.png" +theme.widget_weather = theme.confdir .. "/icons/dish.png" +theme.widget_fs = theme.confdir .. "/icons/fs.png" +theme.widget_mem = theme.confdir .. "/icons/mem.png" +theme.widget_fs = theme.confdir .. "/icons/fs.png" +theme.widget_note = theme.confdir .. "/icons/note.png" +theme.widget_note_on = theme.confdir .. "/icons/note_on.png" +theme.widget_netdown = theme.confdir .. "/icons/net_down.png" +theme.widget_netup = theme.confdir .. "/icons/net_up.png" +theme.widget_mail = theme.confdir .. "/icons/mail.png" +theme.widget_batt = theme.confdir .. "/icons/bat.png" +theme.widget_clock = theme.confdir .. "/icons/clock.png" +theme.widget_vol = theme.confdir .. "/icons/spkr.png" +theme.taglist_squares_sel = theme.confdir .. "/icons/square_a.png" +theme.taglist_squares_unsel = theme.confdir .. "/icons/square_b.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 0 +theme.layout_tile = theme.confdir .. "/icons/tile.png" +theme.layout_tilegaps = theme.confdir .. "/icons/tilegaps.png" +theme.layout_tileleft = theme.confdir .. "/icons/tileleft.png" +theme.layout_tilebottom = theme.confdir .. "/icons/tilebottom.png" +theme.layout_tiletop = theme.confdir .. "/icons/tiletop.png" +theme.layout_fairv = theme.confdir .. "/icons/fairv.png" +theme.layout_fairh = theme.confdir .. "/icons/fairh.png" +theme.layout_spiral = theme.confdir .. "/icons/spiral.png" +theme.layout_dwindle = theme.confdir .. "/icons/dwindle.png" +theme.layout_max = theme.confdir .. "/icons/max.png" +theme.layout_fullscreen = theme.confdir .. "/icons/fullscreen.png" +theme.layout_magnifier = theme.confdir .. "/icons/magnifier.png" +theme.layout_floating = theme.confdir .. "/icons/floating.png" +theme.titlebar_close_button_normal = theme.confdir .. "/icons/titlebar/close_normal.png" +theme.titlebar_close_button_focus = theme.confdir .. "/icons/titlebar/close_focus.png" +theme.titlebar_minimize_button_normal = theme.confdir .. "/icons/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = theme.confdir .. "/icons/titlebar/minimize_focus.png" +theme.titlebar_ontop_button_normal_inactive = theme.confdir .. "/icons/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = theme.confdir .. "/icons/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = theme.confdir .. "/icons/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = theme.confdir .. "/icons/titlebar/ontop_focus_active.png" +theme.titlebar_sticky_button_normal_inactive = theme.confdir .. "/icons/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = theme.confdir .. "/icons/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = theme.confdir .. "/icons/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = theme.confdir .. "/icons/titlebar/sticky_focus_active.png" +theme.titlebar_floating_button_normal_inactive = theme.confdir .. "/icons/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = theme.confdir .. "/icons/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = theme.confdir .. "/icons/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = theme.confdir .. "/icons/titlebar/floating_focus_active.png" +theme.titlebar_maximized_button_normal_inactive = theme.confdir .. "/icons/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = theme.confdir .. "/icons/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = theme.confdir .. "/icons/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = theme.confdir .. "/icons/titlebar/maximized_focus_active.png" + +local markup = lain.util.markup + +-- Textclock +os.setlocale(os.getenv("LANG")) -- to localize the clock +local clockicon = wibox.widget.imagebox(theme.widget_clock) +local mytextclock = wibox.widget.textclock(markup("#7788af", "%A %d %B ") .. markup("#535f7a", ">") .. markup("#de5e1e", " %H:%M ")) +mytextclock.font = theme.font + +-- Calendar +theme.cal = lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + font = "xos4 Terminus 10", + fg = theme.fg_normal, + bg = theme.bg_normal + } +}) + +-- Weather +local weathericon = wibox.widget.imagebox(theme.widget_weather) +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) + notification_preset = { font = "xos4 Terminus 10", fg = theme.fg_normal }, + weather_na_markup = markup.fontfg(theme.font, "#eca4c4", "N/A "), + settings = function() + descr = weather_now["weather"][1]["description"]:lower() + units = math.floor(weather_now["main"]["temp"]) + widget:set_markup(markup.fontfg(theme.font, "#eca4c4", descr .. " @ " .. units .. "°C ")) + end +}) + +-- / fs +local fsicon = wibox.widget.imagebox(theme.widget_fs) +theme.fs = lain.widget.fs({ + options = "--exclude-type=tmpfs", + notification_preset = { font = "xos4 Terminus 10", fg = theme.fg_normal }, + settings = function() + widget:set_markup(markup.fontfg(theme.font, "#80d9d8", fs_now.used .. "% ")) + end +}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mailicon = wibox.widget.imagebox() +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + if mailcount > 0 then + mailicon:set_image(theme.widget_mail) + widget:set_markup(markup.fontfg(theme.font, "#cccccc", mailcount .. " ")) + else + widget:set_text("") + --mailicon:set_image() -- not working in 4.0 + mailicon._private.image = nil + mailicon:emit_signal("widget::redraw_needed") + mailicon:emit_signal("widget::layout_changed") + end + end +}) +--]] + +-- CPU +local cpuicon = wibox.widget.imagebox(theme.widget_cpu) +local cpu = lain.widget.cpu({ + settings = function() + widget:set_markup(markup.fontfg(theme.font, "#e33a6e", cpu_now.usage .. "% ")) + end +}) + +-- Coretemp +local tempicon = wibox.widget.imagebox(theme.widget_temp) +local temp = lain.widget.temp({ + settings = function() + widget:set_markup(markup.fontfg(theme.font, "#f1af5f", coretemp_now .. "°C ")) + end +}) + +-- Battery +local baticon = wibox.widget.imagebox(theme.widget_batt) +local bat = lain.widget.bat({ + settings = function() + local perc = bat_now.perc ~= "N/A" and bat_now.perc .. "%" or bat_now.perc + + if bat_now.ac_status == 1 then + perc = perc .. " plug" + end + + widget:set_markup(markup.fontfg(theme.font, theme.fg_normal, perc .. " ")) + end +}) + +-- ALSA volume +local volicon = wibox.widget.imagebox(theme.widget_vol) +theme.volume = lain.widget.alsa({ + settings = function() + if volume_now.status == "off" then + volume_now.level = volume_now.level .. "M" + end + + widget:set_markup(markup.fontfg(theme.font, "#7493d2", volume_now.level .. "% ")) + end +}) + +-- Net +local netdownicon = wibox.widget.imagebox(theme.widget_netdown) +local netdowninfo = wibox.widget.textbox() +local netupicon = wibox.widget.imagebox(theme.widget_netup) +local netupinfo = lain.widget.net({ + settings = function() + if iface ~= "network off" and + string.match(theme.weather.widget.text, "N/A") + then + theme.weather.update() + end + + widget:set_markup(markup.fontfg(theme.font, "#e54c62", net_now.sent .. " ")) + netdowninfo:set_markup(markup.fontfg(theme.font, "#87af5f", net_now.received .. " ")) + end +}) + +-- MEM +local memicon = wibox.widget.imagebox(theme.widget_mem) +local memory = lain.widget.mem({ + settings = function() + widget:set_markup(markup.fontfg(theme.font, "#e0da37", mem_now.used .. "M ")) + end +}) + +-- MPD +local mpdicon = wibox.widget.imagebox() +theme.mpd = lain.widget.mpd({ + settings = function() + mpd_notification_preset = { + text = string.format("%s [%s] - %s\n%s", mpd_now.artist, + mpd_now.album, mpd_now.date, mpd_now.title) + } + + if mpd_now.state == "play" then + artist = mpd_now.artist .. " > " + title = mpd_now.title .. " " + mpdicon:set_image(theme.widget_note_on) + elseif mpd_now.state == "pause" then + artist = "mpd " + title = "paused " + else + artist = "" + title = "" + --mpdicon:set_image() -- not working in 4.0 + mpdicon._private.image = nil + mpdicon:emit_signal("widget::redraw_needed") + mpdicon:emit_signal("widget::layout_changed") + end + widget:set_markup(markup.fontfg(theme.font, "#e54c62", artist) .. markup.fontfg(theme.font, "#b2b2b2", title)) + end +}) + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 20, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + --s.mylayoutbox, + s.mytaglist, + s.mypromptbox, + mpdicon, + theme.mpd.widget, + }, + --s.mytasklist, -- Middle widget + nil, + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + --mailicon, + --mail.widget, + netdownicon, + netdowninfo, + netupicon, + netupinfo.widget, + volicon, + theme.volume.widget, + memicon, + memory.widget, + cpuicon, + cpu.widget, + fsicon, + theme.fs.widget, + weathericon, + theme.weather.widget, + tempicon, + temp.widget, + baticon, + bat.widget, + clockicon, + mytextclock, + }, + } + + -- Create the bottom wibox + s.mybottomwibox = awful.wibar({ position = "bottom", screen = s, border_width = 0, height = 20, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the bottom wibox + s.mybottomwibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + s.mylayoutbox, + }, + } +end + +return theme diff --git a/awesome/themes/multicolor/wall.png b/awesome/themes/multicolor/wall.png new file mode 100644 index 0000000..a3188d0 Binary files /dev/null and b/awesome/themes/multicolor/wall.png differ diff --git a/awesome/themes/powerarrow-dark/icons/ac.png b/awesome/themes/powerarrow-dark/icons/ac.png new file mode 100644 index 0000000..96efcb4 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/ac.png differ diff --git a/awesome/themes/powerarrow-dark/icons/battery.png b/awesome/themes/powerarrow-dark/icons/battery.png new file mode 100644 index 0000000..8c85596 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/battery.png differ diff --git a/awesome/themes/powerarrow-dark/icons/battery_empty.png b/awesome/themes/powerarrow-dark/icons/battery_empty.png new file mode 100644 index 0000000..00821c9 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/battery_empty.png differ diff --git a/awesome/themes/powerarrow-dark/icons/battery_low.png b/awesome/themes/powerarrow-dark/icons/battery_low.png new file mode 100644 index 0000000..29f3fc5 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/battery_low.png differ diff --git a/awesome/themes/powerarrow-dark/icons/centerfair.png b/awesome/themes/powerarrow-dark/icons/centerfair.png new file mode 100644 index 0000000..c4f64b0 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/centerfair.png differ diff --git a/awesome/themes/powerarrow-dark/icons/centerwork.png b/awesome/themes/powerarrow-dark/icons/centerwork.png new file mode 100644 index 0000000..9071516 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/centerwork.png differ diff --git a/awesome/themes/powerarrow-dark/icons/centerworkh.png b/awesome/themes/powerarrow-dark/icons/centerworkh.png new file mode 100644 index 0000000..b1d1379 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/centerworkh.png differ diff --git a/awesome/themes/powerarrow-dark/icons/cpu.png b/awesome/themes/powerarrow-dark/icons/cpu.png new file mode 100644 index 0000000..35af1c3 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/cpu.png differ diff --git a/awesome/themes/powerarrow-dark/icons/dwindle.png b/awesome/themes/powerarrow-dark/icons/dwindle.png new file mode 100644 index 0000000..649ea99 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/dwindle.png differ diff --git a/awesome/themes/powerarrow-dark/icons/fairh.png b/awesome/themes/powerarrow-dark/icons/fairh.png new file mode 100644 index 0000000..62d3d99 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/fairh.png differ diff --git a/awesome/themes/powerarrow-dark/icons/fairv.png b/awesome/themes/powerarrow-dark/icons/fairv.png new file mode 100644 index 0000000..131dd0f Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/fairv.png differ diff --git a/awesome/themes/powerarrow-dark/icons/floating.png b/awesome/themes/powerarrow-dark/icons/floating.png new file mode 100644 index 0000000..d25c47b Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/floating.png differ diff --git a/awesome/themes/powerarrow-dark/icons/hdd.png b/awesome/themes/powerarrow-dark/icons/hdd.png new file mode 100644 index 0000000..0fb6833 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/hdd.png differ diff --git a/awesome/themes/powerarrow-dark/icons/magnifier.png b/awesome/themes/powerarrow-dark/icons/magnifier.png new file mode 100644 index 0000000..60d3e0d Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/magnifier.png differ diff --git a/awesome/themes/powerarrow-dark/icons/mail.png b/awesome/themes/powerarrow-dark/icons/mail.png new file mode 100644 index 0000000..474e602 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/mail.png differ diff --git a/awesome/themes/powerarrow-dark/icons/mail_on.png b/awesome/themes/powerarrow-dark/icons/mail_on.png new file mode 100644 index 0000000..19106d7 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/mail_on.png differ diff --git a/awesome/themes/powerarrow-dark/icons/max.png b/awesome/themes/powerarrow-dark/icons/max.png new file mode 100644 index 0000000..5b0a5b7 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/max.png differ diff --git a/awesome/themes/powerarrow-dark/icons/mem.png b/awesome/themes/powerarrow-dark/icons/mem.png new file mode 100644 index 0000000..7860a1a Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/mem.png differ diff --git a/awesome/themes/powerarrow-dark/icons/net.png b/awesome/themes/powerarrow-dark/icons/net.png new file mode 100644 index 0000000..bc42fdc Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/net.png differ diff --git a/awesome/themes/powerarrow-dark/icons/net_wired.png b/awesome/themes/powerarrow-dark/icons/net_wired.png new file mode 100644 index 0000000..e8cc2bd Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/net_wired.png differ diff --git a/awesome/themes/powerarrow-dark/icons/note.png b/awesome/themes/powerarrow-dark/icons/note.png new file mode 100644 index 0000000..baa29c3 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/note.png differ diff --git a/awesome/themes/powerarrow-dark/icons/note_on.png b/awesome/themes/powerarrow-dark/icons/note_on.png new file mode 100644 index 0000000..1a7ab94 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/note_on.png differ diff --git a/awesome/themes/powerarrow-dark/icons/scissors.png b/awesome/themes/powerarrow-dark/icons/scissors.png new file mode 100644 index 0000000..f8c700d Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/scissors.png differ diff --git a/awesome/themes/powerarrow-dark/icons/spiral.png b/awesome/themes/powerarrow-dark/icons/spiral.png new file mode 100644 index 0000000..d9ee0f6 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/spiral.png differ diff --git a/awesome/themes/powerarrow-dark/icons/square_sel.png b/awesome/themes/powerarrow-dark/icons/square_sel.png new file mode 100644 index 0000000..1102a9f Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/square_sel.png differ diff --git a/awesome/themes/powerarrow-dark/icons/square_unsel.png b/awesome/themes/powerarrow-dark/icons/square_unsel.png new file mode 100644 index 0000000..7386b85 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/square_unsel.png differ diff --git a/awesome/themes/powerarrow-dark/icons/submenu.png b/awesome/themes/powerarrow-dark/icons/submenu.png new file mode 100644 index 0000000..b55ebce Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/submenu.png differ diff --git a/awesome/themes/powerarrow-dark/icons/task.png b/awesome/themes/powerarrow-dark/icons/task.png new file mode 100644 index 0000000..9701b68 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/task.png differ diff --git a/awesome/themes/powerarrow-dark/icons/temp.png b/awesome/themes/powerarrow-dark/icons/temp.png new file mode 100644 index 0000000..6793a9f Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/temp.png differ diff --git a/awesome/themes/powerarrow-dark/icons/termfair.png b/awesome/themes/powerarrow-dark/icons/termfair.png new file mode 100644 index 0000000..3e06023 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/termfair.png differ diff --git a/awesome/themes/powerarrow-dark/icons/tile.png b/awesome/themes/powerarrow-dark/icons/tile.png new file mode 100644 index 0000000..922c05c Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/tile.png differ diff --git a/awesome/themes/powerarrow-dark/icons/tilebottom.png b/awesome/themes/powerarrow-dark/icons/tilebottom.png new file mode 100644 index 0000000..6ec9cb8 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/tilebottom.png differ diff --git a/awesome/themes/powerarrow-dark/icons/tileleft.png b/awesome/themes/powerarrow-dark/icons/tileleft.png new file mode 100644 index 0000000..8e3d2d6 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/tileleft.png differ diff --git a/awesome/themes/powerarrow-dark/icons/tiletop.png b/awesome/themes/powerarrow-dark/icons/tiletop.png new file mode 100644 index 0000000..3da75a1 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/tiletop.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/close_focus.png b/awesome/themes/powerarrow-dark/icons/titlebar/close_focus.png new file mode 100644 index 0000000..b2051b0 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/close_focus.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/close_normal.png b/awesome/themes/powerarrow-dark/icons/titlebar/close_normal.png new file mode 100644 index 0000000..da6028c Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/close_normal.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_active.png new file mode 100644 index 0000000..5fe84c0 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..47f19f6 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/floating_focus_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_active.png new file mode 100644 index 0000000..576fa36 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..4adc5e9 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/floating_normal_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..7d9a11a Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..bce1d00 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..9f24945 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..2e56d32 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..41a69e2 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..2f3a2be Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..0f937b7 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..a9a3206 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..a9bc8a2 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..5493d8e Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_active.png b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..1e150f5 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_active.png differ diff --git a/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_inactive.png b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..7e6c99b Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/titlebar/sticky_normal_inactive.png differ diff --git a/awesome/themes/powerarrow-dark/icons/vol.png b/awesome/themes/powerarrow-dark/icons/vol.png new file mode 100644 index 0000000..bbf33d4 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/vol.png differ diff --git a/awesome/themes/powerarrow-dark/icons/vol_low.png b/awesome/themes/powerarrow-dark/icons/vol_low.png new file mode 100644 index 0000000..aa3ce4d Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/vol_low.png differ diff --git a/awesome/themes/powerarrow-dark/icons/vol_mute.png b/awesome/themes/powerarrow-dark/icons/vol_mute.png new file mode 100644 index 0000000..e855fd2 Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/vol_mute.png differ diff --git a/awesome/themes/powerarrow-dark/icons/vol_no.png b/awesome/themes/powerarrow-dark/icons/vol_no.png new file mode 100644 index 0000000..bbe917b Binary files /dev/null and b/awesome/themes/powerarrow-dark/icons/vol_no.png differ diff --git a/awesome/themes/powerarrow-dark/theme.lua b/awesome/themes/powerarrow-dark/theme.lua new file mode 100644 index 0000000..e63042f --- /dev/null +++ b/awesome/themes/powerarrow-dark/theme.lua @@ -0,0 +1,344 @@ + +--[[ + + Powerarrow Dark Awesome WM theme + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv } + +local theme = {} +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/powerarrow-dark" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "xos4 Terminus 9" +theme.fg_normal = "#DDDDFF" +theme.fg_focus = "#EA6F81" +theme.fg_urgent = "#CC9393" +theme.bg_normal = "#1A1A1A" +theme.bg_focus = "#313131" +theme.bg_urgent = "#1A1A1A" +theme.border_width = 1 +theme.border_normal = "#3F3F3F" +theme.border_focus = "#7F7F7F" +theme.border_marked = "#CC9393" +theme.tasklist_bg_focus = "#1A1A1A" +theme.titlebar_bg_focus = theme.bg_focus +theme.titlebar_bg_normal = theme.bg_normal +theme.titlebar_fg_focus = theme.fg_focus +theme.menu_height = 16 +theme.menu_width = 140 +theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" +theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.layout_tile = theme.dir .. "/icons/tile.png" +theme.layout_tileleft = theme.dir .. "/icons/tileleft.png" +theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png" +theme.layout_tiletop = theme.dir .. "/icons/tiletop.png" +theme.layout_fairv = theme.dir .. "/icons/fairv.png" +theme.layout_fairh = theme.dir .. "/icons/fairh.png" +theme.layout_spiral = theme.dir .. "/icons/spiral.png" +theme.layout_dwindle = theme.dir .. "/icons/dwindle.png" +theme.layout_max = theme.dir .. "/icons/max.png" +theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png" +theme.layout_magnifier = theme.dir .. "/icons/magnifier.png" +theme.layout_floating = theme.dir .. "/icons/floating.png" +theme.widget_ac = theme.dir .. "/icons/ac.png" +theme.widget_battery = theme.dir .. "/icons/battery.png" +theme.widget_battery_low = theme.dir .. "/icons/battery_low.png" +theme.widget_battery_empty = theme.dir .. "/icons/battery_empty.png" +theme.widget_mem = theme.dir .. "/icons/mem.png" +theme.widget_cpu = theme.dir .. "/icons/cpu.png" +theme.widget_temp = theme.dir .. "/icons/temp.png" +theme.widget_net = theme.dir .. "/icons/net.png" +theme.widget_hdd = theme.dir .. "/icons/hdd.png" +theme.widget_music = theme.dir .. "/icons/note.png" +theme.widget_music_on = theme.dir .. "/icons/note_on.png" +theme.widget_vol = theme.dir .. "/icons/vol.png" +theme.widget_vol_low = theme.dir .. "/icons/vol_low.png" +theme.widget_vol_no = theme.dir .. "/icons/vol_no.png" +theme.widget_vol_mute = theme.dir .. "/icons/vol_mute.png" +theme.widget_mail = theme.dir .. "/icons/mail.png" +theme.widget_mail_on = theme.dir .. "/icons/mail_on.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 0 +theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png" +theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png" +theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png" +theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png" +theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png" +theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png" +theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png" +theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png" +theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png" +theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png" + +local markup = lain.util.markup +local separators = lain.util.separators + +-- Textclock +local clockicon = wibox.widget.imagebox(theme.widget_clock) +local clock = awful.widget.watch( + "date +'%a %d %b %R'", 60, + function(widget, stdout) + widget:set_markup(" " .. markup.font(theme.font, stdout)) + end +) + +-- Calendar +theme.cal = lain.widget.calendar({ + attach_to = { clock.widget }, + notification_preset = { + font = "xos4 Terminus 10", + fg = theme.fg_normal, + bg = theme.bg_normal + } +}) + +-- Mail IMAP check +local mailicon = wibox.widget.imagebox(theme.widget_mail) +--[[ commented because it needs to be set before use +mailicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.spawn(mail) end))) +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + if mailcount > 0 then + widget:set_text(" " .. mailcount .. " ") + mailicon:set_image(theme.widget_mail_on) + else + widget:set_text("") + mailicon:set_image(theme.widget_mail) + end + end +}) +--]] + +-- MPD +local musicplr = awful.util.terminal .. " -title Music -g 130x34-320+16 -e ncmpcpp" +local mpdicon = wibox.widget.imagebox(theme.widget_music) +mpdicon:buttons(awful.util.table.join( + awful.button({ modkey }, 1, function () awful.spawn.with_shell(musicplr) end), + awful.button({ }, 1, function () + awful.spawn.with_shell("mpc prev") + theme.mpd.update() + end), + awful.button({ }, 2, function () + awful.spawn.with_shell("mpc toggle") + theme.mpd.update() + end), + awful.button({ }, 3, function () + awful.spawn.with_shell("mpc next") + theme.mpd.update() + end))) +theme.mpd = lain.widget.mpd({ + settings = function() + if mpd_now.state == "play" then + artist = " " .. mpd_now.artist .. " " + title = mpd_now.title .. " " + mpdicon:set_image(theme.widget_music_on) + elseif mpd_now.state == "pause" then + artist = " mpd " + title = "paused " + else + artist = "" + title = "" + mpdicon:set_image(theme.widget_music) + end + + widget:set_markup(markup.font(theme.font, markup("#EA6F81", artist) .. title)) + end +}) + +-- MEM +local memicon = wibox.widget.imagebox(theme.widget_mem) +local mem = lain.widget.mem({ + settings = function() + widget:set_markup(markup.font(theme.font, " " .. mem_now.used .. "MB ")) + end +}) + +-- CPU +local cpuicon = wibox.widget.imagebox(theme.widget_cpu) +local cpu = lain.widget.cpu({ + settings = function() + widget:set_markup(markup.font(theme.font, " " .. cpu_now.usage .. "% ")) + end +}) + +-- Coretemp +local tempicon = wibox.widget.imagebox(theme.widget_temp) +local temp = lain.widget.temp({ + settings = function() + widget:set_markup(markup.font(theme.font, " " .. coretemp_now .. "°C ")) + end +}) + +-- / fs +local fsicon = wibox.widget.imagebox(theme.widget_hdd) +theme.fs = lain.widget.fs({ + options = "--exclude-type=tmpfs", + notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "xos4 Terminus 10" }, + settings = function() + widget:set_markup(markup.font(theme.font, " " .. fs_now.used .. "% ")) + end +}) + +-- Battery +local baticon = wibox.widget.imagebox(theme.widget_battery) +local bat = lain.widget.bat({ + settings = function() + if bat_now.status ~= "N/A" then + if bat_now.ac_status == 1 then + widget:set_markup(markup.font(theme.font, " AC ")) + baticon:set_image(theme.widget_ac) + return + elseif not bat_now.perc and tonumber(bat_now.perc) <= 5 then + baticon:set_image(theme.widget_battery_empty) + elseif not bat_now.perc and tonumber(bat_now.perc) <= 15 then + baticon:set_image(theme.widget_battery_low) + else + baticon:set_image(theme.widget_battery) + end + widget:set_markup(markup.font(theme.font, " " .. bat_now.perc .. "% ")) + else + widget:set_markup(markup.font(theme.font, " AC ")) + baticon:set_image(theme.widget_ac) + end + end +}) + +-- ALSA volume +local volicon = wibox.widget.imagebox(theme.widget_vol) +theme.volume = lain.widget.alsa({ + settings = function() + if volume_now.status == "off" then + volicon:set_image(theme.widget_vol_mute) + elseif tonumber(volume_now.level) == 0 then + volicon:set_image(theme.widget_vol_no) + elseif tonumber(volume_now.level) <= 50 then + volicon:set_image(theme.widget_vol_low) + else + volicon:set_image(theme.widget_vol) + end + + widget:set_markup(markup.font(theme.font, " " .. volume_now.level .. "% ")) + end +}) + +-- Net +local neticon = wibox.widget.imagebox(theme.widget_net) +local net = lain.widget.net({ + settings = function() + widget:set_markup(markup.font(theme.font, + markup("#7AC82E", " " .. net_now.received) + .. " " .. + markup("#46A8C3", " " .. net_now.sent .. " "))) + end +}) + +-- Separators +local spr = wibox.widget.textbox(' ') +local arrl_dl = separators.arrow_left(theme.bg_focus, "alpha") +local arrl_ld = separators.arrow_left("alpha", theme.bg_focus) + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.util.taglayout) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + --spr, + s.mytaglist, + s.mypromptbox, + spr, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + --spr, + --arrl_ld, + --wibox.container.background(mpdicon, theme.bg_focus), + --wibox.container.background(theme.mpd.widget, theme.bg_focus), + --arrl_dl, + --volicon, + --theme.volume.widget, + --arrl_ld, + --wibox.container.background(mailicon, theme.bg_focus), + --wibox.container.background(mail.widget, theme.bg_focus), + --arrl_dl, + memicon, + mem.widget, + arrl_ld, + wibox.container.background(cpuicon, theme.bg_focus), + wibox.container.background(cpu.widget, theme.bg_focus), + arrl_dl, + tempicon, + temp.widget, + arrl_ld, + wibox.container.background(fsicon, theme.bg_focus), + wibox.container.background(theme.fs.widget, theme.bg_focus), + --arrl_dl, + --baticon, + --bat.widget, + --arrl_ld, + --wibox.container.background(neticon, theme.bg_focus), + --wibox.container.background(net.widget, theme.bg_focus), + arrl_dl, + wibox.widget.systray(), + clock, + spr, + arrl_ld, + wibox.container.background(s.mylayoutbox, theme.bg_focus), + }, + } +end + +return theme diff --git a/awesome/themes/powerarrow-dark/wall.png b/awesome/themes/powerarrow-dark/wall.png new file mode 100644 index 0000000..9d1118b Binary files /dev/null and b/awesome/themes/powerarrow-dark/wall.png differ diff --git a/awesome/themes/powerarrow/binclock.lua b/awesome/themes/powerarrow/binclock.lua new file mode 100644 index 0000000..9d144dc --- /dev/null +++ b/awesome/themes/powerarrow/binclock.lua @@ -0,0 +1,96 @@ + +--[[ + + Licensed under GNU General Public License v2 + * (c) 2017, Luke Bonham + * (c) 2013, romockee + +--]] + +local gears = require("gears") +local wibox = require("wibox") +local date = os.date +local ipairs = ipairs +local math = math +local select = select +local string = string + +local binclock = {} + +function binclock.dec2bin(num, bits) + local bits, t = bits or select(2, math.frexp(num)), {} + for b = bits, 1, -1 do + t[b] = math.fmod(num, 2) + num = (num - t[b]) / 2 + end + return t +end + +function binclock.paintdot(cr, val, shift) + local height = 0 + for _, bit in ipairs(binclock.dec2bin(val, 4)) do + if bit >= 1 then + cr:set_source(gears.color(binclock.color_active)) + else + cr:set_source(gears.color(binclock.color_inactive)) + end + cr:rectangle(shift, height, binclock.dotsize, binclock.dotsize) + cr:fill() + height = height + binclock.dotsize + binclock.step + end +end + +local function factory(args) + local args = args or {} + + binclock.width = args.width or 42 + binclock.height = args.height or 18 + binclock.show_seconds = args.show_seconds or false + binclock.color_active = args.color_active or "#CCCCCC" + binclock.color_inactive = args.color_inactive or "#444444" + binclock.dotsize = math.floor(binclock.height / 5) + binclock.step = math.floor(binclock.dotsize / 3) + + binclock.widget = wibox.widget { + fit = function(self, context, width, height) + return binclock.width, binclock.height + end, + draw = function(self, context, cr, width, height) + local t = date("*t") + + local hour = string.format("%02d", t.hour) + local min = string.format("%02d", t.min) + local sec = string.format("%02d", t.sec) + + local col_count = 4 + if binclock.show_seconds then + col_count = 6 + end + local step = math.floor((binclock.width - col_count * binclock.dotsize) / 8) + + binclock.paintdot(cr, string.sub(hour, 1, 1), step, 2) + binclock.paintdot(cr, string.sub(hour, 2, 2), binclock.dotsize + 2 * step) + + binclock.paintdot(cr, string.sub(min, 1, 1), binclock.dotsize * 2 + 4 * step) + binclock.paintdot(cr, string.sub(min, 2, 2), binclock.dotsize * 3 + 5 * step) + + if binclock.show_seconds then + binclock.paintdot(cr, string.sub(sec, 1, 1), binclock.dotsize * 4 + 7 * step) + binclock.paintdot(cr, string.sub(sec, 2, 2), binclock.dotsize * 5 + 8 * step) + end + end, + layout = wibox.widget.base.make_widget + } + + binclock.timer = gears.timer { timeout = binclock.show_seconds and 1 or 60 } + + binclock.timer:connect_signal("timeout", function() + binclock.widget:emit_signal("widget::redraw_needed") + end) + + binclock.timer:start() + + return binclock +end + +return factory diff --git a/awesome/themes/powerarrow/icons/ac.png b/awesome/themes/powerarrow/icons/ac.png new file mode 100644 index 0000000..453af4e Binary files /dev/null and b/awesome/themes/powerarrow/icons/ac.png differ diff --git a/awesome/themes/powerarrow/icons/awesome.png b/awesome/themes/powerarrow/icons/awesome.png new file mode 100644 index 0000000..4cabb6c Binary files /dev/null and b/awesome/themes/powerarrow/icons/awesome.png differ diff --git a/awesome/themes/powerarrow/icons/battery.png b/awesome/themes/powerarrow/icons/battery.png new file mode 100644 index 0000000..7dd78a5 Binary files /dev/null and b/awesome/themes/powerarrow/icons/battery.png differ diff --git a/awesome/themes/powerarrow/icons/battery_empty.png b/awesome/themes/powerarrow/icons/battery_empty.png new file mode 100644 index 0000000..763aa93 Binary files /dev/null and b/awesome/themes/powerarrow/icons/battery_empty.png differ diff --git a/awesome/themes/powerarrow/icons/battery_low.png b/awesome/themes/powerarrow/icons/battery_low.png new file mode 100644 index 0000000..626222f Binary files /dev/null and b/awesome/themes/powerarrow/icons/battery_low.png differ diff --git a/awesome/themes/powerarrow/icons/cpu.png b/awesome/themes/powerarrow/icons/cpu.png new file mode 100644 index 0000000..c28a787 Binary files /dev/null and b/awesome/themes/powerarrow/icons/cpu.png differ diff --git a/awesome/themes/powerarrow/icons/floating.png b/awesome/themes/powerarrow/icons/floating.png new file mode 100644 index 0000000..146a87c Binary files /dev/null and b/awesome/themes/powerarrow/icons/floating.png differ diff --git a/awesome/themes/powerarrow/icons/fwd.png b/awesome/themes/powerarrow/icons/fwd.png new file mode 100644 index 0000000..e9b875e Binary files /dev/null and b/awesome/themes/powerarrow/icons/fwd.png differ diff --git a/awesome/themes/powerarrow/icons/hdd.png b/awesome/themes/powerarrow/icons/hdd.png new file mode 100644 index 0000000..db4458c Binary files /dev/null and b/awesome/themes/powerarrow/icons/hdd.png differ diff --git a/awesome/themes/powerarrow/icons/mail.png b/awesome/themes/powerarrow/icons/mail.png new file mode 100644 index 0000000..4641aea Binary files /dev/null and b/awesome/themes/powerarrow/icons/mail.png differ diff --git a/awesome/themes/powerarrow/icons/mail_on.png b/awesome/themes/powerarrow/icons/mail_on.png new file mode 100644 index 0000000..65dfb3c Binary files /dev/null and b/awesome/themes/powerarrow/icons/mail_on.png differ diff --git a/awesome/themes/powerarrow/icons/mem.png b/awesome/themes/powerarrow/icons/mem.png new file mode 100644 index 0000000..ee6d480 Binary files /dev/null and b/awesome/themes/powerarrow/icons/mem.png differ diff --git a/awesome/themes/powerarrow/icons/net.png b/awesome/themes/powerarrow/icons/net.png new file mode 100644 index 0000000..769bfec Binary files /dev/null and b/awesome/themes/powerarrow/icons/net.png differ diff --git a/awesome/themes/powerarrow/icons/next.png b/awesome/themes/powerarrow/icons/next.png new file mode 100644 index 0000000..9a62593 Binary files /dev/null and b/awesome/themes/powerarrow/icons/next.png differ diff --git a/awesome/themes/powerarrow/icons/note.png b/awesome/themes/powerarrow/icons/note.png new file mode 100644 index 0000000..19866aa Binary files /dev/null and b/awesome/themes/powerarrow/icons/note.png differ diff --git a/awesome/themes/powerarrow/icons/note_on.png b/awesome/themes/powerarrow/icons/note_on.png new file mode 100644 index 0000000..aae5ca3 Binary files /dev/null and b/awesome/themes/powerarrow/icons/note_on.png differ diff --git a/awesome/themes/powerarrow/icons/pacman.png b/awesome/themes/powerarrow/icons/pacman.png new file mode 100644 index 0000000..bdb9b7b Binary files /dev/null and b/awesome/themes/powerarrow/icons/pacman.png differ diff --git a/awesome/themes/powerarrow/icons/pause.png b/awesome/themes/powerarrow/icons/pause.png new file mode 100644 index 0000000..d4546e6 Binary files /dev/null and b/awesome/themes/powerarrow/icons/pause.png differ diff --git a/awesome/themes/powerarrow/icons/phones.png b/awesome/themes/powerarrow/icons/phones.png new file mode 100644 index 0000000..bec0e57 Binary files /dev/null and b/awesome/themes/powerarrow/icons/phones.png differ diff --git a/awesome/themes/powerarrow/icons/play.png b/awesome/themes/powerarrow/icons/play.png new file mode 100644 index 0000000..b228f74 Binary files /dev/null and b/awesome/themes/powerarrow/icons/play.png differ diff --git a/awesome/themes/powerarrow/icons/prev.png b/awesome/themes/powerarrow/icons/prev.png new file mode 100644 index 0000000..4c4ca40 Binary files /dev/null and b/awesome/themes/powerarrow/icons/prev.png differ diff --git a/awesome/themes/powerarrow/icons/rwd.png b/awesome/themes/powerarrow/icons/rwd.png new file mode 100644 index 0000000..ac3d6f4 Binary files /dev/null and b/awesome/themes/powerarrow/icons/rwd.png differ diff --git a/awesome/themes/powerarrow/icons/scissors.png b/awesome/themes/powerarrow/icons/scissors.png new file mode 100644 index 0000000..68bf003 Binary files /dev/null and b/awesome/themes/powerarrow/icons/scissors.png differ diff --git a/awesome/themes/powerarrow/icons/square_sel.png b/awesome/themes/powerarrow/icons/square_sel.png new file mode 100755 index 0000000..874a3a5 Binary files /dev/null and b/awesome/themes/powerarrow/icons/square_sel.png differ diff --git a/awesome/themes/powerarrow/icons/square_unsel.png b/awesome/themes/powerarrow/icons/square_unsel.png new file mode 100755 index 0000000..979642f Binary files /dev/null and b/awesome/themes/powerarrow/icons/square_unsel.png differ diff --git a/awesome/themes/powerarrow/icons/stop.png b/awesome/themes/powerarrow/icons/stop.png new file mode 100644 index 0000000..207915b Binary files /dev/null and b/awesome/themes/powerarrow/icons/stop.png differ diff --git a/awesome/themes/powerarrow/icons/submenu.png b/awesome/themes/powerarrow/icons/submenu.png new file mode 100755 index 0000000..e9a6b7c Binary files /dev/null and b/awesome/themes/powerarrow/icons/submenu.png differ diff --git a/awesome/themes/powerarrow/icons/task.png b/awesome/themes/powerarrow/icons/task.png new file mode 100644 index 0000000..962b51a Binary files /dev/null and b/awesome/themes/powerarrow/icons/task.png differ diff --git a/awesome/themes/powerarrow/icons/temp.png b/awesome/themes/powerarrow/icons/temp.png new file mode 100644 index 0000000..7952de8 Binary files /dev/null and b/awesome/themes/powerarrow/icons/temp.png differ diff --git a/awesome/themes/powerarrow/icons/tile.png b/awesome/themes/powerarrow/icons/tile.png new file mode 100644 index 0000000..d2fd6bd Binary files /dev/null and b/awesome/themes/powerarrow/icons/tile.png differ diff --git a/awesome/themes/powerarrow/icons/tilebottom.png b/awesome/themes/powerarrow/icons/tilebottom.png new file mode 100644 index 0000000..30513ec Binary files /dev/null and b/awesome/themes/powerarrow/icons/tilebottom.png differ diff --git a/awesome/themes/powerarrow/icons/tileleft.png b/awesome/themes/powerarrow/icons/tileleft.png new file mode 100644 index 0000000..ddbf7bb Binary files /dev/null and b/awesome/themes/powerarrow/icons/tileleft.png differ diff --git a/awesome/themes/powerarrow/icons/tiletop.png b/awesome/themes/powerarrow/icons/tiletop.png new file mode 100644 index 0000000..f7671bf Binary files /dev/null and b/awesome/themes/powerarrow/icons/tiletop.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/close_focus.png b/awesome/themes/powerarrow/icons/titlebar/close_focus.png new file mode 100644 index 0000000..e9b4179 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/close_focus.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/close_normal.png b/awesome/themes/powerarrow/icons/titlebar/close_normal.png new file mode 100644 index 0000000..cb0c3fa Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/close_normal.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/floating_focus_active.png b/awesome/themes/powerarrow/icons/titlebar/floating_focus_active.png new file mode 100644 index 0000000..0f9ee0d Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/floating_focus_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/floating_focus_inactive.png b/awesome/themes/powerarrow/icons/titlebar/floating_focus_inactive.png new file mode 100644 index 0000000..d254a73 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/floating_focus_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/floating_normal_active.png b/awesome/themes/powerarrow/icons/titlebar/floating_normal_active.png new file mode 100644 index 0000000..c5ce3de Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/floating_normal_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/floating_normal_inactive.png b/awesome/themes/powerarrow/icons/titlebar/floating_normal_inactive.png new file mode 100644 index 0000000..850b602 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/floating_normal_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/maximized_focus_active.png b/awesome/themes/powerarrow/icons/titlebar/maximized_focus_active.png new file mode 100644 index 0000000..7e8498a Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/maximized_focus_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/maximized_focus_inactive.png b/awesome/themes/powerarrow/icons/titlebar/maximized_focus_inactive.png new file mode 100644 index 0000000..f684470 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/maximized_focus_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/maximized_normal_active.png b/awesome/themes/powerarrow/icons/titlebar/maximized_normal_active.png new file mode 100644 index 0000000..4aa4196 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/maximized_normal_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/maximized_normal_inactive.png b/awesome/themes/powerarrow/icons/titlebar/maximized_normal_inactive.png new file mode 100644 index 0000000..bfe01a3 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/maximized_normal_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/ontop_focus_active.png b/awesome/themes/powerarrow/icons/titlebar/ontop_focus_active.png new file mode 100644 index 0000000..86e61b7 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/ontop_focus_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/ontop_focus_inactive.png b/awesome/themes/powerarrow/icons/titlebar/ontop_focus_inactive.png new file mode 100644 index 0000000..286d439 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/ontop_focus_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/ontop_normal_active.png b/awesome/themes/powerarrow/icons/titlebar/ontop_normal_active.png new file mode 100644 index 0000000..fcee772 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/ontop_normal_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/ontop_normal_inactive.png b/awesome/themes/powerarrow/icons/titlebar/ontop_normal_inactive.png new file mode 100644 index 0000000..a628626 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/ontop_normal_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/sticky_focus_active.png b/awesome/themes/powerarrow/icons/titlebar/sticky_focus_active.png new file mode 100644 index 0000000..b10e604 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/sticky_focus_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/sticky_focus_inactive.png b/awesome/themes/powerarrow/icons/titlebar/sticky_focus_inactive.png new file mode 100644 index 0000000..22d7453 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/sticky_focus_inactive.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/sticky_normal_active.png b/awesome/themes/powerarrow/icons/titlebar/sticky_normal_active.png new file mode 100644 index 0000000..aad079e Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/sticky_normal_active.png differ diff --git a/awesome/themes/powerarrow/icons/titlebar/sticky_normal_inactive.png b/awesome/themes/powerarrow/icons/titlebar/sticky_normal_inactive.png new file mode 100644 index 0000000..5f3e655 Binary files /dev/null and b/awesome/themes/powerarrow/icons/titlebar/sticky_normal_inactive.png differ diff --git a/awesome/themes/powerarrow/theme.lua b/awesome/themes/powerarrow/theme.lua new file mode 100644 index 0000000..4afc397 --- /dev/null +++ b/awesome/themes/powerarrow/theme.lua @@ -0,0 +1,381 @@ + +--[[ + + Powerarrow Awesome WM theme + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os, math, string = os, math, string + +local theme = {} +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/powerarrow" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "xos4 Terminus 9" +theme.fg_normal = "#FEFEFE" +theme.fg_focus = "#32D6FF" +theme.fg_urgent = "#C83F11" +theme.bg_normal = "#222222" +theme.bg_focus = "#1E2320" +theme.bg_urgent = "#3F3F3F" +theme.taglist_fg_focus = "#00CCFF" +theme.tasklist_bg_focus = "#222222" +theme.tasklist_fg_focus = "#00CCFF" +theme.border_width = 1 +theme.border_normal = "#3F3F3F" +theme.border_focus = "#6F6F6F" +theme.border_marked = "#CC9393" +theme.titlebar_bg_focus = "#3F3F3F" +theme.titlebar_bg_normal = "#3F3F3F" +theme.titlebar_bg_focus = theme.bg_focus +theme.titlebar_bg_normal = theme.bg_normal +theme.titlebar_fg_focus = theme.fg_focus +theme.menu_height = 16 +theme.menu_width = 140 +theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" +theme.awesome_icon = theme.dir .. "/icons/awesome.png" +theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.layout_tile = theme.dir .. "/icons/tile.png" +theme.layout_tileleft = theme.dir .. "/icons/tileleft.png" +theme.layout_tilebottom = theme.dir .. "/icons/tilebottom.png" +theme.layout_tiletop = theme.dir .. "/icons/tiletop.png" +theme.layout_fairv = theme.dir .. "/icons/fairv.png" +theme.layout_fairh = theme.dir .. "/icons/fairh.png" +theme.layout_spiral = theme.dir .. "/icons/spiral.png" +theme.layout_dwindle = theme.dir .. "/icons/dwindle.png" +theme.layout_max = theme.dir .. "/icons/max.png" +theme.layout_fullscreen = theme.dir .. "/icons/fullscreen.png" +theme.layout_magnifier = theme.dir .. "/icons/magnifier.png" +theme.layout_floating = theme.dir .. "/icons/floating.png" +theme.widget_ac = theme.dir .. "/icons/ac.png" +theme.widget_battery = theme.dir .. "/icons/battery.png" +theme.widget_battery_low = theme.dir .. "/icons/battery_low.png" +theme.widget_battery_empty = theme.dir .. "/icons/battery_empty.png" +theme.widget_mem = theme.dir .. "/icons/mem.png" +theme.widget_cpu = theme.dir .. "/icons/cpu.png" +theme.widget_temp = theme.dir .. "/icons/temp.png" +theme.widget_net = theme.dir .. "/icons/net.png" +theme.widget_hdd = theme.dir .. "/icons/hdd.png" +theme.widget_music = theme.dir .. "/icons/note.png" +theme.widget_music_on = theme.dir .. "/icons/note_on.png" +theme.widget_music_pause = theme.dir .. "/icons/pause.png" +theme.widget_music_stop = theme.dir .. "/icons/stop.png" +theme.widget_vol = theme.dir .. "/icons/vol.png" +theme.widget_vol_low = theme.dir .. "/icons/vol_low.png" +theme.widget_vol_no = theme.dir .. "/icons/vol_no.png" +theme.widget_vol_mute = theme.dir .. "/icons/vol_mute.png" +theme.widget_mail = theme.dir .. "/icons/mail.png" +theme.widget_mail_on = theme.dir .. "/icons/mail_on.png" +theme.widget_task = theme.dir .. "/icons/task.png" +theme.widget_scissors = theme.dir .. "/icons/scissors.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 0 +theme.titlebar_close_button_focus = theme.dir .. "/icons/titlebar/close_focus.png" +theme.titlebar_close_button_normal = theme.dir .. "/icons/titlebar/close_normal.png" +theme.titlebar_ontop_button_focus_active = theme.dir .. "/icons/titlebar/ontop_focus_active.png" +theme.titlebar_ontop_button_normal_active = theme.dir .. "/icons/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_inactive = theme.dir .. "/icons/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_inactive = theme.dir .. "/icons/titlebar/ontop_normal_inactive.png" +theme.titlebar_sticky_button_focus_active = theme.dir .. "/icons/titlebar/sticky_focus_active.png" +theme.titlebar_sticky_button_normal_active = theme.dir .. "/icons/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_inactive = theme.dir .. "/icons/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_inactive = theme.dir .. "/icons/titlebar/sticky_normal_inactive.png" +theme.titlebar_floating_button_focus_active = theme.dir .. "/icons/titlebar/floating_focus_active.png" +theme.titlebar_floating_button_normal_active = theme.dir .. "/icons/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_inactive = theme.dir .. "/icons/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_inactive = theme.dir .. "/icons/titlebar/floating_normal_inactive.png" +theme.titlebar_maximized_button_focus_active = theme.dir .. "/icons/titlebar/maximized_focus_active.png" +theme.titlebar_maximized_button_normal_active = theme.dir .. "/icons/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_inactive = theme.dir .. "/icons/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_inactive = theme.dir .. "/icons/titlebar/maximized_normal_inactive.png" + +local markup = lain.util.markup +local separators = lain.util.separators + +-- Binary clock +local binclock = require("themes.powerarrow.binclock"){ + height = 16, + show_seconds = true, + color_active = theme.fg_normal, + color_inactive = theme.bg_focus +} + +-- Calendar +theme.cal = lain.widget.calendar({ + --cal = "cal --color=always", + attach_to = { binclock.widget }, + notification_preset = { + font = "xos4 Terminus 10", + fg = theme.fg_normal, + bg = theme.bg_normal + } +}) + +-- Taskwarrior +local task = wibox.widget.imagebox(theme.widget_task) +lain.widget.contrib.task.attach(task) +task:buttons(awful.util.table.join(awful.button({}, 1, lain.widget.contrib.task.prompt))) + +-- Scissors (xsel copy and paste) +local scissors = wibox.widget.imagebox(theme.widget_scissors) +scissors:buttons(awful.util.table.join(awful.button({}, 1, function() awful.spawn("xsel | xsel -i -b") end))) + +-- Mail IMAP check +local mailicon = wibox.widget.imagebox(theme.widget_mail) +--[[ commented because it needs to be set before use +mailicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.spawn(mail) end))) +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + if mailcount > 0 then + widget:set_text(" " .. mailcount .. " ") + mailicon:set_image(theme.widget_mail_on) + else + widget:set_text("") + mailicon:set_image(theme.widget_mail) + end + end +}) +--]] + +-- ALSA volume +theme.volume = lain.widget.alsabar({ + --togglechannel = "IEC958,3", + notification_preset = { font = "xos4 Terminus 10", fg = theme.fg_normal }, +}) + +-- MPD +local musicplr = awful.util.terminal .. " -title Music -g 130x34-320+16 -e ncmpcpp" +local mpdicon = wibox.widget.imagebox(theme.widget_music) +mpdicon:buttons(awful.util.table.join( + awful.button({ modkey }, 1, function () awful.spawn.with_shell(musicplr) end), + awful.button({ }, 1, function () + awful.spawn.with_shell("mpc prev") + theme.mpd.update() + end), + awful.button({ }, 2, function () + awful.spawn.with_shell("mpc toggle") + theme.mpd.update() + end), + awful.button({ }, 3, function () + awful.spawn.with_shell("mpc next") + theme.mpd.update() + end))) +theme.mpd = lain.widget.mpd({ + settings = function() + if mpd_now.state == "play" then + artist = " " .. mpd_now.artist .. " " + title = mpd_now.title .. " " + mpdicon:set_image(theme.widget_music_on) + widget:set_markup(markup.font(theme.font, markup("#FF8466", artist) .. " " .. title)) + elseif mpd_now.state == "pause" then + widget:set_markup(markup.font(theme.font, " mpd paused ")) + mpdicon:set_image(theme.widget_music_pause) + else + widget:set_text("") + mpdicon:set_image(theme.widget_music) + end + end +}) + +-- MEM +local memicon = wibox.widget.imagebox(theme.widget_mem) +local mem = lain.widget.mem({ + settings = function() + widget:set_markup(markup.font(theme.font, " " .. mem_now.used .. "MB ")) + end +}) + +-- CPU +local cpuicon = wibox.widget.imagebox(theme.widget_cpu) +local cpu = lain.widget.cpu({ + settings = function() + widget:set_markup(markup.font(theme.font, " " .. cpu_now.usage .. "% ")) + end +}) + +--[[ Coretemp (lm_sensors, per core) +local tempwidget = awful.widget.watch({awful.util.shell, '-c', 'sensors | grep Core'}, 30, +function(widget, stdout) + local temps = "" + for line in stdout:gmatch("[^\r\n]+") do + temps = temps .. line:match("+(%d+).*°C") .. "° " -- in Celsius + end + widget:set_markup(markup.font(theme.font, " " .. temps)) +end) +--]] +-- Coretemp (lain, average) +local temp = lain.widget.temp({ + settings = function() + widget:set_markup(markup.font(theme.font, " " .. coretemp_now .. "°C ")) + end +}) +--]] +local tempicon = wibox.widget.imagebox(theme.widget_temp) + +-- / fs +local fsicon = wibox.widget.imagebox(theme.widget_hdd) +theme.fs = lain.widget.fs({ + options = "--exclude-type=tmpfs", + notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "xos4 Terminus 10" }, + settings = function() + widget:set_markup(markup.font(theme.font, " " .. fs_now.available_gb .. "GB ")) + end +}) + +-- Battery +local baticon = wibox.widget.imagebox(theme.widget_battery) +local bat = lain.widget.bat({ + settings = function() + if bat_now.status ~= "N/A" then + if bat_now.ac_status == 1 then + widget:set_markup(markup.font(theme.font, " AC ")) + baticon:set_image(theme.widget_ac) + return + elseif not bat_now.perc and tonumber(bat_now.perc) <= 5 then + baticon:set_image(theme.widget_battery_empty) + elseif not bat_now.perc and tonumber(bat_now.perc) <= 15 then + baticon:set_image(theme.widget_battery_low) + else + baticon:set_image(theme.widget_battery) + end + widget:set_markup(markup.font(theme.font, " " .. bat_now.perc .. "% ")) + else + widget:set_markup() + baticon:set_image(theme.widget_ac) + end + end +}) + +-- Net +local neticon = wibox.widget.imagebox(theme.widget_net) +local net = lain.widget.net({ + settings = function() + widget:set_markup(markup.fontfg(theme.font, "#FEFEFE", " " .. net_now.received .. " ↓↑ " .. net_now.sent .. " ")) + end +}) + +-- Separators +local arrow = separators.arrow_left + +function theme.powerline_rl(cr, width, height) + local arrow_depth, offset = height/2, 0 + + -- Avoid going out of the (potential) clip area + if arrow_depth < 0 then + width = width + 2*arrow_depth + offset = -arrow_depth + end + + cr:move_to(offset + arrow_depth , 0 ) + cr:line_to(offset + width , 0 ) + cr:line_to(offset + width - arrow_depth , height/2 ) + cr:line_to(offset + width , height ) + cr:line_to(offset + arrow_depth , height ) + cr:line_to(offset , height/2 ) + + cr:close_path() +end + +local function pl(widget, bgcolor, padding) + return wibox.container.background(wibox.container.margin(widget, 16, 16), bgcolor, theme.powerline_rl) +end + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.util.taglayout) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 16, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + --spr, + s.mytaglist, + s.mypromptbox, + spr, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + wibox.container.margin(scissors, 4, 8), + --[[ using shapes + pl(wibox.widget { mpdicon, theme.mpd.widget, layout = wibox.layout.align.horizontal }, "#343434"), + pl(task, "#343434"), + --pl(wibox.widget { mailicon, mail and mail.widget, layout = wibox.layout.align.horizontal }, "#343434"), + pl(wibox.widget { memicon, mem.widget, layout = wibox.layout.align.horizontal }, "#777E76"), + pl(wibox.widget { cpuicon, cpu.widget, layout = wibox.layout.align.horizontal }, "#4B696D"), + pl(wibox.widget { tempicon, temp.widget, layout = wibox.layout.align.horizontal }, "#4B3B51"), + pl(wibox.widget { fsicon, theme.fs.widget, layout = wibox.layout.align.horizontal }, "#CB755B"), + pl(wibox.widget { baticon, bat.widget, layout = wibox.layout.align.horizontal }, "#8DAA9A"), + pl(wibox.widget { neticon, net.widget, layout = wibox.layout.align.horizontal }, "#C0C0A2"), + pl(binclock.widget, "#777E76"), + --]] + -- using separators + arrow(theme.bg_normal, "#343434"), + wibox.container.background(wibox.container.margin(wibox.widget { mailicon, mail and mail.widget, layout = wibox.layout.align.horizontal }, 4, 7), "#343434"), + arrow("#343434", theme.bg_normal), + wibox.container.background(wibox.container.margin(wibox.widget { mpdicon, theme.mpd.widget, layout = wibox.layout.align.horizontal }, 3, 6), theme.bg_focus), + arrow(theme.bg_normal, "#343434"), + wibox.container.background(wibox.container.margin(task, 3, 7), "#343434"), + arrow("#343434", "#777E76"), + wibox.container.background(wibox.container.margin(wibox.widget { memicon, mem.widget, layout = wibox.layout.align.horizontal }, 2, 3), "#777E76"), + arrow("#777E76", "#4B696D"), + wibox.container.background(wibox.container.margin(wibox.widget { cpuicon, cpu.widget, layout = wibox.layout.align.horizontal }, 3, 4), "#4B696D"), + arrow("#4B696D", "#4B3B51"), + wibox.container.background(wibox.container.margin(wibox.widget { tempicon, temp.widget, layout = wibox.layout.align.horizontal }, 4, 4), "#4B3B51"), + arrow("#4B3B51", "#CB755B"), + wibox.container.background(wibox.container.margin(wibox.widget { fsicon, theme.fs.widget, layout = wibox.layout.align.horizontal }, 3, 3), "#CB755B"), + arrow("#CB755B", "#8DAA9A"), + wibox.container.background(wibox.container.margin(wibox.widget { baticon, bat.widget, layout = wibox.layout.align.horizontal }, 3, 3), "#8DAA9A"), + arrow("#8DAA9A", "#C0C0A2"), + wibox.container.background(wibox.container.margin(wibox.widget { nil, neticon, net.widget, layout = wibox.layout.align.horizontal }, 3, 3), "#C0C0A2"), + arrow("#C0C0A2", "#777E76"), + wibox.container.background(wibox.container.margin(binclock.widget, 4, 8), "#777E76"), + arrow("#777E76", "alpha"), + --]] + s.mylayoutbox, + }, + } +end + +return theme diff --git a/awesome/themes/powerarrow/wall.png b/awesome/themes/powerarrow/wall.png new file mode 100644 index 0000000..0419309 Binary files /dev/null and b/awesome/themes/powerarrow/wall.png differ diff --git a/awesome/themes/rainbow/icons/awesome.png b/awesome/themes/rainbow/icons/awesome.png new file mode 100644 index 0000000..bd2bff1 Binary files /dev/null and b/awesome/themes/rainbow/icons/awesome.png differ diff --git a/awesome/themes/rainbow/icons/square_sel.png b/awesome/themes/rainbow/icons/square_sel.png new file mode 100644 index 0000000..532719f Binary files /dev/null and b/awesome/themes/rainbow/icons/square_sel.png differ diff --git a/awesome/themes/rainbow/icons/square_unsel.png b/awesome/themes/rainbow/icons/square_unsel.png new file mode 100644 index 0000000..72dea5b Binary files /dev/null and b/awesome/themes/rainbow/icons/square_unsel.png differ diff --git a/awesome/themes/rainbow/icons/submenu.png b/awesome/themes/rainbow/icons/submenu.png new file mode 100644 index 0000000..26ab82a Binary files /dev/null and b/awesome/themes/rainbow/icons/submenu.png differ diff --git a/awesome/themes/rainbow/theme.lua b/awesome/themes/rainbow/theme.lua new file mode 100644 index 0000000..7408736 --- /dev/null +++ b/awesome/themes/rainbow/theme.lua @@ -0,0 +1,274 @@ + +--[[ + + Rainbow Awesome WM theme 2.0 + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv } + +local theme = {} +theme.default_dir = require("awful.util").get_themes_dir() .. "default" +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/rainbow" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "Misc Tamsyn 10.5" +theme.fg_normal = "#9E9E9E" +theme.fg_focus = "#EBEBFF" +theme.bg_normal = "#242424" +theme.bg_focus = "#242424" +theme.fg_urgent = "#000000" +theme.bg_urgent = "#FFFFFF" +theme.border_width = 1 +theme.border_normal = "#242424" +theme.border_focus = "#EBEBFF" +theme.taglist_fg_focus = "#EDEFFF" +theme.taglist_bg_focus = "#242424" +theme.menu_height = 16 +theme.menu_width = 140 +theme.ocol = "" +theme.tasklist_sticky = theme.ocol .. "[S]" +theme.tasklist_ontop = theme.ocol .. "[T]" +theme.tasklist_floating = theme.ocol .. "[F]" +theme.tasklist_maximized_horizontal = theme.ocol .. "[M] " +theme.tasklist_maximized_vertical = "" +theme.tasklist_disable_icon = true +theme.awesome_icon = theme.dir .."/icons/awesome.png" +theme.menu_submenu_icon = theme.dir .."/icons/submenu.png" +theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.useless_gap = 8 +theme.layout_txt_tile = "[t]" +theme.layout_txt_tileleft = "[l]" +theme.layout_txt_tilebottom = "[b]" +theme.layout_txt_tiletop = "[tt]" +theme.layout_txt_fairv = "[fv]" +theme.layout_txt_fairh = "[fh]" +theme.layout_txt_spiral = "[s]" +theme.layout_txt_dwindle = "[d]" +theme.layout_txt_max = "[m]" +theme.layout_txt_fullscreen = "[F]" +theme.layout_txt_magnifier = "[M]" +theme.layout_txt_floating = "[*]" +theme.titlebar_close_button_normal = theme.default_dir.."/titlebar/close_normal.png" +theme.titlebar_close_button_focus = theme.default_dir.."/titlebar/close_focus.png" +theme.titlebar_minimize_button_normal = theme.default_dir.."/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = theme.default_dir.."/titlebar/minimize_focus.png" +theme.titlebar_ontop_button_normal_inactive = theme.default_dir.."/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = theme.default_dir.."/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = theme.default_dir.."/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = theme.default_dir.."/titlebar/ontop_focus_active.png" +theme.titlebar_sticky_button_normal_inactive = theme.default_dir.."/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = theme.default_dir.."/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = theme.default_dir.."/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = theme.default_dir.."/titlebar/sticky_focus_active.png" +theme.titlebar_floating_button_normal_inactive = theme.default_dir.."/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = theme.default_dir.."/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = theme.default_dir.."/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = theme.default_dir.."/titlebar/floating_focus_active.png" +theme.titlebar_maximized_button_normal_inactive = theme.default_dir.."/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = theme.default_dir.."/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = theme.default_dir.."/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = theme.default_dir.."/titlebar/maximized_focus_active.png" + +-- lain related +theme.layout_txt_cascade = "[cascade]" +theme.layout_txt_cascadetile = "[cascadetile]" +theme.layout_txt_centerwork = "[centerwork]" +theme.layout_txt_termfair = "[termfair]" +theme.layout_txt_centerfair = "[centerfair]" + +local markup = lain.util.markup +local white = theme.fg_focus +local gray = theme.fg_normal + +-- Textclock +local mytextclock = wibox.widget.textclock(markup(white, " %H:%M ")) +mytextclock.font = theme.font + +-- Calendar +lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + font = "Misc Tamsyn 11", + fg = white, + bg = theme.bg_normal + } +}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + mail_notification_preset.fg = white + + mail = "" + count = "" + + if mailcount > 0 then + mail = "Mail " + count = mailcount .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, mail) .. markup(white, count))) + end +}) +]] + +-- MPD +theme.mpd = lain.widget.mpd({ + settings = function() + mpd_notification_preset.fg = white + + artist = mpd_now.artist .. " " + title = mpd_now.title .. " " + + if mpd_now.state == "pause" then + artist = "mpd " + title = "paused " + elseif mpd_now.state == "stop" then + artist = "" + title = "" + end + + widget:set_markup(markup.font(theme.font, markup(gray, artist) .. markup(white, title))) + end +}) + +-- /home fs +theme.fs = lain.widget.fs({ + partition = "/home", + options = "--exclude-type=tmpfs", + notification_preset = { fg = white, bg = theme.bg_normal, font = "Misc Tamsyn 10.5" }, + settings = function() + hdd = "" + p = "" + + if tonumber(fs_now.used) >= 90 then + hdd = " Hdd " + p = fs_now.used .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, hdd) .. markup(white, p))) + end +}) + +-- ALSA volume bar +theme.volume = lain.widget.alsabar({ + ticks = true, width = 67, + notification_preset = { font = theme.font } +}) +theme.volume.tooltip.wibox.fg = theme.fg_focus +theme.volume.tooltip.wibox.font = theme.font +theme.volume.bar:buttons(awful.util.table.join ( + awful.button({}, 1, function() + awful.spawn.with_shell(string.format("%s -e alsamixer", terminal)) + end), + awful.button({}, 2, function() + awful.spawn(string.format("%s set %s 100%%", theme.volume.cmd, theme.volume.channel)) + theme.volume.update() + end), + awful.button({}, 3, function() + awful.spawn(string.format("%s set %s toggle", theme.volume.cmd, theme.volume.togglechannel or theme.volume.channel)) + theme.volume.update() + end), + awful.button({}, 4, function() + awful.spawn(string.format("%s set %s 1%%+", theme.volume.cmd, theme.volume.channel)) + theme.volume.update() + end), + awful.button({}, 5, function() + awful.spawn(string.format("%s set %s 1%%-", theme.volume.cmd, theme.volume.channel)) + theme.volume.update() + end) +)) +local volumebg = wibox.container.background(theme.volume.bar, "#585858", gears.shape.rectangle) +local volumewidget = wibox.container.margin(volumebg, 7, 7, 5, 5) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) + notification_preset = { font = theme.font, fg = white } +}) + +-- Separators +local first = wibox.widget.textbox(markup.font("Misc Tamsyn 4", " ")) +local spr = wibox.widget.textbox(' ') + +local function update_txt_layoutbox(s) + -- Writes a string representation of the current layout in a textbox widget + local txt_l = theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))] or "" + s.mytxtlayoutbox:set_text(txt_l) +end + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + + -- Textual layoutbox + s.mytxtlayoutbox = wibox.widget.textbox(theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))]) + awful.tag.attached_connect_signal(s, "property::selected", function () update_txt_layoutbox(s) end) + awful.tag.attached_connect_signal(s, "property::layout", function () update_txt_layoutbox(s) end) + s.mytxtlayoutbox:buttons(awful.util.table.join( + awful.button({}, 1, function() awful.layout.inc(1) end), + awful.button({}, 3, function() awful.layout.inc(-1) end), + awful.button({}, 4, function() awful.layout.inc(1) end), + awful.button({}, 5, function() awful.layout.inc(-1) end))) + + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 18, bg = theme.bg_normal, fg = theme.fg_normal }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + first, + s.mytaglist, + spr, + s.mytxtlayoutbox, + --spr, + s.mypromptbox, + spr, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + spr, + theme.mpd.widget, + --mail.widget, + theme.fs.widget, + volumewidget, + mytextclock, + }, + } +end + +return theme diff --git a/awesome/themes/rainbow/wall.png b/awesome/themes/rainbow/wall.png new file mode 100644 index 0000000..edb2052 Binary files /dev/null and b/awesome/themes/rainbow/wall.png differ diff --git a/awesome/themes/steamburn/icons/awesome.png b/awesome/themes/steamburn/icons/awesome.png new file mode 100644 index 0000000..a1fdc1c Binary files /dev/null and b/awesome/themes/steamburn/icons/awesome.png differ diff --git a/awesome/themes/steamburn/icons/square_sel.png b/awesome/themes/steamburn/icons/square_sel.png new file mode 100644 index 0000000..2bcabb8 Binary files /dev/null and b/awesome/themes/steamburn/icons/square_sel.png differ diff --git a/awesome/themes/steamburn/icons/square_unsel.png b/awesome/themes/steamburn/icons/square_unsel.png new file mode 100644 index 0000000..604d68b Binary files /dev/null and b/awesome/themes/steamburn/icons/square_unsel.png differ diff --git a/awesome/themes/steamburn/icons/submenu.png b/awesome/themes/steamburn/icons/submenu.png new file mode 100644 index 0000000..12b97c6 Binary files /dev/null and b/awesome/themes/steamburn/icons/submenu.png differ diff --git a/awesome/themes/steamburn/theme.lua b/awesome/themes/steamburn/theme.lua new file mode 100644 index 0000000..40c7d52 --- /dev/null +++ b/awesome/themes/steamburn/theme.lua @@ -0,0 +1,271 @@ + +--[[ + + Steamburn Awesome WM theme 3.0 + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local os = { getenv = os.getenv } + +local theme = {} +theme.zenburn_dir = require("awful.util").get_themes_dir() .. "zenburn" +theme.dir = os.getenv("HOME") .. "/.config/awesome/themes/steamburn" +theme.wallpaper = theme.dir .. "/wall.png" +theme.font = "Misc Tamsyn 10.5" +theme.fg_normal = "#e2ccb0" +theme.fg_focus = "#d88166" +theme.fg_urgent = "#CC9393" +theme.bg_normal = "#140c0b" +theme.bg_focus = "#140c0b" +theme.bg_urgent = "#2a1f1e" +theme.border_width = 1 +theme.border_normal = "#302627" +theme.border_focus = "#c2745b" +theme.border_marked = "#CC9393" +theme.taglist_fg_focus = "#d88166" +theme.tasklist_bg_focus = "#140c0b" +theme.tasklist_fg_focus = "#d88166" +theme.taglist_squares_sel = theme.dir .. "/icons/square_sel.png" +theme.taglist_squares_unsel = theme.dir .. "/icons/square_unsel.png" +theme.menu_height = 16 +theme.menu_width = 140 +theme.awesome_icon = theme.dir .."/icons/awesome.png" +theme.menu_submenu_icon = theme.dir .. "/icons/submenu.png" +theme.layout_txt_tile = "[t]" +theme.layout_txt_tileleft = "[l]" +theme.layout_txt_tilebottom = "[b]" +theme.layout_txt_tiletop = "[tt]" +theme.layout_txt_fairv = "[fv]" +theme.layout_txt_fairh = "[fh]" +theme.layout_txt_spiral = "[s]" +theme.layout_txt_dwindle = "[d]" +theme.layout_txt_max = "[m]" +theme.layout_txt_fullscreen = "[F]" +theme.layout_txt_magnifier = "[M]" +theme.layout_txt_floating = "[|]" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 0 +theme.titlebar_close_button_normal = theme.zenburn_dir.."/titlebar/close_normal.png" +theme.titlebar_close_button_focus = theme.zenburn_dir.."/titlebar/close_focus.png" +theme.titlebar_minimize_button_normal = theme.zenburn_dir.."/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = theme.zenburn_dir.."/titlebar/minimize_focus.png" +theme.titlebar_ontop_button_normal_inactive = theme.zenburn_dir.."/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = theme.zenburn_dir.."/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = theme.zenburn_dir.."/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = theme.zenburn_dir.."/titlebar/ontop_focus_active.png" +theme.titlebar_sticky_button_normal_inactive = theme.zenburn_dir.."/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = theme.zenburn_dir.."/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = theme.zenburn_dir.."/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = theme.zenburn_dir.."/titlebar/sticky_focus_active.png" +theme.titlebar_floating_button_normal_inactive = theme.zenburn_dir.."/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = theme.zenburn_dir.."/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = theme.zenburn_dir.."/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = theme.zenburn_dir.."/titlebar/floating_focus_active.png" +theme.titlebar_maximized_button_normal_inactive = theme.zenburn_dir.."/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = theme.zenburn_dir.."/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = theme.zenburn_dir.."/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = theme.zenburn_dir.."/titlebar/maximized_focus_active.png" + +-- lain related +theme.layout_txt_termfair = "[termfair]" +theme.layout_txt_centerfair = "[centerfair]" + +local markup = lain.util.markup +local gray = "#94928F" + +-- Textclock +local mytextclock = wibox.widget.textclock(" %H:%M ") +mytextclock.font = theme.font + +-- Calendar +lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + font = "Misc Tamsyn 11", + fg = theme.fg_normal, + bg = theme.bg_normal + } +}) + +--[[ Mail IMAP check +-- commented because it needs to be set before use +local mail = lain.widget.imap({ + timeout = 180, + server = "server", + mail = "mail", + password = "keyring get mail", + settings = function() + mail = "" + count = "" + + if mailcount > 0 then + mail = "Mail " + count = mailcount .. " " + end + + widget:set_markup(markup(gray, mail) .. count) + end +}) +--]] + +-- MPD +theme.mpd = lain.widget.mpd({ + settings = function() + artist = mpd_now.artist .. " " + title = mpd_now.title .. " " + + if mpd_now.state == "pause" then + artist = "mpd " + title = "paused " + elseif mpd_now.state == "stop" then + artist = "" + title = "" + end + + widget:set_markup(markup.font(theme.font, markup(gray, artist) .. title)) + end +}) + +-- CPU +local cpu = lain.widget.sysload({ + settings = function() + widget:set_markup(markup.font(theme.font, markup(gray, " Cpu ") .. load_1 .. " ")) + end +}) + +-- MEM +local mem = lain.widget.mem({ + settings = function() + widget:set_markup(markup.font(theme.font, markup(gray, " Mem ") .. mem_now.used .. " ")) + end +}) + +-- /home fs +theme.fs = lain.widget.fs({ + options = "--exclude-type=tmpfs", + partition = "/home", + notification_preset = { fg = theme.fg_normal, bg = theme.bg_normal, font = "Misc Tamsyn 10.5" }, +}) + +-- Battery +local bat = lain.widget.bat({ + settings = function() + local perc = bat_now.perc + if bat_now.ac_status == 1 then perc = "Plug" end + widget:set_markup(markup.font(theme.font, markup(gray, " Bat ") .. perc .. " ")) + end +}) + +-- Net checker +local net = lain.widget.net({ + settings = function() + if net_now.state == "up" then net_state = "On" + else net_state = "Off" end + widget:set_markup(markup.font(theme.font, markup(gray, " Net ") .. net_state .. " ")) + end +}) + +-- ALSA volume +theme.volume = lain.widget.alsa({ + settings = function() + header = " Vol " + vlevel = volume_now.level + + if volume_now.status == "off" then + vlevel = vlevel .. "M " + else + vlevel = vlevel .. " " + end + + widget:set_markup(markup.font(theme.font, markup(gray, header) .. vlevel)) + end +}) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) +}) + +-- Separators +local first = wibox.widget.textbox(markup.font("Misc Tamsyn 4", " ")) +local spr = wibox.widget.textbox(' ') + +local function update_txt_layoutbox(s) + -- Writes a string representation of the current layout in a textbox widget + local txt_l = theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))] or "" + s.mytxtlayoutbox:set_text(txt_l) +end + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + + -- Textual layoutbox + s.mytxtlayoutbox = wibox.widget.textbox(theme["layout_txt_" .. awful.layout.getname(awful.layout.get(s))]) + awful.tag.attached_connect_signal(s, "property::selected", function () update_txt_layoutbox(s) end) + awful.tag.attached_connect_signal(s, "property::layout", function () update_txt_layoutbox(s) end) + s.mytxtlayoutbox:buttons(awful.util.table.join( + awful.button({}, 1, function() awful.layout.inc(1) end), + awful.button({}, 3, function() awful.layout.inc(-1) end), + awful.button({}, 4, function() awful.layout.inc(1) end), + awful.button({}, 5, function() awful.layout.inc(-1) end))) + + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, awful.util.tasklist_buttons) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 18 }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + first, + s.mytaglist, + spr, + s.mytxtlayoutbox, + --spr, + s.mypromptbox, + spr, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.widget.systray(), + spr, + theme.mpd.widget, + --mail.widget, + cpu.widget, + mem.widget, + bat.widget, + net.widget, + theme.volume.widget, + mytextclock + }, + } +end + +return theme diff --git a/awesome/themes/steamburn/wall.png b/awesome/themes/steamburn/wall.png new file mode 100644 index 0000000..7bd404d Binary files /dev/null and b/awesome/themes/steamburn/wall.png differ diff --git a/awesome/themes/vertex/icons/awesome.png b/awesome/themes/vertex/icons/awesome.png new file mode 100644 index 0000000..7bb940d Binary files /dev/null and b/awesome/themes/vertex/icons/awesome.png differ diff --git a/awesome/themes/vertex/icons/bat-000-charging.png b/awesome/themes/vertex/icons/bat-000-charging.png new file mode 100644 index 0000000..f225aa1 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-000-charging.png differ diff --git a/awesome/themes/vertex/icons/bat-000.png b/awesome/themes/vertex/icons/bat-000.png new file mode 100644 index 0000000..a87a68e Binary files /dev/null and b/awesome/themes/vertex/icons/bat-000.png differ diff --git a/awesome/themes/vertex/icons/bat-020-charging.png b/awesome/themes/vertex/icons/bat-020-charging.png new file mode 100644 index 0000000..30efa91 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-020-charging.png differ diff --git a/awesome/themes/vertex/icons/bat-020.png b/awesome/themes/vertex/icons/bat-020.png new file mode 100644 index 0000000..40fdef5 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-020.png differ diff --git a/awesome/themes/vertex/icons/bat-040-charging.png b/awesome/themes/vertex/icons/bat-040-charging.png new file mode 100644 index 0000000..0f3962a Binary files /dev/null and b/awesome/themes/vertex/icons/bat-040-charging.png differ diff --git a/awesome/themes/vertex/icons/bat-040.png b/awesome/themes/vertex/icons/bat-040.png new file mode 100644 index 0000000..6eb007d Binary files /dev/null and b/awesome/themes/vertex/icons/bat-040.png differ diff --git a/awesome/themes/vertex/icons/bat-060-charging.png b/awesome/themes/vertex/icons/bat-060-charging.png new file mode 100644 index 0000000..2a8e115 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-060-charging.png differ diff --git a/awesome/themes/vertex/icons/bat-060.png b/awesome/themes/vertex/icons/bat-060.png new file mode 100644 index 0000000..5883885 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-060.png differ diff --git a/awesome/themes/vertex/icons/bat-080-charging.png b/awesome/themes/vertex/icons/bat-080-charging.png new file mode 100644 index 0000000..225fa2e Binary files /dev/null and b/awesome/themes/vertex/icons/bat-080-charging.png differ diff --git a/awesome/themes/vertex/icons/bat-080.png b/awesome/themes/vertex/icons/bat-080.png new file mode 100644 index 0000000..d3fb971 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-080.png differ diff --git a/awesome/themes/vertex/icons/bat-100-charging.png b/awesome/themes/vertex/icons/bat-100-charging.png new file mode 100644 index 0000000..03262cd Binary files /dev/null and b/awesome/themes/vertex/icons/bat-100-charging.png differ diff --git a/awesome/themes/vertex/icons/bat-100.png b/awesome/themes/vertex/icons/bat-100.png new file mode 100644 index 0000000..81831c8 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-100.png differ diff --git a/awesome/themes/vertex/icons/bat-charged.png b/awesome/themes/vertex/icons/bat-charged.png new file mode 100644 index 0000000..3446740 Binary files /dev/null and b/awesome/themes/vertex/icons/bat-charged.png differ diff --git a/awesome/themes/vertex/icons/ethernet-connected.png b/awesome/themes/vertex/icons/ethernet-connected.png new file mode 100644 index 0000000..6c2c214 Binary files /dev/null and b/awesome/themes/vertex/icons/ethernet-connected.png differ diff --git a/awesome/themes/vertex/icons/ethernet-disconnected.png b/awesome/themes/vertex/icons/ethernet-disconnected.png new file mode 100644 index 0000000..9ce5d23 Binary files /dev/null and b/awesome/themes/vertex/icons/ethernet-disconnected.png differ diff --git a/awesome/themes/vertex/icons/panel.png b/awesome/themes/vertex/icons/panel.png new file mode 100644 index 0000000..2f429e5 Binary files /dev/null and b/awesome/themes/vertex/icons/panel.png differ diff --git a/awesome/themes/vertex/icons/square_sel.png b/awesome/themes/vertex/icons/square_sel.png new file mode 100644 index 0000000..c17eb50 Binary files /dev/null and b/awesome/themes/vertex/icons/square_sel.png differ diff --git a/awesome/themes/vertex/icons/square_unsel.png b/awesome/themes/vertex/icons/square_unsel.png new file mode 100644 index 0000000..f599d0b Binary files /dev/null and b/awesome/themes/vertex/icons/square_unsel.png differ diff --git a/awesome/themes/vertex/icons/volume-high.png b/awesome/themes/vertex/icons/volume-high.png new file mode 100644 index 0000000..a714794 Binary files /dev/null and b/awesome/themes/vertex/icons/volume-high.png differ diff --git a/awesome/themes/vertex/icons/volume-low.png b/awesome/themes/vertex/icons/volume-low.png new file mode 100644 index 0000000..3810a3a Binary files /dev/null and b/awesome/themes/vertex/icons/volume-low.png differ diff --git a/awesome/themes/vertex/icons/volume-medium.png b/awesome/themes/vertex/icons/volume-medium.png new file mode 100644 index 0000000..16f932b Binary files /dev/null and b/awesome/themes/vertex/icons/volume-medium.png differ diff --git a/awesome/themes/vertex/icons/volume-muted-blocked.png b/awesome/themes/vertex/icons/volume-muted-blocked.png new file mode 100644 index 0000000..5d049ce Binary files /dev/null and b/awesome/themes/vertex/icons/volume-muted-blocked.png differ diff --git a/awesome/themes/vertex/icons/volume-muted.png b/awesome/themes/vertex/icons/volume-muted.png new file mode 100644 index 0000000..b6b276b Binary files /dev/null and b/awesome/themes/vertex/icons/volume-muted.png differ diff --git a/awesome/themes/vertex/icons/volume-off.png b/awesome/themes/vertex/icons/volume-off.png new file mode 100644 index 0000000..8a6d8c5 Binary files /dev/null and b/awesome/themes/vertex/icons/volume-off.png differ diff --git a/awesome/themes/vertex/icons/wireless-disconnected.png b/awesome/themes/vertex/icons/wireless-disconnected.png new file mode 100644 index 0000000..8a2bc24 Binary files /dev/null and b/awesome/themes/vertex/icons/wireless-disconnected.png differ diff --git a/awesome/themes/vertex/icons/wireless-full.png b/awesome/themes/vertex/icons/wireless-full.png new file mode 100644 index 0000000..29d40a6 Binary files /dev/null and b/awesome/themes/vertex/icons/wireless-full.png differ diff --git a/awesome/themes/vertex/icons/wireless-high.png b/awesome/themes/vertex/icons/wireless-high.png new file mode 100644 index 0000000..b3622ec Binary files /dev/null and b/awesome/themes/vertex/icons/wireless-high.png differ diff --git a/awesome/themes/vertex/icons/wireless-low.png b/awesome/themes/vertex/icons/wireless-low.png new file mode 100644 index 0000000..1d06946 Binary files /dev/null and b/awesome/themes/vertex/icons/wireless-low.png differ diff --git a/awesome/themes/vertex/icons/wireless-medium.png b/awesome/themes/vertex/icons/wireless-medium.png new file mode 100644 index 0000000..6bd0ec5 Binary files /dev/null and b/awesome/themes/vertex/icons/wireless-medium.png differ diff --git a/awesome/themes/vertex/icons/wireless-none.png b/awesome/themes/vertex/icons/wireless-none.png new file mode 100644 index 0000000..0d43617 Binary files /dev/null and b/awesome/themes/vertex/icons/wireless-none.png differ diff --git a/awesome/themes/vertex/theme.lua b/awesome/themes/vertex/theme.lua new file mode 100644 index 0000000..5746bcd --- /dev/null +++ b/awesome/themes/vertex/theme.lua @@ -0,0 +1,463 @@ + +--[[ + + Vertex Awesome WM theme + github.com/copycat-killer + +--]] + +local gears = require("gears") +local lain = require("lain") +local awful = require("awful") +local wibox = require("wibox") +local math, string, tag, tonumber, type, os = math, string, tag, tonumber, type, os + +local theme = {} +theme.default_dir = require("awful.util").get_themes_dir() .. "default" +theme.icon_dir = os.getenv("HOME") .. "/.config/awesome/themes/vertex/icons" +theme.wallpaper = os.getenv("HOME") .. "/.config/awesome/themes/vertex/wall.png" +theme.font = "Roboto Bold 10" +theme.taglist_font = "FontAwesome 17" +theme.fg_normal = "#FFFFFF" +theme.fg_focus = "#6A95EB" +theme.bg_focus = "#303030" +theme.bg_normal = "#242424" +theme.fg_urgent = "#CC9393" +theme.bg_urgent = "#006B8E" +theme.border_width = 4 +theme.border_normal = "#252525" +theme.border_focus = "#7CA2EE" +theme.tooltip_border_color = theme.fg_focus +theme.tooltip_border_width = theme.border_width +theme.menu_height = 24 +theme.menu_width = 140 +theme.awesome_icon = theme.icon_dir .. "/awesome.png" +theme.taglist_squares_sel = theme.icon_dir .. "/square_sel.png" +theme.taglist_squares_unsel = theme.icon_dir .. "/square_unsel.png" +theme.panelbg = theme.icon_dir .. "/panel.png" +theme.bat000charging = theme.icon_dir .. "/bat-000-charging.png" +theme.bat000 = theme.icon_dir .. "/bat-000.png" +theme.bat020charging = theme.icon_dir .. "/bat-020-charging.png" +theme.bat020 = theme.icon_dir .. "/bat-020.png" +theme.bat040charging = theme.icon_dir .. "/bat-040-charging.png" +theme.bat040 = theme.icon_dir .. "/bat-040.png" +theme.bat060charging = theme.icon_dir .. "/bat-060-charging.png" +theme.bat060 = theme.icon_dir .. "/bat-060.png" +theme.bat080charging = theme.icon_dir .. "/bat-080-charging.png" +theme.bat080 = theme.icon_dir .. "/bat-080.png" +theme.bat100charging = theme.icon_dir .. "/bat-100-charging.png" +theme.bat100 = theme.icon_dir .. "/bat-100.png" +theme.batcharged = theme.icon_dir .. "/bat-charged.png" +theme.ethon = theme.icon_dir .. "/ethernet-connected.png" +theme.ethoff = theme.icon_dir .. "/ethernet-disconnected.png" +theme.volhigh = theme.icon_dir .. "/volume-high.png" +theme.vollow = theme.icon_dir .. "/volume-low.png" +theme.volmed = theme.icon_dir .. "/volume-medium.png" +theme.volmutedblocked = theme.icon_dir .. "/volume-muted-blocked.png" +theme.volmuted = theme.icon_dir .. "/volume-muted.png" +theme.voloff = theme.icon_dir .. "/volume-off.png" +theme.wifidisc = theme.icon_dir .. "/wireless-disconnected.png" +theme.wififull = theme.icon_dir .. "/wireless-full.png" +theme.wifihigh = theme.icon_dir .. "/wireless-high.png" +theme.wifilow = theme.icon_dir .. "/wireless-low.png" +theme.wifimed = theme.icon_dir .. "/wireless-medium.png" +theme.wifinone = theme.icon_dir .. "/wireless-none.png" +theme.layout_fairh = theme.default_dir.."/layouts/fairhw.png" +theme.layout_fairv = theme.default_dir.."/layouts/fairvw.png" +theme.layout_floating = theme.default_dir.."/layouts/floatingw.png" +theme.layout_magnifier = theme.default_dir.."/layouts/magnifierw.png" +theme.layout_max = theme.default_dir.."/layouts/maxw.png" +theme.layout_fullscreen = theme.default_dir.."/layouts/fullscreenw.png" +theme.layout_tilebottom = theme.default_dir.."/layouts/tilebottomw.png" +theme.layout_tileleft = theme.default_dir.."/layouts/tileleftw.png" +theme.layout_tile = theme.default_dir.."/layouts/tilew.png" +theme.layout_tiletop = theme.default_dir.."/layouts/tiletopw.png" +theme.layout_spiral = theme.default_dir.."/layouts/spiralw.png" +theme.layout_dwindle = theme.default_dir.."/layouts/dwindlew.png" +theme.layout_cornernw = theme.default_dir.."/layouts/cornernww.png" +theme.layout_cornerne = theme.default_dir.."/layouts/cornernew.png" +theme.layout_cornersw = theme.default_dir.."/layouts/cornersww.png" +theme.layout_cornerse = theme.default_dir.."/layouts/cornersew.png" +theme.tasklist_plain_task_name = true +theme.tasklist_disable_icon = true +theme.useless_gap = 10 +theme.titlebar_close_button_normal = theme.default_dir.."/titlebar/close_normal.png" +theme.titlebar_close_button_focus = theme.default_dir.."/titlebar/close_focus.png" +theme.titlebar_minimize_button_normal = theme.default_dir.."/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = theme.default_dir.."/titlebar/minimize_focus.png" +theme.titlebar_ontop_button_normal_inactive = theme.default_dir.."/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = theme.default_dir.."/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = theme.default_dir.."/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = theme.default_dir.."/titlebar/ontop_focus_active.png" +theme.titlebar_sticky_button_normal_inactive = theme.default_dir.."/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = theme.default_dir.."/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = theme.default_dir.."/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = theme.default_dir.."/titlebar/sticky_focus_active.png" +theme.titlebar_floating_button_normal_inactive = theme.default_dir.."/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = theme.default_dir.."/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = theme.default_dir.."/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = theme.default_dir.."/titlebar/floating_focus_active.png" +theme.titlebar_maximized_button_normal_inactive = theme.default_dir.."/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = theme.default_dir.."/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = theme.default_dir.."/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = theme.default_dir.."/titlebar/maximized_focus_active.png" + +-- http://fontawesome.io/cheatsheet +awful.util.tagnames = { " ", " ", " ", " ", " ", " ", " ", " ", " " } + +local markup = lain.util.markup + +-- Clock +--os.setlocale(os.getenv("LANG")) -- to localize the clock +local mytextclock = wibox.widget.textclock(markup("#FFFFFF", "%a %d %b, %H:%M")) +mytextclock.font = theme.font +lain.widget.calendar({ + attach_to = { mytextclock }, + notification_preset = { + fg = "#FFFFFF", + bg = theme.bg_normal, + position = "top_middle", + font = "Monospace 10" + } +}) + +-- Battery +local baticon = wibox.widget.imagebox(theme.bat000) +local battooltip = awful.tooltip({ + objects = { baticon }, + margin_leftright = 15, + margin_topbottom = 12 +}) +battooltip.wibox.fg = theme.fg_normal +battooltip.textbox.font = theme.font +battooltip.timeout = 0 +battooltip:set_shape(function(cr, width, height) + gears.shape.infobubble(cr, width, height, corner_radius, arrow_size, width - 35) +end) +local bat = lain.widget.bat({ + settings = function() + local index, perc = "bat", tonumber(bat_now.perc) or 0 + + if perc <= 7 then + index = index .. "000" + elseif perc <= 20 then + index = index .. "020" + elseif perc <= 40 then + index = index .. "040" + elseif perc <= 60 then + index = index .. "060" + elseif perc <= 80 then + index = index .. "080" + elseif perc <= 100 then + index = index .. "100" + end + + if bat_now.ac_status == 1 then + index = index .. "charging" + end + + baticon:set_image(theme[index]) + battooltip:set_markup(string.format("\n%s%%, %s", perc, bat_now.time)) + end +}) + +-- MPD +theme.mpd = lain.widget.mpd({ + music_dir = "/mnt/storage/Downloads/Music", + settings = function() + if mpd_now.state == "play" then + title = mpd_now.title + artist = " " .. mpd_now.artist .. " " + elseif mpd_now.state == "pause" then + title = "mpd " + artist = "paused " + else + title = "" + artist = "" + end + + widget:set_markup(markup.font(theme.font, title .. markup(theme.fg_focus, artist))) + end +}) + +-- ALSA volume +local volicon = wibox.widget.imagebox() +theme.volume = lain.widget.alsabar({ + --togglechannel = "IEC958,3", + notification_preset = { font = "Monospace 12", fg = theme.fg_normal }, + settings = function() + local index, perc = "", tonumber(volume_now.level) or 0 + + if volume_now.status == "off" then + index = "volmutedblocked" + else + if perc <= 5 then + index = "volmuted" + elseif perc <= 25 then + index = "vollow" + elseif perc <= 75 then + index = "volmed" + else + index = "volhigh" + end + end + + volicon:set_image(theme[index]) + end +}) +volicon:buttons(awful.util.table.join ( + awful.button({}, 1, function() + awful.spawn.with_shell(string.format("%s -e alsamixer", awful.util.terminal)) + end), + awful.button({}, 2, function() + awful.spawn(string.format("%s set %s 100%%", theme.volume.cmd, theme.volume.channel)) + theme.volume.notify() + end), + awful.button({}, 3, function() + awful.spawn(string.format("%s set %s toggle", theme.volume.cmd, theme.volume.togglechannel or theme.volume.channel)) + theme.volume.notify() + end), + awful.button({}, 4, function() + awful.spawn(string.format("%s set %s 1%%+", theme.volume.cmd, theme.volume.channel)) + theme.volume.notify() + end), + awful.button({}, 5, function() + awful.spawn(string.format("%s set %s 1%%-", theme.volume.cmd, theme.volume.channel)) + theme.volume.notify() + end) +)) + +-- Wifi carrier and signal strength +local wificon = wibox.widget.imagebox() +local wifitooltip = awful.tooltip({ + objects = { wificon }, + margin_leftright = 15, + margin_topbottom = 15 +}) +wifitooltip.wibox.fg = theme.fg_normal +wifitooltip.textbox.font = theme.font +wifitooltip.timeout = 0 +wifitooltip:set_shape(function(cr, width, height) + gears.shape.infobubble(cr, width, height, corner_radius, arrow_size, width - 120) +end) +local mywifisig = awful.widget.watch( + { awful.util.shell, "-c", "awk 'NR==3 {printf(\"%d-%.0f\\n\",$2, $3*10/7)}' /proc/net/wireless; iw dev wlan0 link" }, + 2, + function(widget, stdout) + local carrier, perc = stdout:match("(%d)-(%d+)") + local tiptext = stdout:gsub("(%d)-(%d+)", ""):gsub("%s+$", "") + + if carrier == "1" then + wificon:set_image(theme.wifidisc) + wifitooltip:set_markup("No carrier") + else + perc = tonumber(perc) + if perc <= 5 then + wificon:set_image(theme.wifinone) + elseif perc <= 25 then + wificon:set_image(theme.wifilow) + elseif perc <= 50 then + wificon:set_image(theme.wifimed) + elseif perc <= 75 then + wificon:set_image(theme.wifihigh) + else + wificon:set_image(theme.wififull) + end + wifitooltip:set_markup(tiptext) + end + end +) +wificon:connect_signal("button::press", function() awful.spawn(string.format("%s -e wavemon", awful.util.terminal)) end) + +-- Weather +theme.weather = lain.widget.weather({ + city_id = 2643743, -- placeholder (London) + notification_preset = { font = "Monospace 10" }, + settings = function() + units = math.floor(weather_now["main"]["temp"]) + widget:set_markup(" " .. markup.font(theme.font, units .. "°C") .. " ") + end +}) + +-- Launcher +local mylauncher = awful.widget.button({image = theme.awesome_icon}) +mylauncher:connect_signal("button::press", function() awful.util.mymainmenu:toggle() end) + +-- Separators +local space = wibox.widget.textbox(" ") +local rspace1 = wibox.widget.textbox() +local rspace0 = wibox.widget.textbox() +local rspace2 = wibox.widget.textbox() +local rspace3 = wibox.widget.textbox() +local tspace1 = wibox.widget.textbox() +tspace1.forced_width = 18 +rspace1.forced_width = 16 +rspace0.forced_width = 18 +rspace2.forced_width = 19 +rspace3.forced_width = 21 + +local lspace1 = wibox.widget.textbox() +local lspace2 = wibox.widget.textbox() +local lspace3 = wibox.widget.textbox() +lspace1.forced_height = 18 +lspace2.forced_height = 10 +lspace3.forced_height = 16 + +local barcolor = gears.color({ + type = "linear", + from = { 0, 46 }, + to = { 46, 46 }, + stops = { {0, theme.bg_focus}, {0.9, "#457be7"} } +}) + +local barcolor2 = gears.color({ + type = "linear", + from = { 0, 46 }, + to = { 46, 46 }, + stops = { {0, "#323232"}, {1, theme.bg_normal} } +}) + +local dockshape = function(cr, width, height) + gears.shape.partially_rounded_rect(cr, width, height, false, true, true, false, 6) +end + +function theme.vertical_wibox(s) + -- Create the vertical wibox + s.dockheight = (40 * s.workarea.height)/100 + + s.myleftwibox = wibox({ screen = s, x=0, y=s.workarea.height/2 - s.dockheight/2, width = 6, height = s.dockheight, fg = theme.fg_normal, bg = barcolor2, ontop = true, visible = true, type = "dock" }) + + if s.index > 1 and s.myleftwibox.y == 0 then + s.myleftwibox.y = screen[1].myleftwibox.y + end + + -- Add widgets to the vertical wibox + s.myleftwibox:setup { + layout = wibox.layout.align.vertical, + { + layout = wibox.layout.fixed.vertical, + lspace1, + s.mytaglist, + lspace2, + s.layoutb, + wibox.container.margin(mylauncher, 5, 8, 13, 0), + }, + } + + -- Add toggling functionalities + s.docktimer = gears.timer{ timeout = 2 } + s.docktimer:connect_signal("timeout", function() + local s = awful.screen.focused() + s.myleftwibox.width = 6 + s.layoutb.visible = false + mylauncher.visible = false + if s.docktimer.started then + s.docktimer:stop() + end + end) + tag.connect_signal("property::selected", function(t) + local s = t.screen or awful.screen.focused() + s.myleftwibox.width = 46 + s.layoutb.visible = true + mylauncher.visible = true + gears.surface.apply_shape_bounding(s.myleftwibox, dockshape) + if not s.docktimer.started then + s.docktimer:start() + end + end) + + s.myleftwibox:connect_signal("mouse::leave", function() + local s = awful.screen.focused() + s.myleftwibox.width = 6 + s.layoutb.visible = false + mylauncher.visible = false + end) + + s.myleftwibox:connect_signal("mouse::enter", function() + local s = awful.screen.focused() + s.myleftwibox.width = 46 + s.layoutb.visible = true + mylauncher.visible = true + gears.surface.apply_shape_bounding(s.myleftwibox, dockshape) + end) +end + + +function theme.at_screen_connect(s) + -- Quake application + s.quake = lain.util.quake({ app = awful.util.terminal, border = theme.border_width }) + + -- If wallpaper is a function, call it with the screen + local wallpaper = theme.wallpaper + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + + -- Tags + awful.tag(awful.util.tagnames, s, awful.layout.layouts) + + -- Create a promptbox for each screen + s.mypromptbox = awful.widget.prompt() + s.mypromptbox.bg = "#00000000" + + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + s.layoutb = wibox.container.margin(s.mylayoutbox, 8, 11, 3, 3) + + -- Create a taglist widget + s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, awful.util.taglist_buttons, { + font = theme.taglist_font, + shape = gears.shape.rectangle, + spacing = 10, + square_unsel = theme.square_unsel, + bg_focus = barcolor + }, nil, wibox.layout.fixed.vertical()) + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.focused, awful.util.tasklist_buttons, { bg_focus = "#00000000" }) + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s, height = 25, bg = gears.color.create_png_pattern(theme.panelbg) }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + s.mypromptbox, + tspace1, + wibox.container.constraint(s.mytasklist, "exact", s.workarea.width/2.6), + }, + { -- Middle widgets + layout = wibox.layout.flex.horizontal, + space, + mytextclock, + }, + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + wibox.container.constraint(wibox.widget { nil, nil, theme.mpd.widget, layout = wibox.layout.align.horizontal }, "exact", s.workarea.width/3), + rspace0, + theme.weather.icon, + theme.weather.widget, + rspace1, + wificon, + rspace0, + volicon, + rspace2, + baticon, + rspace3, + wibox.widget.systray(), + }, + } + + gears.timer.delayed_call(theme.vertical_wibox, s) +end + +return theme diff --git a/awesome/themes/vertex/wall.png b/awesome/themes/vertex/wall.png new file mode 100644 index 0000000..28e1df1 Binary files /dev/null and b/awesome/themes/vertex/wall.png differ diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..0e7ac8a --- /dev/null +++ b/install.sh @@ -0,0 +1,18 @@ +#!/bin/sh +DIR=$(dirname $0) + +# install vimplug +curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + +# install oh-my-zsh +sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" + +# symlinks +ln -s $DIR/.vimrc ~/.vimrc +ln -s $DIR/.ideavimrc ~/.ideavimrc +ln -s $DIR/.gitconfig ~/.gitconfig +ln -s $DIR/.zshrc ~/.zshrc +ln -s $DIR/.Xdefaults ~/.Xdefaults + +ln -s $DIR/awesome/ ~/.config/awesome/