mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-11-04 01:16:35 +00:00 
			
		
		
		
	Remove everything and restart blank
This commit removes all files currently present in the repo, to prepare for a start from a nothing. This is done due to my recent migration from X11 to Wayland, which has rendered most of these config files no longer releveant. I've currently been tracking my dotfiles in a separate repository, in hopes to get it to a state where it would be mergable here, but that turned out to be much more difficult than I anticipated, and I think it will be much easier to simply move over the history from this temporary repository I've been using onto this one. That however requires a start from a clean point, which this commit creates.
This commit is contained in:
		
							parent
							
								
									eadb37961b
								
							
						
					
					
						commit
						b912871070
					
				
					 206 changed files with 0 additions and 15683 deletions
				
			
		
							
								
								
									
										32
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,32 +0,0 @@
 | 
			
		|||
# Byte-compiled / optimized / DLL Files
 | 
			
		||||
__pycache__/
 | 
			
		||||
*.py[cod]
 | 
			
		||||
*$py.class
 | 
			
		||||
 | 
			
		||||
# Virtual Envornments
 | 
			
		||||
.venv
 | 
			
		||||
venv/
 | 
			
		||||
env/
 | 
			
		||||
 | 
			
		||||
# Editor project settings
 | 
			
		||||
## VSCode
 | 
			
		||||
.vscode/
 | 
			
		||||
## PyCharm intellij
 | 
			
		||||
.idea/
 | 
			
		||||
## repl.it
 | 
			
		||||
.replit
 | 
			
		||||
## Spyder
 | 
			
		||||
.spyproject/
 | 
			
		||||
.spyderproject/
 | 
			
		||||
 | 
			
		||||
# Ignore ds store files
 | 
			
		||||
.DS_STORE
 | 
			
		||||
 | 
			
		||||
# Personal TODO files
 | 
			
		||||
TODO
 | 
			
		||||
 | 
			
		||||
# Ignore backups
 | 
			
		||||
backup/
 | 
			
		||||
 | 
			
		||||
# Ignore git downloads
 | 
			
		||||
download/
 | 
			
		||||
							
								
								
									
										18
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,18 +0,0 @@
 | 
			
		|||
[submodule "root/usr/local/src/dmenu"]
 | 
			
		||||
    path = "root/usr/local/src/dmenu"
 | 
			
		||||
    url = "https://github.com/ItsDrike/dmenu"
 | 
			
		||||
[submodule "root/usr/share/zsh/site-functions/zsh-autosuggestions"]
 | 
			
		||||
    path = "root/usr/share/zsh/site-functions/zsh-autosuggestions"
 | 
			
		||||
    url = "https://github.com/zsh-users/zsh-autosuggestions"
 | 
			
		||||
[submodule "root/usr/share/zsh/site-functions/zsh-syntax-highlighting"]
 | 
			
		||||
    path = "root/usr/share/zsh/site-functions/zsh-syntax-highlighting"
 | 
			
		||||
    url = "https://github.com/zsh-users/zsh-syntax-highlighting"
 | 
			
		||||
#[submodule "root/usr/share/zsh/site-functions/zsh-you-should-use"]
 | 
			
		||||
#    path = "root/usr/share/zsh/site-functions/zsh-you-should-use"
 | 
			
		||||
#    url = "https://github.com/MichaelAquilina/zsh-you-should-use"
 | 
			
		||||
[submodule "root/usr/local/src/z.lua"]
 | 
			
		||||
    path = "root/usr/local/src/z.lua"
 | 
			
		||||
    url = "https://github.com/skywind3000/z.lua"
 | 
			
		||||
[submodule "home/.config/nvim"]
 | 
			
		||||
	path = home/.config/nvim
 | 
			
		||||
	url = https://github.com/ItsDrike/Stellar-Nvim
 | 
			
		||||
							
								
								
									
										674
									
								
								LICENSE
									
										
									
									
									
								
							
							
						
						
									
										674
									
								
								LICENSE
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,674 +0,0 @@
 | 
			
		|||
                    GNU GENERAL PUBLIC LICENSE
 | 
			
		||||
                       Version 3, 29 June 2007
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
			
		||||
 of this license document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
                            Preamble
 | 
			
		||||
 | 
			
		||||
  The GNU General Public License is a free, copyleft license for
 | 
			
		||||
software and other kinds of works.
 | 
			
		||||
 | 
			
		||||
  The licenses for most software and other practical works are designed
 | 
			
		||||
to take away your freedom to share and change the works.  By contrast,
 | 
			
		||||
the GNU General Public License is intended to guarantee your freedom to
 | 
			
		||||
share and change all versions of a program--to make sure it remains free
 | 
			
		||||
software for all its users.  We, the Free Software Foundation, use the
 | 
			
		||||
GNU General Public License for most of our software; it applies also to
 | 
			
		||||
any other work released this way by its authors.  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
 | 
			
		||||
them 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 prevent others from denying you
 | 
			
		||||
these rights or asking you to surrender the rights.  Therefore, you have
 | 
			
		||||
certain responsibilities if you distribute copies of the software, or if
 | 
			
		||||
you modify it: responsibilities to respect the freedom of others.
 | 
			
		||||
 | 
			
		||||
  For example, if you distribute copies of such a program, whether
 | 
			
		||||
gratis or for a fee, you must pass on to the recipients the same
 | 
			
		||||
freedoms that you received.  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.
 | 
			
		||||
 | 
			
		||||
  Developers that use the GNU GPL protect your rights with two steps:
 | 
			
		||||
(1) assert copyright on the software, and (2) offer you this License
 | 
			
		||||
giving you legal permission to copy, distribute and/or modify it.
 | 
			
		||||
 | 
			
		||||
  For the developers' and authors' protection, the GPL clearly explains
 | 
			
		||||
that there is no warranty for this free software.  For both users' and
 | 
			
		||||
authors' sake, the GPL requires that modified versions be marked as
 | 
			
		||||
changed, so that their problems will not be attributed erroneously to
 | 
			
		||||
authors of previous versions.
 | 
			
		||||
 | 
			
		||||
  Some devices are designed to deny users access to install or run
 | 
			
		||||
modified versions of the software inside them, although the manufacturer
 | 
			
		||||
can do so.  This is fundamentally incompatible with the aim of
 | 
			
		||||
protecting users' freedom to change the software.  The systematic
 | 
			
		||||
pattern of such abuse occurs in the area of products for individuals to
 | 
			
		||||
use, which is precisely where it is most unacceptable.  Therefore, we
 | 
			
		||||
have designed this version of the GPL to prohibit the practice for those
 | 
			
		||||
products.  If such problems arise substantially in other domains, we
 | 
			
		||||
stand ready to extend this provision to those domains in future versions
 | 
			
		||||
of the GPL, as needed to protect the freedom of users.
 | 
			
		||||
 | 
			
		||||
  Finally, every program is threatened constantly by software patents.
 | 
			
		||||
States should not allow patents to restrict development and use of
 | 
			
		||||
software on general-purpose computers, but in those that do, we wish to
 | 
			
		||||
avoid the special danger that patents applied to a free program could
 | 
			
		||||
make it effectively proprietary.  To prevent this, the GPL assures that
 | 
			
		||||
patents cannot be used to render the program non-free.
 | 
			
		||||
 | 
			
		||||
  The precise terms and conditions for copying, distribution and
 | 
			
		||||
modification follow.
 | 
			
		||||
 | 
			
		||||
                       TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
  0. Definitions.
 | 
			
		||||
 | 
			
		||||
  "This License" refers to version 3 of the GNU General Public License.
 | 
			
		||||
 | 
			
		||||
  "Copyright" also means copyright-like laws that apply to other kinds of
 | 
			
		||||
works, such as semiconductor masks.
 | 
			
		||||
 | 
			
		||||
  "The Program" refers to any copyrightable work licensed under this
 | 
			
		||||
License.  Each licensee is addressed as "you".  "Licensees" and
 | 
			
		||||
"recipients" may be individuals or organizations.
 | 
			
		||||
 | 
			
		||||
  To "modify" a work means to copy from or adapt all or part of the work
 | 
			
		||||
in a fashion requiring copyright permission, other than the making of an
 | 
			
		||||
exact copy.  The resulting work is called a "modified version" of the
 | 
			
		||||
earlier work or a work "based on" the earlier work.
 | 
			
		||||
 | 
			
		||||
  A "covered work" means either the unmodified Program or a work based
 | 
			
		||||
on the Program.
 | 
			
		||||
 | 
			
		||||
  To "propagate" a work means to do anything with it that, without
 | 
			
		||||
permission, would make you directly or secondarily liable for
 | 
			
		||||
infringement under applicable copyright law, except executing it on a
 | 
			
		||||
computer or modifying a private copy.  Propagation includes copying,
 | 
			
		||||
distribution (with or without modification), making available to the
 | 
			
		||||
public, and in some countries other activities as well.
 | 
			
		||||
 | 
			
		||||
  To "convey" a work means any kind of propagation that enables other
 | 
			
		||||
parties to make or receive copies.  Mere interaction with a user through
 | 
			
		||||
a computer network, with no transfer of a copy, is not conveying.
 | 
			
		||||
 | 
			
		||||
  An interactive user interface displays "Appropriate Legal Notices"
 | 
			
		||||
to the extent that it includes a convenient and prominently visible
 | 
			
		||||
feature that (1) displays an appropriate copyright notice, and (2)
 | 
			
		||||
tells the user that there is no warranty for the work (except to the
 | 
			
		||||
extent that warranties are provided), that licensees may convey the
 | 
			
		||||
work under this License, and how to view a copy of this License.  If
 | 
			
		||||
the interface presents a list of user commands or options, such as a
 | 
			
		||||
menu, a prominent item in the list meets this criterion.
 | 
			
		||||
 | 
			
		||||
  1. Source Code.
 | 
			
		||||
 | 
			
		||||
  The "source code" for a work means the preferred form of the work
 | 
			
		||||
for making modifications to it.  "Object code" means any non-source
 | 
			
		||||
form of a work.
 | 
			
		||||
 | 
			
		||||
  A "Standard Interface" means an interface that either is an official
 | 
			
		||||
standard defined by a recognized standards body, or, in the case of
 | 
			
		||||
interfaces specified for a particular programming language, one that
 | 
			
		||||
is widely used among developers working in that language.
 | 
			
		||||
 | 
			
		||||
  The "System Libraries" of an executable work include anything, other
 | 
			
		||||
than the work as a whole, that (a) is included in the normal form of
 | 
			
		||||
packaging a Major Component, but which is not part of that Major
 | 
			
		||||
Component, and (b) serves only to enable use of the work with that
 | 
			
		||||
Major Component, or to implement a Standard Interface for which an
 | 
			
		||||
implementation is available to the public in source code form.  A
 | 
			
		||||
"Major Component", in this context, means a major essential component
 | 
			
		||||
(kernel, window system, and so on) of the specific operating system
 | 
			
		||||
(if any) on which the executable work runs, or a compiler used to
 | 
			
		||||
produce the work, or an object code interpreter used to run it.
 | 
			
		||||
 | 
			
		||||
  The "Corresponding Source" for a work in object code form means all
 | 
			
		||||
the source code needed to generate, install, and (for an executable
 | 
			
		||||
work) run the object code and to modify the work, including scripts to
 | 
			
		||||
control those activities.  However, it does not include the work's
 | 
			
		||||
System Libraries, or general-purpose tools or generally available free
 | 
			
		||||
programs which are used unmodified in performing those activities but
 | 
			
		||||
which are not part of the work.  For example, Corresponding Source
 | 
			
		||||
includes interface definition files associated with source files for
 | 
			
		||||
the work, and the source code for shared libraries and dynamically
 | 
			
		||||
linked subprograms that the work is specifically designed to require,
 | 
			
		||||
such as by intimate data communication or control flow between those
 | 
			
		||||
subprograms and other parts of the work.
 | 
			
		||||
 | 
			
		||||
  The Corresponding Source need not include anything that users
 | 
			
		||||
can regenerate automatically from other parts of the Corresponding
 | 
			
		||||
Source.
 | 
			
		||||
 | 
			
		||||
  The Corresponding Source for a work in source code form is that
 | 
			
		||||
same work.
 | 
			
		||||
 | 
			
		||||
  2. Basic Permissions.
 | 
			
		||||
 | 
			
		||||
  All rights granted under this License are granted for the term of
 | 
			
		||||
copyright on the Program, and are irrevocable provided the stated
 | 
			
		||||
conditions are met.  This License explicitly affirms your unlimited
 | 
			
		||||
permission to run the unmodified Program.  The output from running a
 | 
			
		||||
covered work is covered by this License only if the output, given its
 | 
			
		||||
content, constitutes a covered work.  This License acknowledges your
 | 
			
		||||
rights of fair use or other equivalent, as provided by copyright law.
 | 
			
		||||
 | 
			
		||||
  You may make, run and propagate covered works that you do not
 | 
			
		||||
convey, without conditions so long as your license otherwise remains
 | 
			
		||||
in force.  You may convey covered works to others for the sole purpose
 | 
			
		||||
of having them make modifications exclusively for you, or provide you
 | 
			
		||||
with facilities for running those works, provided that you comply with
 | 
			
		||||
the terms of this License in conveying all material for which you do
 | 
			
		||||
not control copyright.  Those thus making or running the covered works
 | 
			
		||||
for you must do so exclusively on your behalf, under your direction
 | 
			
		||||
and control, on terms that prohibit them from making any copies of
 | 
			
		||||
your copyrighted material outside their relationship with you.
 | 
			
		||||
 | 
			
		||||
  Conveying under any other circumstances is permitted solely under
 | 
			
		||||
the conditions stated below.  Sublicensing is not allowed; section 10
 | 
			
		||||
makes it unnecessary.
 | 
			
		||||
 | 
			
		||||
  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 | 
			
		||||
 | 
			
		||||
  No covered work shall be deemed part of an effective technological
 | 
			
		||||
measure under any applicable law fulfilling obligations under article
 | 
			
		||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
 | 
			
		||||
similar laws prohibiting or restricting circumvention of such
 | 
			
		||||
measures.
 | 
			
		||||
 | 
			
		||||
  When you convey a covered work, you waive any legal power to forbid
 | 
			
		||||
circumvention of technological measures to the extent such circumvention
 | 
			
		||||
is effected by exercising rights under this License with respect to
 | 
			
		||||
the covered work, and you disclaim any intention to limit operation or
 | 
			
		||||
modification of the work as a means of enforcing, against the work's
 | 
			
		||||
users, your or third parties' legal rights to forbid circumvention of
 | 
			
		||||
technological measures.
 | 
			
		||||
 | 
			
		||||
  4. Conveying Verbatim Copies.
 | 
			
		||||
 | 
			
		||||
  You may convey 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;
 | 
			
		||||
keep intact all notices stating that this License and any
 | 
			
		||||
non-permissive terms added in accord with section 7 apply to the code;
 | 
			
		||||
keep intact all notices of the absence of any warranty; and give all
 | 
			
		||||
recipients a copy of this License along with the Program.
 | 
			
		||||
 | 
			
		||||
  You may charge any price or no price for each copy that you convey,
 | 
			
		||||
and you may offer support or warranty protection for a fee.
 | 
			
		||||
 | 
			
		||||
  5. Conveying Modified Source Versions.
 | 
			
		||||
 | 
			
		||||
  You may convey a work based on the Program, or the modifications to
 | 
			
		||||
produce it from the Program, in the form of source code under the
 | 
			
		||||
terms of section 4, provided that you also meet all of these conditions:
 | 
			
		||||
 | 
			
		||||
    a) The work must carry prominent notices stating that you modified
 | 
			
		||||
    it, and giving a relevant date.
 | 
			
		||||
 | 
			
		||||
    b) The work must carry prominent notices stating that it is
 | 
			
		||||
    released under this License and any conditions added under section
 | 
			
		||||
    7.  This requirement modifies the requirement in section 4 to
 | 
			
		||||
    "keep intact all notices".
 | 
			
		||||
 | 
			
		||||
    c) You must license the entire work, as a whole, under this
 | 
			
		||||
    License to anyone who comes into possession of a copy.  This
 | 
			
		||||
    License will therefore apply, along with any applicable section 7
 | 
			
		||||
    additional terms, to the whole of the work, and all its parts,
 | 
			
		||||
    regardless of how they are packaged.  This License gives no
 | 
			
		||||
    permission to license the work in any other way, but it does not
 | 
			
		||||
    invalidate such permission if you have separately received it.
 | 
			
		||||
 | 
			
		||||
    d) If the work has interactive user interfaces, each must display
 | 
			
		||||
    Appropriate Legal Notices; however, if the Program has interactive
 | 
			
		||||
    interfaces that do not display Appropriate Legal Notices, your
 | 
			
		||||
    work need not make them do so.
 | 
			
		||||
 | 
			
		||||
  A compilation of a covered work with other separate and independent
 | 
			
		||||
works, which are not by their nature extensions of the covered work,
 | 
			
		||||
and which are not combined with it such as to form a larger program,
 | 
			
		||||
in or on a volume of a storage or distribution medium, is called an
 | 
			
		||||
"aggregate" if the compilation and its resulting copyright are not
 | 
			
		||||
used to limit the access or legal rights of the compilation's users
 | 
			
		||||
beyond what the individual works permit.  Inclusion of a covered work
 | 
			
		||||
in an aggregate does not cause this License to apply to the other
 | 
			
		||||
parts of the aggregate.
 | 
			
		||||
 | 
			
		||||
  6. Conveying Non-Source Forms.
 | 
			
		||||
 | 
			
		||||
  You may convey a covered work in object code form under the terms
 | 
			
		||||
of sections 4 and 5, provided that you also convey the
 | 
			
		||||
machine-readable Corresponding Source under the terms of this License,
 | 
			
		||||
in one of these ways:
 | 
			
		||||
 | 
			
		||||
    a) Convey the object code in, or embodied in, a physical product
 | 
			
		||||
    (including a physical distribution medium), accompanied by the
 | 
			
		||||
    Corresponding Source fixed on a durable physical medium
 | 
			
		||||
    customarily used for software interchange.
 | 
			
		||||
 | 
			
		||||
    b) Convey the object code in, or embodied in, a physical product
 | 
			
		||||
    (including a physical distribution medium), accompanied by a
 | 
			
		||||
    written offer, valid for at least three years and valid for as
 | 
			
		||||
    long as you offer spare parts or customer support for that product
 | 
			
		||||
    model, to give anyone who possesses the object code either (1) a
 | 
			
		||||
    copy of the Corresponding Source for all the software in the
 | 
			
		||||
    product that is covered by this License, on a durable physical
 | 
			
		||||
    medium customarily used for software interchange, for a price no
 | 
			
		||||
    more than your reasonable cost of physically performing this
 | 
			
		||||
    conveying of source, or (2) access to copy the
 | 
			
		||||
    Corresponding Source from a network server at no charge.
 | 
			
		||||
 | 
			
		||||
    c) Convey individual copies of the object code with a copy of the
 | 
			
		||||
    written offer to provide the Corresponding Source.  This
 | 
			
		||||
    alternative is allowed only occasionally and noncommercially, and
 | 
			
		||||
    only if you received the object code with such an offer, in accord
 | 
			
		||||
    with subsection 6b.
 | 
			
		||||
 | 
			
		||||
    d) Convey the object code by offering access from a designated
 | 
			
		||||
    place (gratis or for a charge), and offer equivalent access to the
 | 
			
		||||
    Corresponding Source in the same way through the same place at no
 | 
			
		||||
    further charge.  You need not require recipients to copy the
 | 
			
		||||
    Corresponding Source along with the object code.  If the place to
 | 
			
		||||
    copy the object code is a network server, the Corresponding Source
 | 
			
		||||
    may be on a different server (operated by you or a third party)
 | 
			
		||||
    that supports equivalent copying facilities, provided you maintain
 | 
			
		||||
    clear directions next to the object code saying where to find the
 | 
			
		||||
    Corresponding Source.  Regardless of what server hosts the
 | 
			
		||||
    Corresponding Source, you remain obligated to ensure that it is
 | 
			
		||||
    available for as long as needed to satisfy these requirements.
 | 
			
		||||
 | 
			
		||||
    e) Convey the object code using peer-to-peer transmission, provided
 | 
			
		||||
    you inform other peers where the object code and Corresponding
 | 
			
		||||
    Source of the work are being offered to the general public at no
 | 
			
		||||
    charge under subsection 6d.
 | 
			
		||||
 | 
			
		||||
  A separable portion of the object code, whose source code is excluded
 | 
			
		||||
from the Corresponding Source as a System Library, need not be
 | 
			
		||||
included in conveying the object code work.
 | 
			
		||||
 | 
			
		||||
  A "User Product" is either (1) a "consumer product", which means any
 | 
			
		||||
tangible personal property which is normally used for personal, family,
 | 
			
		||||
or household purposes, or (2) anything designed or sold for incorporation
 | 
			
		||||
into a dwelling.  In determining whether a product is a consumer product,
 | 
			
		||||
doubtful cases shall be resolved in favor of coverage.  For a particular
 | 
			
		||||
product received by a particular user, "normally used" refers to a
 | 
			
		||||
typical or common use of that class of product, regardless of the status
 | 
			
		||||
of the particular user or of the way in which the particular user
 | 
			
		||||
actually uses, or expects or is expected to use, the product.  A product
 | 
			
		||||
is a consumer product regardless of whether the product has substantial
 | 
			
		||||
commercial, industrial or non-consumer uses, unless such uses represent
 | 
			
		||||
the only significant mode of use of the product.
 | 
			
		||||
 | 
			
		||||
  "Installation Information" for a User Product means any methods,
 | 
			
		||||
procedures, authorization keys, or other information required to install
 | 
			
		||||
and execute modified versions of a covered work in that User Product from
 | 
			
		||||
a modified version of its Corresponding Source.  The information must
 | 
			
		||||
suffice to ensure that the continued functioning of the modified object
 | 
			
		||||
code is in no case prevented or interfered with solely because
 | 
			
		||||
modification has been made.
 | 
			
		||||
 | 
			
		||||
  If you convey an object code work under this section in, or with, or
 | 
			
		||||
specifically for use in, a User Product, and the conveying occurs as
 | 
			
		||||
part of a transaction in which the right of possession and use of the
 | 
			
		||||
User Product is transferred to the recipient in perpetuity or for a
 | 
			
		||||
fixed term (regardless of how the transaction is characterized), the
 | 
			
		||||
Corresponding Source conveyed under this section must be accompanied
 | 
			
		||||
by the Installation Information.  But this requirement does not apply
 | 
			
		||||
if neither you nor any third party retains the ability to install
 | 
			
		||||
modified object code on the User Product (for example, the work has
 | 
			
		||||
been installed in ROM).
 | 
			
		||||
 | 
			
		||||
  The requirement to provide Installation Information does not include a
 | 
			
		||||
requirement to continue to provide support service, warranty, or updates
 | 
			
		||||
for a work that has been modified or installed by the recipient, or for
 | 
			
		||||
the User Product in which it has been modified or installed.  Access to a
 | 
			
		||||
network may be denied when the modification itself materially and
 | 
			
		||||
adversely affects the operation of the network or violates the rules and
 | 
			
		||||
protocols for communication across the network.
 | 
			
		||||
 | 
			
		||||
  Corresponding Source conveyed, and Installation Information provided,
 | 
			
		||||
in accord with this section must be in a format that is publicly
 | 
			
		||||
documented (and with an implementation available to the public in
 | 
			
		||||
source code form), and must require no special password or key for
 | 
			
		||||
unpacking, reading or copying.
 | 
			
		||||
 | 
			
		||||
  7. Additional Terms.
 | 
			
		||||
 | 
			
		||||
  "Additional permissions" are terms that supplement the terms of this
 | 
			
		||||
License by making exceptions from one or more of its conditions.
 | 
			
		||||
Additional permissions that are applicable to the entire Program shall
 | 
			
		||||
be treated as though they were included in this License, to the extent
 | 
			
		||||
that they are valid under applicable law.  If additional permissions
 | 
			
		||||
apply only to part of the Program, that part may be used separately
 | 
			
		||||
under those permissions, but the entire Program remains governed by
 | 
			
		||||
this License without regard to the additional permissions.
 | 
			
		||||
 | 
			
		||||
  When you convey a copy of a covered work, you may at your option
 | 
			
		||||
remove any additional permissions from that copy, or from any part of
 | 
			
		||||
it.  (Additional permissions may be written to require their own
 | 
			
		||||
removal in certain cases when you modify the work.)  You may place
 | 
			
		||||
additional permissions on material, added by you to a covered work,
 | 
			
		||||
for which you have or can give appropriate copyright permission.
 | 
			
		||||
 | 
			
		||||
  Notwithstanding any other provision of this License, for material you
 | 
			
		||||
add to a covered work, you may (if authorized by the copyright holders of
 | 
			
		||||
that material) supplement the terms of this License with terms:
 | 
			
		||||
 | 
			
		||||
    a) Disclaiming warranty or limiting liability differently from the
 | 
			
		||||
    terms of sections 15 and 16 of this License; or
 | 
			
		||||
 | 
			
		||||
    b) Requiring preservation of specified reasonable legal notices or
 | 
			
		||||
    author attributions in that material or in the Appropriate Legal
 | 
			
		||||
    Notices displayed by works containing it; or
 | 
			
		||||
 | 
			
		||||
    c) Prohibiting misrepresentation of the origin of that material, or
 | 
			
		||||
    requiring that modified versions of such material be marked in
 | 
			
		||||
    reasonable ways as different from the original version; or
 | 
			
		||||
 | 
			
		||||
    d) Limiting the use for publicity purposes of names of licensors or
 | 
			
		||||
    authors of the material; or
 | 
			
		||||
 | 
			
		||||
    e) Declining to grant rights under trademark law for use of some
 | 
			
		||||
    trade names, trademarks, or service marks; or
 | 
			
		||||
 | 
			
		||||
    f) Requiring indemnification of licensors and authors of that
 | 
			
		||||
    material by anyone who conveys the material (or modified versions of
 | 
			
		||||
    it) with contractual assumptions of liability to the recipient, for
 | 
			
		||||
    any liability that these contractual assumptions directly impose on
 | 
			
		||||
    those licensors and authors.
 | 
			
		||||
 | 
			
		||||
  All other non-permissive additional terms are considered "further
 | 
			
		||||
restrictions" within the meaning of section 10.  If the Program as you
 | 
			
		||||
received it, or any part of it, contains a notice stating that it is
 | 
			
		||||
governed by this License along with a term that is a further
 | 
			
		||||
restriction, you may remove that term.  If a license document contains
 | 
			
		||||
a further restriction but permits relicensing or conveying under this
 | 
			
		||||
License, you may add to a covered work material governed by the terms
 | 
			
		||||
of that license document, provided that the further restriction does
 | 
			
		||||
not survive such relicensing or conveying.
 | 
			
		||||
 | 
			
		||||
  If you add terms to a covered work in accord with this section, you
 | 
			
		||||
must place, in the relevant source files, a statement of the
 | 
			
		||||
additional terms that apply to those files, or a notice indicating
 | 
			
		||||
where to find the applicable terms.
 | 
			
		||||
 | 
			
		||||
  Additional terms, permissive or non-permissive, may be stated in the
 | 
			
		||||
form of a separately written license, or stated as exceptions;
 | 
			
		||||
the above requirements apply either way.
 | 
			
		||||
 | 
			
		||||
  8. Termination.
 | 
			
		||||
 | 
			
		||||
  You may not propagate or modify a covered work except as expressly
 | 
			
		||||
provided under this License.  Any attempt otherwise to propagate or
 | 
			
		||||
modify it is void, and will automatically terminate your rights under
 | 
			
		||||
this License (including any patent licenses granted under the third
 | 
			
		||||
paragraph of section 11).
 | 
			
		||||
 | 
			
		||||
  However, if you cease all violation of this License, then your
 | 
			
		||||
license from a particular copyright holder is reinstated (a)
 | 
			
		||||
provisionally, unless and until the copyright holder explicitly and
 | 
			
		||||
finally terminates your license, and (b) permanently, if the copyright
 | 
			
		||||
holder fails to notify you of the violation by some reasonable means
 | 
			
		||||
prior to 60 days after the cessation.
 | 
			
		||||
 | 
			
		||||
  Moreover, your license from a particular copyright holder is
 | 
			
		||||
reinstated permanently if the copyright holder notifies you of the
 | 
			
		||||
violation by some reasonable means, this is the first time you have
 | 
			
		||||
received notice of violation of this License (for any work) from that
 | 
			
		||||
copyright holder, and you cure the violation prior to 30 days after
 | 
			
		||||
your receipt of the notice.
 | 
			
		||||
 | 
			
		||||
  Termination of your rights under this section does not terminate the
 | 
			
		||||
licenses of parties who have received copies or rights from you under
 | 
			
		||||
this License.  If your rights have been terminated and not permanently
 | 
			
		||||
reinstated, you do not qualify to receive new licenses for the same
 | 
			
		||||
material under section 10.
 | 
			
		||||
 | 
			
		||||
  9. Acceptance Not Required for Having Copies.
 | 
			
		||||
 | 
			
		||||
  You are not required to accept this License in order to receive or
 | 
			
		||||
run a copy of the Program.  Ancillary propagation of a covered work
 | 
			
		||||
occurring solely as a consequence of using peer-to-peer transmission
 | 
			
		||||
to receive a copy likewise does not require acceptance.  However,
 | 
			
		||||
nothing other than this License grants you permission to propagate or
 | 
			
		||||
modify any covered work.  These actions infringe copyright if you do
 | 
			
		||||
not accept this License.  Therefore, by modifying or propagating a
 | 
			
		||||
covered work, you indicate your acceptance of this License to do so.
 | 
			
		||||
 | 
			
		||||
  10. Automatic Licensing of Downstream Recipients.
 | 
			
		||||
 | 
			
		||||
  Each time you convey a covered work, the recipient automatically
 | 
			
		||||
receives a license from the original licensors, to run, modify and
 | 
			
		||||
propagate that work, subject to this License.  You are not responsible
 | 
			
		||||
for enforcing compliance by third parties with this License.
 | 
			
		||||
 | 
			
		||||
  An "entity transaction" is a transaction transferring control of an
 | 
			
		||||
organization, or substantially all assets of one, or subdividing an
 | 
			
		||||
organization, or merging organizations.  If propagation of a covered
 | 
			
		||||
work results from an entity transaction, each party to that
 | 
			
		||||
transaction who receives a copy of the work also receives whatever
 | 
			
		||||
licenses to the work the party's predecessor in interest had or could
 | 
			
		||||
give under the previous paragraph, plus a right to possession of the
 | 
			
		||||
Corresponding Source of the work from the predecessor in interest, if
 | 
			
		||||
the predecessor has it or can get it with reasonable efforts.
 | 
			
		||||
 | 
			
		||||
  You may not impose any further restrictions on the exercise of the
 | 
			
		||||
rights granted or affirmed under this License.  For example, you may
 | 
			
		||||
not impose a license fee, royalty, or other charge for exercise of
 | 
			
		||||
rights granted under this License, and you may not initiate litigation
 | 
			
		||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
 | 
			
		||||
any patent claim is infringed by making, using, selling, offering for
 | 
			
		||||
sale, or importing the Program or any portion of it.
 | 
			
		||||
 | 
			
		||||
  11. Patents.
 | 
			
		||||
 | 
			
		||||
  A "contributor" is a copyright holder who authorizes use under this
 | 
			
		||||
License of the Program or a work on which the Program is based.  The
 | 
			
		||||
work thus licensed is called the contributor's "contributor version".
 | 
			
		||||
 | 
			
		||||
  A contributor's "essential patent claims" are all patent claims
 | 
			
		||||
owned or controlled by the contributor, whether already acquired or
 | 
			
		||||
hereafter acquired, that would be infringed by some manner, permitted
 | 
			
		||||
by this License, of making, using, or selling its contributor version,
 | 
			
		||||
but do not include claims that would be infringed only as a
 | 
			
		||||
consequence of further modification of the contributor version.  For
 | 
			
		||||
purposes of this definition, "control" includes the right to grant
 | 
			
		||||
patent sublicenses in a manner consistent with the requirements of
 | 
			
		||||
this License.
 | 
			
		||||
 | 
			
		||||
  Each contributor grants you a non-exclusive, worldwide, royalty-free
 | 
			
		||||
patent license under the contributor's essential patent claims, to
 | 
			
		||||
make, use, sell, offer for sale, import and otherwise run, modify and
 | 
			
		||||
propagate the contents of its contributor version.
 | 
			
		||||
 | 
			
		||||
  In the following three paragraphs, a "patent license" is any express
 | 
			
		||||
agreement or commitment, however denominated, not to enforce a patent
 | 
			
		||||
(such as an express permission to practice a patent or covenant not to
 | 
			
		||||
sue for patent infringement).  To "grant" such a patent license to a
 | 
			
		||||
party means to make such an agreement or commitment not to enforce a
 | 
			
		||||
patent against the party.
 | 
			
		||||
 | 
			
		||||
  If you convey a covered work, knowingly relying on a patent license,
 | 
			
		||||
and the Corresponding Source of the work is not available for anyone
 | 
			
		||||
to copy, free of charge and under the terms of this License, through a
 | 
			
		||||
publicly available network server or other readily accessible means,
 | 
			
		||||
then you must either (1) cause the Corresponding Source to be so
 | 
			
		||||
available, or (2) arrange to deprive yourself of the benefit of the
 | 
			
		||||
patent license for this particular work, or (3) arrange, in a manner
 | 
			
		||||
consistent with the requirements of this License, to extend the patent
 | 
			
		||||
license to downstream recipients.  "Knowingly relying" means you have
 | 
			
		||||
actual knowledge that, but for the patent license, your conveying the
 | 
			
		||||
covered work in a country, or your recipient's use of the covered work
 | 
			
		||||
in a country, would infringe one or more identifiable patents in that
 | 
			
		||||
country that you have reason to believe are valid.
 | 
			
		||||
 | 
			
		||||
  If, pursuant to or in connection with a single transaction or
 | 
			
		||||
arrangement, you convey, or propagate by procuring conveyance of, a
 | 
			
		||||
covered work, and grant a patent license to some of the parties
 | 
			
		||||
receiving the covered work authorizing them to use, propagate, modify
 | 
			
		||||
or convey a specific copy of the covered work, then the patent license
 | 
			
		||||
you grant is automatically extended to all recipients of the covered
 | 
			
		||||
work and works based on it.
 | 
			
		||||
 | 
			
		||||
  A patent license is "discriminatory" if it does not include within
 | 
			
		||||
the scope of its coverage, prohibits the exercise of, or is
 | 
			
		||||
conditioned on the non-exercise of one or more of the rights that are
 | 
			
		||||
specifically granted under this License.  You may not convey a covered
 | 
			
		||||
work if you are a party to an arrangement with a third party that is
 | 
			
		||||
in the business of distributing software, under which you make payment
 | 
			
		||||
to the third party based on the extent of your activity of conveying
 | 
			
		||||
the work, and under which the third party grants, to any of the
 | 
			
		||||
parties who would receive the covered work from you, a discriminatory
 | 
			
		||||
patent license (a) in connection with copies of the covered work
 | 
			
		||||
conveyed by you (or copies made from those copies), or (b) primarily
 | 
			
		||||
for and in connection with specific products or compilations that
 | 
			
		||||
contain the covered work, unless you entered into that arrangement,
 | 
			
		||||
or that patent license was granted, prior to 28 March 2007.
 | 
			
		||||
 | 
			
		||||
  Nothing in this License shall be construed as excluding or limiting
 | 
			
		||||
any implied license or other defenses to infringement that may
 | 
			
		||||
otherwise be available to you under applicable patent law.
 | 
			
		||||
 | 
			
		||||
  12. No Surrender of Others' Freedom.
 | 
			
		||||
 | 
			
		||||
  If 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 convey a
 | 
			
		||||
covered work so as to satisfy simultaneously your obligations under this
 | 
			
		||||
License and any other pertinent obligations, then as a consequence you may
 | 
			
		||||
not convey it at all.  For example, if you agree to terms that obligate you
 | 
			
		||||
to collect a royalty for further conveying from those to whom you convey
 | 
			
		||||
the Program, the only way you could satisfy both those terms and this
 | 
			
		||||
License would be to refrain entirely from conveying the Program.
 | 
			
		||||
 | 
			
		||||
  13. Use with the GNU Affero General Public License.
 | 
			
		||||
 | 
			
		||||
  Notwithstanding any other provision of this License, you have
 | 
			
		||||
permission to link or combine any covered work with a work licensed
 | 
			
		||||
under version 3 of the GNU Affero General Public License into a single
 | 
			
		||||
combined work, and to convey the resulting work.  The terms of this
 | 
			
		||||
License will continue to apply to the part which is the covered work,
 | 
			
		||||
but the special requirements of the GNU Affero General Public License,
 | 
			
		||||
section 13, concerning interaction through a network will apply to the
 | 
			
		||||
combination as such.
 | 
			
		||||
 | 
			
		||||
  14. Revised Versions of this License.
 | 
			
		||||
 | 
			
		||||
  The Free Software Foundation may publish revised and/or new versions of
 | 
			
		||||
the GNU 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 that a certain numbered version of the GNU General
 | 
			
		||||
Public License "or any later version" applies to it, you have the
 | 
			
		||||
option of following the terms and conditions either of that numbered
 | 
			
		||||
version or of any later version published by the Free Software
 | 
			
		||||
Foundation.  If the Program does not specify a version number of the
 | 
			
		||||
GNU General Public License, you may choose any version ever published
 | 
			
		||||
by the Free Software Foundation.
 | 
			
		||||
 | 
			
		||||
  If the Program specifies that a proxy can decide which future
 | 
			
		||||
versions of the GNU General Public License can be used, that proxy's
 | 
			
		||||
public statement of acceptance of a version permanently authorizes you
 | 
			
		||||
to choose that version for the Program.
 | 
			
		||||
 | 
			
		||||
  Later license versions may give you additional or different
 | 
			
		||||
permissions.  However, no additional obligations are imposed on any
 | 
			
		||||
author or copyright holder as a result of your choosing to follow a
 | 
			
		||||
later version.
 | 
			
		||||
 | 
			
		||||
  15. Disclaimer of Warranty.
 | 
			
		||||
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
  16. Limitation of Liability.
 | 
			
		||||
 | 
			
		||||
  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 | 
			
		||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
  17. Interpretation of Sections 15 and 16.
 | 
			
		||||
 | 
			
		||||
  If the disclaimer of warranty and limitation of liability provided
 | 
			
		||||
above cannot be given local legal effect according to their terms,
 | 
			
		||||
reviewing courts shall apply local law that most closely approximates
 | 
			
		||||
an absolute waiver of all civil liability in connection with the
 | 
			
		||||
Program, unless a warranty or assumption of liability accompanies a
 | 
			
		||||
copy of the Program in return for a fee.
 | 
			
		||||
 | 
			
		||||
                     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
 | 
			
		||||
state the exclusion of warranty; and each file should have at least
 | 
			
		||||
the "copyright" line and a pointer to where the full notice is found.
 | 
			
		||||
 | 
			
		||||
    <one line to give the program's name and a brief idea of what it does.>
 | 
			
		||||
    Copyright (C) <year>  <name of author>
 | 
			
		||||
 | 
			
		||||
    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 3 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, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
Also add information on how to contact you by electronic and paper mail.
 | 
			
		||||
 | 
			
		||||
  If the program does terminal interaction, make it output a short
 | 
			
		||||
notice like this when it starts in an interactive mode:
 | 
			
		||||
 | 
			
		||||
    <program>  Copyright (C) <year>  <name of author>
 | 
			
		||||
    This program 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, your program's commands
 | 
			
		||||
might be different; for a GUI interface, you would use an "about box".
 | 
			
		||||
 | 
			
		||||
  You should also get your employer (if you work as a programmer) or school,
 | 
			
		||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
 | 
			
		||||
For more information on this, and how to apply and follow the GNU GPL, see
 | 
			
		||||
<https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
  The GNU 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.  But first, please read
 | 
			
		||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
 | 
			
		||||
							
								
								
									
										100
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										100
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,100 +0,0 @@
 | 
			
		|||
# Dotfiles
 | 
			
		||||
 | 
			
		||||
These are my personal dotfiles. They're split into `home/` and `root/` folders where the home folder holds all files
 | 
			
		||||
that should be put directly into your `$HOME` directory, while all of the files in the root folder can be put directly
 | 
			
		||||
into `/`
 | 
			
		||||
 | 
			
		||||
You are highly advised to first go through these dotfiles yourself and adjust them to your liking.
 | 
			
		||||
 | 
			
		||||
## :warning: NOTICE :warning:
 | 
			
		||||
 | 
			
		||||
I'm currently in the process of migrating to Hyprland WM, running on wayland. This means that most of the config here
 | 
			
		||||
will need to be reworked. However since I'm still in the process of setting everything up, I haven't yet done this, and
 | 
			
		||||
so this repository still contains my older settings.
 | 
			
		||||
 | 
			
		||||
Until I settle on everything, since some people asked for my dotfiles, if you are interested in my wayland dotfiles,
 | 
			
		||||
I've created a temporary repository with these already in: <https://github.com/ItsDrike/temp-dotfiles>
 | 
			
		||||
 | 
			
		||||
However know that this repo might often get force-pushes, and it's very much gonna be deleted within a few weeks once I
 | 
			
		||||
get everything in order, at which point I'll migrate these settings here, and remove the outdated Xorg config.
 | 
			
		||||
(Obviously, you'll still be able to find the older versions in the git history, and I might create a tag or even a
 | 
			
		||||
branch pointing to this Xorg version).
 | 
			
		||||
 | 
			
		||||
## Sample images
 | 
			
		||||
 | 
			
		||||
- Custom prompt (defined [here](home/.config/shell/theme)).
 | 
			
		||||
  - Colorscheme showcase: 
 | 
			
		||||
  - Command timing showcase: 
 | 
			
		||||
- Neovim configuration written in lua: 
 | 
			
		||||
- Automatic unknown command package handler: 
 | 
			
		||||
- `lf` file manager previews with ueberzug: 
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
- Full fledged ZSH configuration without the need to rely on oh-my-zsh
 | 
			
		||||
  - oh-my-zsh configuration is also supported, but it is off by default, adjust [`.zshrc`](home/.config/zsh/.zshrc) to
 | 
			
		||||
    enable it
 | 
			
		||||
  - Even though enabling it is an option, it is not a necessary thing to do, oh-my-zsh has a lot of code that is mostly
 | 
			
		||||
    irrelevant and unused, these dotfiles give you the ability to completely avoid it, if you desire to do so
 | 
			
		||||
- Custom [prompt](home/.config/shell/theme), both for oh-my-zsh configuration or for standalone usage
 | 
			
		||||
- Custom [NVIM configuration](home/.config/nvim)
 | 
			
		||||
  - When you open nvim for the first time, it will automatically try to install Packer plugin manager
 | 
			
		||||
  - It is compatible with TTY usage, in which case the color support is downgraded and use of special fonts is
 | 
			
		||||
    disabled.
 | 
			
		||||
  - The configuration is split into multiple smaller files to keep everything clearn and avoid clutter in the main
 | 
			
		||||
    configuration file (`init.lua`). It also allows for us to quickly disable certain parts of the config.
 | 
			
		||||
  - The whole configuration is written in lua rather than vimscript. This allows us to do some nicer things, however
 | 
			
		||||
    it also means that this config will NOT work for regular vim, it's only meant to be used for neovim.
 | 
			
		||||
- Many handy [aliases](home/.config/shell/aliases) and [functions](home/.config/shell/functions) (likely too many, you
 | 
			
		||||
  should adjust that to your needs)
 | 
			
		||||
- [Many pre-defined environmental variables](home/.config/shell/environ), these include
 | 
			
		||||
  - XDG paths configuration to avoid too much cluttering in home directory
 | 
			
		||||
  - Colorful man pages using LESS_TERMCAP, or if `bat` is installed, using it as MANPAGER
 | 
			
		||||
- [Automatic handlers](home/.config/shell/handlers) which override default command not found behavior to show the
 | 
			
		||||
  package to which given command belongs (requires pkgfile on Arch Linux)
 | 
			
		||||
- List of useful packages that I often install on most of my systems. (These are the package names for arch linux, but
 | 
			
		||||
  you should be able to find these for any distro, perhaps with a bit different name) located in
 | 
			
		||||
  [`packages.yaml`](packages.yaml)
 | 
			
		||||
- [Opensnitch firewall rules](root/etc/opensnitchd/rules), which block most unauthorized traffic and only allow needed
 | 
			
		||||
  things. This also blocks spotify ads.
 | 
			
		||||
- Automatic logout for TTY sessions or for root logins after 10 minutes of inactivity
 | 
			
		||||
- NetworkManager configuration which assigns new mac for each network
 | 
			
		||||
- `lf` file manager configuration with support for ueberzug image previews within the terminal
 | 
			
		||||
- Tons of handy scripts for automating common tasks
 | 
			
		||||
  - [`incremental-backup`](root/usr/local/bin/incremental-backup): Easy way to utilize rsync for all backups, without
 | 
			
		||||
    the need for external software
 | 
			
		||||
  - [`auto-chroot`](root/usr/local/bin/auto-chroot): Quick way to chroot into any other linux system, without typing
 | 
			
		||||
    the very repetitive mount and umount commands
 | 
			
		||||
  - [`tamper-check`](root/usr/local/bin/tamper-check): Script that uses checksums to verify that given files weren't
 | 
			
		||||
    adjusted in any way.
 | 
			
		||||
  - [`brightness`](home/.local/bin/scripts/brightness): Script to quickly change screen brightness, you may need to
 | 
			
		||||
    adjust the BRIGHTNESS_FILE, this can be different from machine to machine
 | 
			
		||||
  - [`setbg`](home/.local/bin/scripts/setbg): Quick way to set desktop background to specific image, or random image,
 | 
			
		||||
    or previously used image
 | 
			
		||||
  - Many smaller dmenu scripts to make life easier
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
Clone this repository anywhere you like
 | 
			
		||||
`$ git clone https://github.com/ItsDrike/dotfiles`
 | 
			
		||||
 | 
			
		||||
If you don't want to install git (running straight from newly installed OS), you can use `curl`: <br>
 | 
			
		||||
`$ curl -LJO https://github.com/ItsDrike/dotfiles/tarball/master` <br>
 | 
			
		||||
And extract from `.tar.gz` archive:
 | 
			
		||||
`$ tar xvf [archive name]`
 | 
			
		||||
 | 
			
		||||
## Attribution
 | 
			
		||||
 | 
			
		||||
The open-source community has an incredible amount of resources that people have offered to others free of charge and
 | 
			
		||||
we all depend on many of these sources. This project is no different and there were many open-source projects that were
 | 
			
		||||
utilized in some parts of this project. For that reason, I'd like to thank all of these projects and their
 | 
			
		||||
contributors for keeping their content open and available to everyone. This is the list of projects that helped me
 | 
			
		||||
build this repository to the stage it's in now. Many of the aliases, config files and other resources aren't my
 | 
			
		||||
original creations, but rather just small improvements and adjustments to get everything set in the way I like. Below
 | 
			
		||||
is the list of all projects which helped the existence of this repository:
 | 
			
		||||
- [Lukesmith's dotfiles/voidrice](https://github.com/LukeSmithxyz/voidrice)
 | 
			
		||||
- [BrodieRobertson's dotfiles](https://github.com/BrodieRobertson/dotfiles)
 | 
			
		||||
- [BrodieRobertson's scripts](https://github.com/BrodieRobertson/scripts)
 | 
			
		||||
- [Derek Taylor's dotfiles](https://gitlab.com/dwt1/dotfiles)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +0,0 @@
 | 
			
		|||
user_pref("browser.shell.checkDefaultBrowser", false);  // 0101 Enable default browser check
 | 
			
		||||
user_pref("network.dns.disableIPv6", false);            // 0701 Some VPNs leak IPv6, mine doesn't so don't disable it
 | 
			
		||||
user_pref("keyword.enabled", true);                     // 0801 Enable searching from location bar (I trust my search engine)
 | 
			
		||||
user_pref("network.http.referer.XOriginPolicy", 0);     // 1601 Allow cross origin referrers, with Smart Referer (this breaks too much)
 | 
			
		||||
user_pref("privacy.clearOnShutdown.sessions", true);    // 2811 Retain HTTP Basic Auth on shutdown
 | 
			
		||||
user_pref("signon.rememberSignons", false);             // 5003 Disable saving passwords to FF, there's Bitwarden
 | 
			
		||||
user_pref("security.nocertdb", true);                   // 5005 Don't cache certificates (stores them session-only)
 | 
			
		||||
user_pref("browser.download.folderList", 1);            // 5016 Use Downloads folder, not previous folder for download location
 | 
			
		||||
 | 
			
		||||
/* override recipe: enable session restore ***/
 | 
			
		||||
user_pref("browser.startup.page", 3);                   // 0102 Enable session restore
 | 
			
		||||
user_pref("privacy.clearOnShutdown.history", false);    // 2811 Don't clear history on exit
 | 
			
		||||
user_pref("privacy.cpd.history", false);                // 2812 To match when you use Ctrl-Shift-Del
 | 
			
		||||
user_pref("places.history.enabled", false);             // 5013 Disable browsing and download history (allows no history with session restore)
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,816 +0,0 @@
 | 
			
		|||
# Configuration for Alacritty, the GPU enhanced terminal emulator.
 | 
			
		||||
 | 
			
		||||
# Import additional configuration files
 | 
			
		||||
#
 | 
			
		||||
# Imports are loaded in order, skipping all missing files, with the importing
 | 
			
		||||
# file being loaded last. If a field is already present in a previous import, it
 | 
			
		||||
# will be replaced.
 | 
			
		||||
#
 | 
			
		||||
# All imports must either be absolute paths starting with `/`, or paths relative
 | 
			
		||||
# to the user's home directory starting with `~/`.
 | 
			
		||||
#import:
 | 
			
		||||
#  - /path/to/alacritty.yml
 | 
			
		||||
 | 
			
		||||
# Any items in the `env` entry below will be added as
 | 
			
		||||
# environment variables. Some entries may override variables
 | 
			
		||||
# set by alacritty itself.
 | 
			
		||||
#env:
 | 
			
		||||
  # TERM variable
 | 
			
		||||
  #
 | 
			
		||||
  # This value is used to set the `$TERM` environment variable for
 | 
			
		||||
  # each instance of Alacritty. If it is not present, alacritty will
 | 
			
		||||
  # check the local terminfo database and use `alacritty` if it is
 | 
			
		||||
  # available, otherwise `xterm-256color` is used.
 | 
			
		||||
  #TERM: alacritty
 | 
			
		||||
 | 
			
		||||
window:
 | 
			
		||||
  # Window dimensions (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Number of lines/columns (not pixels) in the terminal. The number of columns
 | 
			
		||||
  # must be at least `2`, while using a value of `0` for columns and lines will
 | 
			
		||||
  # fall back to the window manager's recommended size.
 | 
			
		||||
  #dimensions:
 | 
			
		||||
  #  columns: 0
 | 
			
		||||
  #  lines: 0
 | 
			
		||||
 | 
			
		||||
  # Window position (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Specified in number of pixels.
 | 
			
		||||
  # If the position is not set, the window manager will handle the placement.
 | 
			
		||||
  #position:
 | 
			
		||||
  #  x: 0
 | 
			
		||||
  #  y: 0
 | 
			
		||||
 | 
			
		||||
  # Window padding (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Blank space added around the window in pixels. This padding is scaled
 | 
			
		||||
  # by DPI and the specified value is always added at both opposing sides.
 | 
			
		||||
  padding:
 | 
			
		||||
    x: 6
 | 
			
		||||
    y: 6
 | 
			
		||||
 | 
			
		||||
  # Background opacity
 | 
			
		||||
  #
 | 
			
		||||
  # Window opacity as a floating point number from `0.0` to `1.0`.
 | 
			
		||||
  # The value `0.0` is completely transparent and `1.0` is opaque.
 | 
			
		||||
  opacity: 0.9
 | 
			
		||||
 | 
			
		||||
  # Spread additional padding evenly around the terminal content.
 | 
			
		||||
  #dynamic_padding: false
 | 
			
		||||
 | 
			
		||||
  # Window decorations
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `decorations`:
 | 
			
		||||
  #     - full: Borders and title bar
 | 
			
		||||
  #     - none: Neither borders nor title bar
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `decorations` (macOS only):
 | 
			
		||||
  #     - transparent: Title bar, transparent background and title bar buttons
 | 
			
		||||
  #     - buttonless: Title bar, transparent background and no title bar buttons
 | 
			
		||||
  #decorations: full
 | 
			
		||||
 | 
			
		||||
  # Startup Mode (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `startup_mode`:
 | 
			
		||||
  #   - Windowed
 | 
			
		||||
  #   - Maximized
 | 
			
		||||
  #   - Fullscreen
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `startup_mode` (macOS only):
 | 
			
		||||
  #   - SimpleFullscreen
 | 
			
		||||
  #startup_mode: Windowed
 | 
			
		||||
 | 
			
		||||
  # Window title
 | 
			
		||||
  #title: Alacritty
 | 
			
		||||
 | 
			
		||||
  # Allow terminal applications to change Alacritty's window title.
 | 
			
		||||
  #dynamic_title: true
 | 
			
		||||
 | 
			
		||||
  # Window class (Linux/BSD only):
 | 
			
		||||
  #class:
 | 
			
		||||
    # Application instance name
 | 
			
		||||
    #instance: Alacritty
 | 
			
		||||
    # General application class
 | 
			
		||||
    #general: Alacritty
 | 
			
		||||
 | 
			
		||||
  # GTK theme variant (Linux/BSD only)
 | 
			
		||||
  #
 | 
			
		||||
  # Override the variant of the GTK theme. Commonly supported values are `dark`
 | 
			
		||||
  # and `light`. Set this to `None` to use the default theme variant.
 | 
			
		||||
  #gtk_theme_variant: None
 | 
			
		||||
 | 
			
		||||
scrolling:
 | 
			
		||||
  # Maximum number of lines in the scrollback buffer.
 | 
			
		||||
  # Specifying '0' will disable scrolling.
 | 
			
		||||
  history: 10000
 | 
			
		||||
 | 
			
		||||
  # Scrolling distance multiplier.
 | 
			
		||||
  #multiplier: 3
 | 
			
		||||
 | 
			
		||||
# Font configuration
 | 
			
		||||
font:
 | 
			
		||||
  # Normal (roman) font face
 | 
			
		||||
  normal:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # Default:
 | 
			
		||||
    #   - (macOS) Menlo
 | 
			
		||||
    #   - (Linux/BSD) monospace
 | 
			
		||||
    #   - (Windows) Consolas
 | 
			
		||||
    family: JetBrains Mono
 | 
			
		||||
    #family: Comic Mono
 | 
			
		||||
    #family: Source Code Pro
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    style: Medium
 | 
			
		||||
 | 
			
		||||
  # Bold font face
 | 
			
		||||
  #bold:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # If the bold family is not specified, it will fall back to the
 | 
			
		||||
    # value specified for the normal font.
 | 
			
		||||
    #family: monospace
 | 
			
		||||
    #family: Source Code Pro
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Bold
 | 
			
		||||
 | 
			
		||||
  # Italic font face
 | 
			
		||||
  #italic:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # If the italic family is not specified, it will fall back to the
 | 
			
		||||
    # value specified for the normal font.
 | 
			
		||||
    #family: monospace
 | 
			
		||||
    #family: Source Code Pro
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Italic
 | 
			
		||||
 | 
			
		||||
  # Bold italic font face
 | 
			
		||||
  #bold_italic:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # If the bold italic family is not specified, it will fall back to the
 | 
			
		||||
    # value specified for the normal font.
 | 
			
		||||
    #family: monospace
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Bold Italic
 | 
			
		||||
 | 
			
		||||
  # Point size
 | 
			
		||||
  size: 11.0
 | 
			
		||||
 | 
			
		||||
  # Offset is the extra space around each character. `offset.y` can be thought
 | 
			
		||||
  # of as modifying the line spacing, and `offset.x` as modifying the letter
 | 
			
		||||
  # spacing.
 | 
			
		||||
  #offset:
 | 
			
		||||
  #  x: 0
 | 
			
		||||
  #  y: 0
 | 
			
		||||
 | 
			
		||||
  # Glyph offset determines the locations of the glyphs within their cells with
 | 
			
		||||
  # the default being at the bottom. Increasing `x` moves the glyph to the
 | 
			
		||||
  # right, increasing `y` moves the glyph upward.
 | 
			
		||||
  #glyph_offset:
 | 
			
		||||
  #  x: 0
 | 
			
		||||
  #  y: 0
 | 
			
		||||
 | 
			
		||||
  # Thin stroke font rendering (macOS only)
 | 
			
		||||
  #
 | 
			
		||||
  # Thin strokes are suitable for retina displays, but for non-retina screens
 | 
			
		||||
  # it is recommended to set `use_thin_strokes` to `false`.
 | 
			
		||||
  #use_thin_strokes: true
 | 
			
		||||
 | 
			
		||||
# If `true`, bold text is drawn using the bright color variants.
 | 
			
		||||
draw_bold_text_with_bright_colors: false
 | 
			
		||||
 | 
			
		||||
# Colors (Tomorrow Night)
 | 
			
		||||
colors:
 | 
			
		||||
  # Default colors
 | 
			
		||||
  primary:
 | 
			
		||||
    background: '#191919'
 | 
			
		||||
    foreground: '#d8dee9'
 | 
			
		||||
    #background: '#1d1f21'
 | 
			
		||||
    #foreground: '#c5c8c6'
 | 
			
		||||
 | 
			
		||||
    # Bright and dim foreground colors
 | 
			
		||||
    #
 | 
			
		||||
    # The dimmed foreground color is calculated automatically if it is not
 | 
			
		||||
    # present. If the bright foreground color is not set, or
 | 
			
		||||
    # `draw_bold_text_with_bright_colors` is `false`, the normal foreground
 | 
			
		||||
    # color will be used.
 | 
			
		||||
    #dim_foreground: '#828482'
 | 
			
		||||
    #bright_foreground: '#eaeaea'
 | 
			
		||||
 | 
			
		||||
  # Cursor colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors which should be used to draw the terminal cursor.
 | 
			
		||||
  #
 | 
			
		||||
  # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
  # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
  #cursor:
 | 
			
		||||
  #  text: CellBackground
 | 
			
		||||
  #  cursor: CellForeground
 | 
			
		||||
 | 
			
		||||
  # Vi mode cursor colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors for the cursor when the vi mode is active.
 | 
			
		||||
  #
 | 
			
		||||
  # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
  # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
  #vi_mode_cursor:
 | 
			
		||||
  #  text: CellBackground
 | 
			
		||||
  #  cursor: CellForeground
 | 
			
		||||
 | 
			
		||||
  # Search colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors used for the search bar and match highlighting.
 | 
			
		||||
  #search:
 | 
			
		||||
    # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
    # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
    #matches:
 | 
			
		||||
    #  foreground: '#000000'
 | 
			
		||||
    #  background: '#ffffff'
 | 
			
		||||
    #focused_match:
 | 
			
		||||
    #  foreground: CellBackground
 | 
			
		||||
    #  background: CellForeground
 | 
			
		||||
 | 
			
		||||
    #bar:
 | 
			
		||||
    #  background: '#c5c8c6'
 | 
			
		||||
    #  foreground: '#1d1f21'
 | 
			
		||||
 | 
			
		||||
  # Line indicator
 | 
			
		||||
  #
 | 
			
		||||
  # Color used for the indicator displaying the position in history during
 | 
			
		||||
  # search and vi mode.
 | 
			
		||||
  #
 | 
			
		||||
  # By default, these will use the opposing primary color.
 | 
			
		||||
  #line_indicator:
 | 
			
		||||
  #  foreground: None
 | 
			
		||||
  #  background: None
 | 
			
		||||
 | 
			
		||||
  # Selection colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors which should be used to draw the selection area.
 | 
			
		||||
  #
 | 
			
		||||
  # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
  # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
  #selection:
 | 
			
		||||
  #  text: CellBackground
 | 
			
		||||
  #  background: CellForeground
 | 
			
		||||
 | 
			
		||||
  # Normal colors
 | 
			
		||||
  normal:
 | 
			
		||||
    #black:   '#191919'
 | 
			
		||||
    black:   '#46494d'
 | 
			
		||||
    red:     '#b02626'
 | 
			
		||||
    green:   '#40a62f'
 | 
			
		||||
    yellow:  '#f2e635'
 | 
			
		||||
    blue:    '#314ad0'
 | 
			
		||||
    magenta: '#b30ad0'
 | 
			
		||||
    cyan:    '#32d0fc'
 | 
			
		||||
    white:   '#acadb1'
 | 
			
		||||
 | 
			
		||||
  # Bright colors
 | 
			
		||||
  bright:
 | 
			
		||||
    black:   '#666666'
 | 
			
		||||
    red:     '#ce2727'
 | 
			
		||||
    green:   '#47c930'
 | 
			
		||||
    yellow:  '#fff138'
 | 
			
		||||
    blue:    '#2e4bea'
 | 
			
		||||
    magenta: '#cc15ed'
 | 
			
		||||
    cyan:    '#54d9ff'
 | 
			
		||||
    white:   '#dbdbdb'
 | 
			
		||||
 | 
			
		||||
  # Dim colors
 | 
			
		||||
  dim:
 | 
			
		||||
    black:   '#676f78'
 | 
			
		||||
    red:     '#b55454'
 | 
			
		||||
    green:   '#78a670'
 | 
			
		||||
    yellow:  '#faf380'
 | 
			
		||||
    blue:    '#707fd0'
 | 
			
		||||
    magenta: '#c583d0'
 | 
			
		||||
    cyan:    '#8adaf1'
 | 
			
		||||
    white:   '#e0e3e7'
 | 
			
		||||
 | 
			
		||||
  # Indexed Colors
 | 
			
		||||
  #
 | 
			
		||||
  # The indexed colors include all colors from 16 to 256.
 | 
			
		||||
  # When these are not set, they're filled with sensible defaults.
 | 
			
		||||
  #
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   `- { index: 16, color: '#ff00ff' }`
 | 
			
		||||
  #
 | 
			
		||||
  #indexed_colors: []
 | 
			
		||||
 | 
			
		||||
# Bell
 | 
			
		||||
#
 | 
			
		||||
# The bell is rung every time the BEL control character is received.
 | 
			
		||||
#bell:
 | 
			
		||||
  # Visual Bell Animation
 | 
			
		||||
  #
 | 
			
		||||
  # Animation effect for flashing the screen when the visual bell is rung.
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `animation`:
 | 
			
		||||
  #   - Ease
 | 
			
		||||
  #   - EaseOut
 | 
			
		||||
  #   - EaseOutSine
 | 
			
		||||
  #   - EaseOutQuad
 | 
			
		||||
  #   - EaseOutCubic
 | 
			
		||||
  #   - EaseOutQuart
 | 
			
		||||
  #   - EaseOutQuint
 | 
			
		||||
  #   - EaseOutExpo
 | 
			
		||||
  #   - EaseOutCirc
 | 
			
		||||
  #   - Linear
 | 
			
		||||
  #animation: EaseOutExpo
 | 
			
		||||
 | 
			
		||||
  # Duration of the visual bell flash in milliseconds. A `duration` of `0` will
 | 
			
		||||
  # disable the visual bell animation.
 | 
			
		||||
  #duration: 0
 | 
			
		||||
 | 
			
		||||
  # Visual bell animation color.
 | 
			
		||||
  #color: '#ffffff'
 | 
			
		||||
 | 
			
		||||
  # Bell Command
 | 
			
		||||
  #
 | 
			
		||||
  # This program is executed whenever the bell is rung.
 | 
			
		||||
  #
 | 
			
		||||
  # When set to `command: None`, no command will be executed.
 | 
			
		||||
  #
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   command:
 | 
			
		||||
  #     program: notify-send
 | 
			
		||||
  #     args: ["Hello, World!"]
 | 
			
		||||
  #
 | 
			
		||||
  #command: None
 | 
			
		||||
 | 
			
		||||
#selection:
 | 
			
		||||
  # This string contains all characters that are used as separators for
 | 
			
		||||
  # "semantic words" in Alacritty.
 | 
			
		||||
  #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
 | 
			
		||||
 | 
			
		||||
  # When set to `true`, selected text will be copied to the primary clipboard.
 | 
			
		||||
  #save_to_clipboard: false
 | 
			
		||||
 | 
			
		||||
#cursor:
 | 
			
		||||
  # Cursor style
 | 
			
		||||
  #style:
 | 
			
		||||
    # Cursor shape
 | 
			
		||||
    #
 | 
			
		||||
    # Values for `shape`:
 | 
			
		||||
    #   - ▇ Block
 | 
			
		||||
    #   - _ Underline
 | 
			
		||||
    #   - | Beam
 | 
			
		||||
    #shape: Block
 | 
			
		||||
 | 
			
		||||
    # Cursor blinking state
 | 
			
		||||
    #
 | 
			
		||||
    # Values for `blinking`:
 | 
			
		||||
    #   - Never: Prevent the cursor from ever blinking
 | 
			
		||||
    #   - Off: Disable blinking by default
 | 
			
		||||
    #   - On: Enable blinking by default
 | 
			
		||||
    #   - Always: Force the cursor to always blink
 | 
			
		||||
    #blinking: Off
 | 
			
		||||
 | 
			
		||||
  # Vi mode cursor style
 | 
			
		||||
  #
 | 
			
		||||
  # If the vi mode cursor style is `None` or not specified, it will fall back to
 | 
			
		||||
  # the style of the active value of the normal cursor.
 | 
			
		||||
  #
 | 
			
		||||
  # See `cursor.style` for available options.
 | 
			
		||||
  #vi_mode_style: None
 | 
			
		||||
 | 
			
		||||
  # Cursor blinking interval in milliseconds.
 | 
			
		||||
  #blink_interval: 750
 | 
			
		||||
 | 
			
		||||
  # If this is `true`, the cursor will be rendered as a hollow box when the
 | 
			
		||||
  # window is not focused.
 | 
			
		||||
  #unfocused_hollow: true
 | 
			
		||||
 | 
			
		||||
  # Thickness of the cursor relative to the cell width as floating point number
 | 
			
		||||
  # from `0.0` to `1.0`.
 | 
			
		||||
  #thickness: 0.15
 | 
			
		||||
 | 
			
		||||
# Live config reload (changes require restart)
 | 
			
		||||
#live_config_reload: true
 | 
			
		||||
 | 
			
		||||
# Shell
 | 
			
		||||
#
 | 
			
		||||
# You can set `shell.program` to the path of your favorite shell, e.g.
 | 
			
		||||
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
 | 
			
		||||
# shell.
 | 
			
		||||
#
 | 
			
		||||
# Default:
 | 
			
		||||
#   - (macOS) /bin/bash --login
 | 
			
		||||
#   - (Linux/BSD) user login shell
 | 
			
		||||
#   - (Windows) powershell
 | 
			
		||||
#shell:
 | 
			
		||||
#  program: /bin/bash
 | 
			
		||||
#  args:
 | 
			
		||||
#    - --login
 | 
			
		||||
 | 
			
		||||
# Startup directory
 | 
			
		||||
#
 | 
			
		||||
# Directory the shell is started in. If this is unset, or `None`, the working
 | 
			
		||||
# directory of the parent process will be used.
 | 
			
		||||
#working_directory: None
 | 
			
		||||
 | 
			
		||||
# Send ESC (\x1b) before characters when alt is pressed.
 | 
			
		||||
#alt_send_esc: true
 | 
			
		||||
 | 
			
		||||
#mouse:
 | 
			
		||||
  # Click settings
 | 
			
		||||
  #
 | 
			
		||||
  # The `double_click` and `triple_click` settings control the time
 | 
			
		||||
  # alacritty should wait for accepting multiple clicks as one double
 | 
			
		||||
  # or triple click.
 | 
			
		||||
  #double_click: { threshold: 300 }
 | 
			
		||||
  #triple_click: { threshold: 300 }
 | 
			
		||||
 | 
			
		||||
  # If this is `true`, the cursor is temporarily hidden when typing.
 | 
			
		||||
  #hide_when_typing: false
 | 
			
		||||
 | 
			
		||||
  #url:
 | 
			
		||||
    # URL launcher
 | 
			
		||||
    #
 | 
			
		||||
    # This program is executed when clicking on a text which is recognized as a
 | 
			
		||||
    # URL. The URL is always added to the command as the last parameter.
 | 
			
		||||
    #
 | 
			
		||||
    # When set to `launcher: None`, URL launching will be disabled completely.
 | 
			
		||||
    #
 | 
			
		||||
    # Default:
 | 
			
		||||
    #   - (macOS) open
 | 
			
		||||
    #   - (Linux/BSD) xdg-open
 | 
			
		||||
    #   - (Windows) explorer
 | 
			
		||||
    #launcher:
 | 
			
		||||
    #  program: xdg-open
 | 
			
		||||
    #  args: []
 | 
			
		||||
 | 
			
		||||
    # URL modifiers
 | 
			
		||||
    #
 | 
			
		||||
    # These are the modifiers that need to be held down for opening URLs when
 | 
			
		||||
    # clicking on them. The available modifiers are documented in the key
 | 
			
		||||
    # binding section.
 | 
			
		||||
    #modifiers: None
 | 
			
		||||
 | 
			
		||||
# Mouse bindings
 | 
			
		||||
#
 | 
			
		||||
# Mouse bindings are specified as a list of objects, much like the key
 | 
			
		||||
# bindings further below.
 | 
			
		||||
#
 | 
			
		||||
# To trigger mouse bindings when an application running within Alacritty
 | 
			
		||||
# captures the mouse, the `Shift` modifier is automatically added as a
 | 
			
		||||
# requirement.
 | 
			
		||||
#
 | 
			
		||||
# Each mouse binding will specify a:
 | 
			
		||||
#
 | 
			
		||||
# - `mouse`:
 | 
			
		||||
#
 | 
			
		||||
#   - Middle
 | 
			
		||||
#   - Left
 | 
			
		||||
#   - Right
 | 
			
		||||
#   - Numeric identifier such as `5`
 | 
			
		||||
#
 | 
			
		||||
# - `action` (see key bindings)
 | 
			
		||||
#
 | 
			
		||||
# And optionally:
 | 
			
		||||
#
 | 
			
		||||
# - `mods` (see key bindings)
 | 
			
		||||
#mouse_bindings:
 | 
			
		||||
#  - { mouse: Middle, action: PasteSelection }
 | 
			
		||||
 | 
			
		||||
# Key bindings
 | 
			
		||||
#
 | 
			
		||||
# Key bindings are specified as a list of objects. For example, this is the
 | 
			
		||||
# default paste binding:
 | 
			
		||||
#
 | 
			
		||||
# `- { key: V, mods: Control|Shift, action: Paste }`
 | 
			
		||||
#
 | 
			
		||||
# Each key binding will specify a:
 | 
			
		||||
#
 | 
			
		||||
# - `key`: Identifier of the key pressed
 | 
			
		||||
#
 | 
			
		||||
#    - A-Z
 | 
			
		||||
#    - F1-F24
 | 
			
		||||
#    - Key0-Key9
 | 
			
		||||
#
 | 
			
		||||
#    A full list with available key codes can be found here:
 | 
			
		||||
#    https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
 | 
			
		||||
#
 | 
			
		||||
#    Instead of using the name of the keys, the `key` field also supports using
 | 
			
		||||
#    the scancode of the desired key. Scancodes have to be specified as a
 | 
			
		||||
#    decimal number. This command will allow you to display the hex scancodes
 | 
			
		||||
#    for certain keys:
 | 
			
		||||
#
 | 
			
		||||
#       `showkey --scancodes`.
 | 
			
		||||
#
 | 
			
		||||
# Then exactly one of:
 | 
			
		||||
#
 | 
			
		||||
# - `chars`: Send a byte sequence to the running application
 | 
			
		||||
#
 | 
			
		||||
#    The `chars` field writes the specified string to the terminal. This makes
 | 
			
		||||
#    it possible to pass escape sequences. To find escape codes for bindings
 | 
			
		||||
#    like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
 | 
			
		||||
#    of tmux. Note that applications use terminfo to map escape sequences back
 | 
			
		||||
#    to keys. It is therefore required to update the terminfo when changing an
 | 
			
		||||
#    escape sequence.
 | 
			
		||||
#
 | 
			
		||||
# - `action`: Execute a predefined action
 | 
			
		||||
#
 | 
			
		||||
#   - ToggleViMode
 | 
			
		||||
#   - SearchForward
 | 
			
		||||
#       Start searching toward the right of the search origin.
 | 
			
		||||
#   - SearchBackward
 | 
			
		||||
#       Start searching toward the left of the search origin.
 | 
			
		||||
#   - Copy
 | 
			
		||||
#   - Paste
 | 
			
		||||
#   - IncreaseFontSize
 | 
			
		||||
#   - DecreaseFontSize
 | 
			
		||||
#   - ResetFontSize
 | 
			
		||||
#   - ScrollPageUp
 | 
			
		||||
#   - ScrollPageDown
 | 
			
		||||
#   - ScrollHalfPageUp
 | 
			
		||||
#   - ScrollHalfPageDown
 | 
			
		||||
#   - ScrollLineUp
 | 
			
		||||
#   - ScrollLineDown
 | 
			
		||||
#   - ScrollToTop
 | 
			
		||||
#   - ScrollToBottom
 | 
			
		||||
#   - ClearHistory
 | 
			
		||||
#       Remove the terminal's scrollback history.
 | 
			
		||||
#   - Hide
 | 
			
		||||
#       Hide the Alacritty window.
 | 
			
		||||
#   - Minimize
 | 
			
		||||
#       Minimize the Alacritty window.
 | 
			
		||||
#   - Quit
 | 
			
		||||
#       Quit Alacritty.
 | 
			
		||||
#   - ToggleFullscreen
 | 
			
		||||
#   - SpawnNewInstance
 | 
			
		||||
#       Spawn a new instance of Alacritty.
 | 
			
		||||
#   - ClearLogNotice
 | 
			
		||||
#       Clear Alacritty's UI warning and error notice.
 | 
			
		||||
#   - ClearSelection
 | 
			
		||||
#       Remove the active selection.
 | 
			
		||||
#   - ReceiveChar
 | 
			
		||||
#   - None
 | 
			
		||||
#
 | 
			
		||||
# - Vi mode exclusive actions:
 | 
			
		||||
#
 | 
			
		||||
#   - Open
 | 
			
		||||
#       Open URLs at the cursor location with the launcher configured in
 | 
			
		||||
#       `url.launcher`.
 | 
			
		||||
#   - ToggleNormalSelection
 | 
			
		||||
#   - ToggleLineSelection
 | 
			
		||||
#   - ToggleBlockSelection
 | 
			
		||||
#   - ToggleSemanticSelection
 | 
			
		||||
#       Toggle semantic selection based on `selection.semantic_escape_chars`.
 | 
			
		||||
#
 | 
			
		||||
# - Vi mode exclusive cursor motion actions:
 | 
			
		||||
#
 | 
			
		||||
#   - Up
 | 
			
		||||
#       One line up.
 | 
			
		||||
#   - Down
 | 
			
		||||
#       One line down.
 | 
			
		||||
#   - Left
 | 
			
		||||
#       One character left.
 | 
			
		||||
#   - Right
 | 
			
		||||
#       One character right.
 | 
			
		||||
#   - First
 | 
			
		||||
#       First column, or beginning of the line when already at the first column.
 | 
			
		||||
#   - Last
 | 
			
		||||
#       Last column, or beginning of the line when already at the last column.
 | 
			
		||||
#   - FirstOccupied
 | 
			
		||||
#       First non-empty cell in this terminal row, or first non-empty cell of
 | 
			
		||||
#       the line when already at the first cell of the row.
 | 
			
		||||
#   - High
 | 
			
		||||
#       Top of the screen.
 | 
			
		||||
#   - Middle
 | 
			
		||||
#       Center of the screen.
 | 
			
		||||
#   - Low
 | 
			
		||||
#       Bottom of the screen.
 | 
			
		||||
#   - SemanticLeft
 | 
			
		||||
#       Start of the previous semantically separated word.
 | 
			
		||||
#   - SemanticRight
 | 
			
		||||
#       Start of the next semantically separated word.
 | 
			
		||||
#   - SemanticLeftEnd
 | 
			
		||||
#       End of the previous semantically separated word.
 | 
			
		||||
#   - SemanticRightEnd
 | 
			
		||||
#       End of the next semantically separated word.
 | 
			
		||||
#   - WordLeft
 | 
			
		||||
#       Start of the previous whitespace separated word.
 | 
			
		||||
#   - WordRight
 | 
			
		||||
#       Start of the next whitespace separated word.
 | 
			
		||||
#   - WordLeftEnd
 | 
			
		||||
#       End of the previous whitespace separated word.
 | 
			
		||||
#   - WordRightEnd
 | 
			
		||||
#       End of the next whitespace separated word.
 | 
			
		||||
#   - Bracket
 | 
			
		||||
#       Character matching the bracket at the cursor's location.
 | 
			
		||||
#   - SearchNext
 | 
			
		||||
#       Beginning of the next match.
 | 
			
		||||
#   - SearchPrevious
 | 
			
		||||
#       Beginning of the previous match.
 | 
			
		||||
#   - SearchStart
 | 
			
		||||
#       Start of the match to the left of the vi mode cursor.
 | 
			
		||||
#   - SearchEnd
 | 
			
		||||
#       End of the match to the right of the vi mode cursor.
 | 
			
		||||
#
 | 
			
		||||
# - Search mode exclusive actions:
 | 
			
		||||
#   - SearchFocusNext
 | 
			
		||||
#       Move the focus to the next search match.
 | 
			
		||||
#   - SearchFocusPrevious
 | 
			
		||||
#       Move the focus to the previous search match.
 | 
			
		||||
#   - SearchConfirm
 | 
			
		||||
#   - SearchCancel
 | 
			
		||||
#   - SearchClear
 | 
			
		||||
#       Reset the search regex.
 | 
			
		||||
#   - SearchDeleteWord
 | 
			
		||||
#       Delete the last word in the search regex.
 | 
			
		||||
#   - SearchHistoryPrevious
 | 
			
		||||
#       Go to the previous regex in the search history.
 | 
			
		||||
#   - SearchHistoryNext
 | 
			
		||||
#       Go to the next regex in the search history.
 | 
			
		||||
#
 | 
			
		||||
# - macOS exclusive actions:
 | 
			
		||||
#   - ToggleSimpleFullscreen
 | 
			
		||||
#       Enter fullscreen without occupying another space.
 | 
			
		||||
#
 | 
			
		||||
# - Linux/BSD exclusive actions:
 | 
			
		||||
#
 | 
			
		||||
#   - CopySelection
 | 
			
		||||
#       Copy from the selection buffer.
 | 
			
		||||
#   - PasteSelection
 | 
			
		||||
#       Paste from the selection buffer.
 | 
			
		||||
#
 | 
			
		||||
# - `command`: Fork and execute a specified command plus arguments
 | 
			
		||||
#
 | 
			
		||||
#    The `command` field must be a map containing a `program` string and an
 | 
			
		||||
#    `args` array of command line parameter strings. For example:
 | 
			
		||||
#       `{ program: "alacritty", args: ["-e", "vttest"] }`
 | 
			
		||||
#
 | 
			
		||||
# And optionally:
 | 
			
		||||
#
 | 
			
		||||
# - `mods`: Key modifiers to filter binding actions
 | 
			
		||||
#
 | 
			
		||||
#    - Command
 | 
			
		||||
#    - Control
 | 
			
		||||
#    - Option
 | 
			
		||||
#    - Super
 | 
			
		||||
#    - Shift
 | 
			
		||||
#    - Alt
 | 
			
		||||
#
 | 
			
		||||
#    Multiple `mods` can be combined using `|` like this:
 | 
			
		||||
#       `mods: Control|Shift`.
 | 
			
		||||
#    Whitespace and capitalization are relevant and must match the example.
 | 
			
		||||
#
 | 
			
		||||
# - `mode`: Indicate a binding for only specific terminal reported modes
 | 
			
		||||
#
 | 
			
		||||
#    This is mainly used to send applications the correct escape sequences
 | 
			
		||||
#    when in different modes.
 | 
			
		||||
#
 | 
			
		||||
#    - AppCursor
 | 
			
		||||
#    - AppKeypad
 | 
			
		||||
#    - Search
 | 
			
		||||
#    - Alt
 | 
			
		||||
#    - Vi
 | 
			
		||||
#
 | 
			
		||||
#    A `~` operator can be used before a mode to apply the binding whenever
 | 
			
		||||
#    the mode is *not* active, e.g. `~Alt`.
 | 
			
		||||
#
 | 
			
		||||
# Bindings are always filled by default, but will be replaced when a new
 | 
			
		||||
# binding with the same triggers is defined. To unset a default binding, it can
 | 
			
		||||
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
 | 
			
		||||
# a no-op if you do not wish to receive input characters for that binding.
 | 
			
		||||
#
 | 
			
		||||
# If the same trigger is assigned to multiple actions, all of them are executed
 | 
			
		||||
# in the order they were defined in.
 | 
			
		||||
#key_bindings:
 | 
			
		||||
  #- { key: Paste,                                       action: Paste          }
 | 
			
		||||
  #- { key: Copy,                                        action: Copy           }
 | 
			
		||||
  #- { key: L,         mods: Control,                    action: ClearLogNotice }
 | 
			
		||||
  #- { key: L,         mods: Control, mode: ~Vi|~Search, chars: "\x0c"          }
 | 
			
		||||
  #- { key: PageUp,    mods: Shift,   mode: ~Alt,        action: ScrollPageUp,  }
 | 
			
		||||
  #- { key: PageDown,  mods: Shift,   mode: ~Alt,        action: ScrollPageDown }
 | 
			
		||||
  #- { key: Home,      mods: Shift,   mode: ~Alt,        action: ScrollToTop,   }
 | 
			
		||||
  #- { key: End,       mods: Shift,   mode: ~Alt,        action: ScrollToBottom }
 | 
			
		||||
 | 
			
		||||
  # Vi Mode
 | 
			
		||||
  #- { key: Space,  mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom          }
 | 
			
		||||
  #- { key: Space,  mods: Shift|Control, mode: ~Search,    action: ToggleViMode            }
 | 
			
		||||
  #- { key: Escape,                      mode: Vi|~Search, action: ClearSelection          }
 | 
			
		||||
  #- { key: I,                           mode: Vi|~Search, action: ScrollToBottom          }
 | 
			
		||||
  #- { key: I,                           mode: Vi|~Search, action: ToggleViMode            }
 | 
			
		||||
  #- { key: C,      mods: Control,       mode: Vi|~Search, action: ToggleViMode            }
 | 
			
		||||
  #- { key: Y,      mods: Control,       mode: Vi|~Search, action: ScrollLineUp            }
 | 
			
		||||
  #- { key: E,      mods: Control,       mode: Vi|~Search, action: ScrollLineDown          }
 | 
			
		||||
  #- { key: G,                           mode: Vi|~Search, action: ScrollToTop             }
 | 
			
		||||
  #- { key: G,      mods: Shift,         mode: Vi|~Search, action: ScrollToBottom          }
 | 
			
		||||
  #- { key: B,      mods: Control,       mode: Vi|~Search, action: ScrollPageUp            }
 | 
			
		||||
  #- { key: F,      mods: Control,       mode: Vi|~Search, action: ScrollPageDown          }
 | 
			
		||||
  #- { key: U,      mods: Control,       mode: Vi|~Search, action: ScrollHalfPageUp        }
 | 
			
		||||
  #- { key: D,      mods: Control,       mode: Vi|~Search, action: ScrollHalfPageDown      }
 | 
			
		||||
  #- { key: Y,                           mode: Vi|~Search, action: Copy                    }
 | 
			
		||||
  #- { key: Y,                           mode: Vi|~Search, action: ClearSelection          }
 | 
			
		||||
  #- { key: Copy,                        mode: Vi|~Search, action: ClearSelection          }
 | 
			
		||||
  #- { key: V,                           mode: Vi|~Search, action: ToggleNormalSelection   }
 | 
			
		||||
  #- { key: V,      mods: Shift,         mode: Vi|~Search, action: ToggleLineSelection     }
 | 
			
		||||
  #- { key: V,      mods: Control,       mode: Vi|~Search, action: ToggleBlockSelection    }
 | 
			
		||||
  #- { key: V,      mods: Alt,           mode: Vi|~Search, action: ToggleSemanticSelection }
 | 
			
		||||
  #- { key: Return,                      mode: Vi|~Search, action: Open                    }
 | 
			
		||||
  #- { key: K,                           mode: Vi|~Search, action: Up                      }
 | 
			
		||||
  #- { key: J,                           mode: Vi|~Search, action: Down                    }
 | 
			
		||||
  #- { key: H,                           mode: Vi|~Search, action: Left                    }
 | 
			
		||||
  #- { key: L,                           mode: Vi|~Search, action: Right                   }
 | 
			
		||||
  #- { key: Up,                          mode: Vi|~Search, action: Up                      }
 | 
			
		||||
  #- { key: Down,                        mode: Vi|~Search, action: Down                    }
 | 
			
		||||
  #- { key: Left,                        mode: Vi|~Search, action: Left                    }
 | 
			
		||||
  #- { key: Right,                       mode: Vi|~Search, action: Right                   }
 | 
			
		||||
  #- { key: Key0,                        mode: Vi|~Search, action: First                   }
 | 
			
		||||
  #- { key: Key4,   mods: Shift,         mode: Vi|~Search, action: Last                    }
 | 
			
		||||
  #- { key: Key6,   mods: Shift,         mode: Vi|~Search, action: FirstOccupied           }
 | 
			
		||||
  #- { key: H,      mods: Shift,         mode: Vi|~Search, action: High                    }
 | 
			
		||||
  #- { key: M,      mods: Shift,         mode: Vi|~Search, action: Middle                  }
 | 
			
		||||
  #- { key: L,      mods: Shift,         mode: Vi|~Search, action: Low                     }
 | 
			
		||||
  #- { key: B,                           mode: Vi|~Search, action: SemanticLeft            }
 | 
			
		||||
  #- { key: W,                           mode: Vi|~Search, action: SemanticRight           }
 | 
			
		||||
  #- { key: E,                           mode: Vi|~Search, action: SemanticRightEnd        }
 | 
			
		||||
  #- { key: B,      mods: Shift,         mode: Vi|~Search, action: WordLeft                }
 | 
			
		||||
  #- { key: W,      mods: Shift,         mode: Vi|~Search, action: WordRight               }
 | 
			
		||||
  #- { key: E,      mods: Shift,         mode: Vi|~Search, action: WordRightEnd            }
 | 
			
		||||
  #- { key: Key5,   mods: Shift,         mode: Vi|~Search, action: Bracket                 }
 | 
			
		||||
  #- { key: Slash,                       mode: Vi|~Search, action: SearchForward           }
 | 
			
		||||
  #- { key: Slash,  mods: Shift,         mode: Vi|~Search, action: SearchBackward          }
 | 
			
		||||
  #- { key: N,                           mode: Vi|~Search, action: SearchNext              }
 | 
			
		||||
  #- { key: N,      mods: Shift,         mode: Vi|~Search, action: SearchPrevious          }
 | 
			
		||||
 | 
			
		||||
  # Search Mode
 | 
			
		||||
  #- { key: Return,                mode: Search|Vi,  action: SearchConfirm         }
 | 
			
		||||
  #- { key: Escape,                mode: Search,     action: SearchCancel          }
 | 
			
		||||
  #- { key: C,      mods: Control, mode: Search,     action: SearchCancel          }
 | 
			
		||||
  #- { key: U,      mods: Control, mode: Search,     action: SearchClear           }
 | 
			
		||||
  #- { key: W,      mods: Control, mode: Search,     action: SearchDeleteWord      }
 | 
			
		||||
  #- { key: P,      mods: Control, mode: Search,     action: SearchHistoryPrevious }
 | 
			
		||||
  #- { key: N,      mods: Control, mode: Search,     action: SearchHistoryNext     }
 | 
			
		||||
  #- { key: Up,                    mode: Search,     action: SearchHistoryPrevious }
 | 
			
		||||
  #- { key: Down,                  mode: Search,     action: SearchHistoryNext     }
 | 
			
		||||
  #- { key: Return,                mode: Search|~Vi, action: SearchFocusNext       }
 | 
			
		||||
  #- { key: Return, mods: Shift,   mode: Search|~Vi, action: SearchFocusPrevious   }
 | 
			
		||||
 | 
			
		||||
  # (Windows, Linux, and BSD only)
 | 
			
		||||
  #- { key: V,              mods: Control|Shift, mode: ~Vi,        action: Paste            }
 | 
			
		||||
  #- { key: C,              mods: Control|Shift,                   action: Copy             }
 | 
			
		||||
  #- { key: F,              mods: Control|Shift, mode: ~Search,    action: SearchForward    }
 | 
			
		||||
  #- { key: B,              mods: Control|Shift, mode: ~Search,    action: SearchBackward   }
 | 
			
		||||
  #- { key: C,              mods: Control|Shift, mode: Vi|~Search, action: ClearSelection   }
 | 
			
		||||
  #- { key: Insert,         mods: Shift,                           action: PasteSelection   }
 | 
			
		||||
  #- { key: Key0,           mods: Control,                         action: ResetFontSize    }
 | 
			
		||||
  #- { key: Equals,         mods: Control,                         action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Plus,           mods: Control,                         action: IncreaseFontSize }
 | 
			
		||||
  #- { key: NumpadAdd,      mods: Control,                         action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Minus,          mods: Control,                         action: DecreaseFontSize }
 | 
			
		||||
  #- { key: NumpadSubtract, mods: Control,                         action: DecreaseFontSize }
 | 
			
		||||
 | 
			
		||||
  # (Windows only)
 | 
			
		||||
  #- { key: Return,   mods: Alt,           action: ToggleFullscreen }
 | 
			
		||||
 | 
			
		||||
  # (macOS only)
 | 
			
		||||
  #- { key: K,              mods: Command, mode: ~Vi|~Search, chars: "\x0c"            }
 | 
			
		||||
  #- { key: K,              mods: Command, mode: ~Vi|~Search, action: ClearHistory     }
 | 
			
		||||
  #- { key: Key0,           mods: Command,                    action: ResetFontSize    }
 | 
			
		||||
  #- { key: Equals,         mods: Command,                    action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Plus,           mods: Command,                    action: IncreaseFontSize }
 | 
			
		||||
  #- { key: NumpadAdd,      mods: Command,                    action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Minus,          mods: Command,                    action: DecreaseFontSize }
 | 
			
		||||
  #- { key: NumpadSubtract, mods: Command,                    action: DecreaseFontSize }
 | 
			
		||||
  #- { key: V,              mods: Command,                    action: Paste            }
 | 
			
		||||
  #- { key: C,              mods: Command,                    action: Copy             }
 | 
			
		||||
  #- { key: C,              mods: Command, mode: Vi|~Search,  action: ClearSelection   }
 | 
			
		||||
  #- { key: H,              mods: Command,                    action: Hide             }
 | 
			
		||||
  #- { key: M,              mods: Command,                    action: Minimize         }
 | 
			
		||||
  #- { key: Q,              mods: Command,                    action: Quit             }
 | 
			
		||||
  #- { key: W,              mods: Command,                    action: Quit             }
 | 
			
		||||
  #- { key: N,              mods: Command,                    action: SpawnNewInstance }
 | 
			
		||||
  #- { key: F,              mods: Command|Control,            action: ToggleFullscreen }
 | 
			
		||||
  #- { key: F,              mods: Command, mode: ~Search,     action: SearchForward    }
 | 
			
		||||
  #- { key: B,              mods: Command, mode: ~Search,     action: SearchBackward   }
 | 
			
		||||
 | 
			
		||||
#debug:
 | 
			
		||||
  # Display the time it takes to redraw each frame.
 | 
			
		||||
  #render_timer: false
 | 
			
		||||
 | 
			
		||||
  # Keep the log file after quitting Alacritty.
 | 
			
		||||
  #persistent_logging: false
 | 
			
		||||
 | 
			
		||||
  # Log level
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `log_level`:
 | 
			
		||||
  #   - Off
 | 
			
		||||
  #   - Error
 | 
			
		||||
  #   - Warn
 | 
			
		||||
  #   - Info
 | 
			
		||||
  #   - Debug
 | 
			
		||||
  #   - Trace
 | 
			
		||||
  #log_level: Warn
 | 
			
		||||
 | 
			
		||||
  # Print all received window events.
 | 
			
		||||
  #print_events: false
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +0,0 @@
 | 
			
		|||
[Desktop Entry]
 | 
			
		||||
Name=Discord
 | 
			
		||||
StartupWMClass=discord
 | 
			
		||||
Comment=All-in-one voice and text chat for gamers that's free, secure, and works on both your desktop and phone.
 | 
			
		||||
GenericName=Internet Messenger
 | 
			
		||||
Exec=/opt/discord/Discord --start-minimized
 | 
			
		||||
Icon=discord
 | 
			
		||||
Type=Application
 | 
			
		||||
Categories=Network;InstantMessaging;
 | 
			
		||||
Path=/usr/bin
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +0,0 @@
 | 
			
		|||
[Desktop Entry]
 | 
			
		||||
Name=Element
 | 
			
		||||
StartupWMClass=element
 | 
			
		||||
Comment=Chat client for matrix protocl
 | 
			
		||||
GenericName=Internet Messenger
 | 
			
		||||
Exec=/usr/bin/element-desktop --hidden
 | 
			
		||||
Icon=element
 | 
			
		||||
Type=Application
 | 
			
		||||
Categories=Network;InstantMessaging;
 | 
			
		||||
Path=/usr/bin
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
Name=OpenSnitch
 | 
			
		||||
Exec=/bin/sh -c 'pkill -15 opensnitch-ui; opensnitch-ui'
 | 
			
		||||
Icon=opensnitch-ui
 | 
			
		||||
GenericName=OpenSnitch Firewall
 | 
			
		||||
GenericName[hu]=OpenSnitch-tűzfal
 | 
			
		||||
Comment=Application firewall
 | 
			
		||||
Comment[es]=Firewall de aplicaciones
 | 
			
		||||
Comment[hu]=Alkalmazási tűzfal
 | 
			
		||||
Terminal=false
 | 
			
		||||
NoDisplay=false
 | 
			
		||||
Categories=System;Filesystem;Network;
 | 
			
		||||
Keywords=system;firewall;policies;security;polkit;policykit;
 | 
			
		||||
X-GNOME-Autostart-Delay=3
 | 
			
		||||
X-GNOME-Autostart-enabled=true
 | 
			
		||||
| 
						 | 
				
			
			@ -1,112 +0,0 @@
 | 
			
		|||
#? Config file for bpytop v. 1.0.56
 | 
			
		||||
 | 
			
		||||
#* Color theme, looks for a .theme file in "/usr/[local/]share/bpytop/themes" and "~/.config/bpytop/themes", "Default" for builtin default theme.
 | 
			
		||||
#* Prefix name by a plus sign (+) for a theme located in user themes folder, i.e. color_theme="+monokai"
 | 
			
		||||
color_theme="Default"
 | 
			
		||||
 | 
			
		||||
#* If the theme set background should be shown, set to False if you want terminal background transparency
 | 
			
		||||
theme_background=True
 | 
			
		||||
 | 
			
		||||
#* Manually set which boxes to show. Available values are "cpu mem net proc", seperate values with whitespace.
 | 
			
		||||
shown_boxes="cpu mem net proc"
 | 
			
		||||
 | 
			
		||||
#* Update time in milliseconds, increases automatically if set below internal loops processing time, recommended 2000 ms or above for better sample times for graphs.
 | 
			
		||||
update_ms=400
 | 
			
		||||
 | 
			
		||||
#* Processes update multiplier, sets how often the process list is updated as a multiplier of "update_ms".
 | 
			
		||||
#* Set to 2 or higher to greatly decrease bpytop cpu usage. (Only integers)
 | 
			
		||||
proc_update_mult=2
 | 
			
		||||
 | 
			
		||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu responsive",
 | 
			
		||||
#* "cpu lazy" updates top process over time, "cpu responsive" updates top process directly.
 | 
			
		||||
proc_sorting="memory"
 | 
			
		||||
 | 
			
		||||
#* Reverse sorting order, True or False.
 | 
			
		||||
proc_reversed=False
 | 
			
		||||
 | 
			
		||||
#* Show processes as a tree
 | 
			
		||||
proc_tree=True
 | 
			
		||||
 | 
			
		||||
#* Which depth the tree view should auto collapse processes at
 | 
			
		||||
tree_depth=3
 | 
			
		||||
 | 
			
		||||
#* Use the cpu graph colors in the process list.
 | 
			
		||||
proc_colors=True
 | 
			
		||||
 | 
			
		||||
#* Use a darkening gradient in the process list.
 | 
			
		||||
proc_gradient=True
 | 
			
		||||
 | 
			
		||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
 | 
			
		||||
proc_per_core=False
 | 
			
		||||
 | 
			
		||||
#* Show process memory as bytes instead of percent
 | 
			
		||||
proc_mem_bytes=True
 | 
			
		||||
 | 
			
		||||
#* Check cpu temperature, needs "osx-cpu-temp" on MacOS X.
 | 
			
		||||
check_temp=True
 | 
			
		||||
 | 
			
		||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
 | 
			
		||||
cpu_sensor=Auto
 | 
			
		||||
 | 
			
		||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found
 | 
			
		||||
show_coretemp=True
 | 
			
		||||
 | 
			
		||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
 | 
			
		||||
draw_clock="%X"
 | 
			
		||||
 | 
			
		||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
 | 
			
		||||
background_update=True
 | 
			
		||||
 | 
			
		||||
#* Custom cpu model name, empty string to disable.
 | 
			
		||||
custom_cpu_name=""
 | 
			
		||||
 | 
			
		||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with a comma ",".
 | 
			
		||||
#* Begin line with "exclude=" to change to exclude filter, oterwise defaults to "most include" filter. Example: disks_filter="exclude=/boot, /home/user"
 | 
			
		||||
disks_filter=""
 | 
			
		||||
 | 
			
		||||
#* Show graphs instead of meters for memory values.
 | 
			
		||||
mem_graphs=False
 | 
			
		||||
 | 
			
		||||
#* If swap memory should be shown in memory box.
 | 
			
		||||
show_swap=True
 | 
			
		||||
 | 
			
		||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
 | 
			
		||||
swap_disk=True
 | 
			
		||||
 | 
			
		||||
#* If mem box should be split to also show disks info.
 | 
			
		||||
show_disks=True
 | 
			
		||||
 | 
			
		||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
 | 
			
		||||
only_physical=True
 | 
			
		||||
 | 
			
		||||
#* Read disks list from /etc/fstab. This also disables only_physical.
 | 
			
		||||
use_fstab=False
 | 
			
		||||
 | 
			
		||||
#* Set fixed values for network graphs, default "10M" = 10 Mibibytes, possible units "K", "M", "G", append with "bit" for bits instead of bytes, i.e "100mbit"
 | 
			
		||||
net_download="10M"
 | 
			
		||||
net_upload="10M"
 | 
			
		||||
 | 
			
		||||
#* Start in network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
 | 
			
		||||
net_auto=True
 | 
			
		||||
 | 
			
		||||
#* Sync the scaling for download and upload to whichever currently has the highest scale
 | 
			
		||||
net_sync=False
 | 
			
		||||
 | 
			
		||||
#* If the network graphs color gradient should scale to bandwith usage or auto scale, bandwith usage is based on "net_download" and "net_upload" values
 | 
			
		||||
net_color_fixed=False
 | 
			
		||||
 | 
			
		||||
#* Starts with the Network Interface specified here.
 | 
			
		||||
net_iface=
 | 
			
		||||
 | 
			
		||||
#* Show battery stats in top right if battery is present
 | 
			
		||||
show_battery=True
 | 
			
		||||
 | 
			
		||||
#* Show init screen at startup, the init screen is purely cosmetical
 | 
			
		||||
show_init=False
 | 
			
		||||
 | 
			
		||||
#* Enable check for new version from github.com/aristocratos/bpytop at start.
 | 
			
		||||
update_check=True
 | 
			
		||||
 | 
			
		||||
#* Set loglevel for "~/.config/bpytop/error.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
 | 
			
		||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
 | 
			
		||||
log_level=WARNING
 | 
			
		||||
| 
						 | 
				
			
			@ -1,13 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "BACKGROUND_COLOR": "#202225",
 | 
			
		||||
  "IS_MAXIMIZED": false,
 | 
			
		||||
  "IS_MINIMIZED": false,
 | 
			
		||||
  "WINDOW_BOUNDS": {
 | 
			
		||||
    "x": 912,
 | 
			
		||||
    "y": 42,
 | 
			
		||||
    "width": 990,
 | 
			
		||||
    "height": 1020
 | 
			
		||||
  },
 | 
			
		||||
  "DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true,
 | 
			
		||||
  "SKIP_HOST_UPDATE": true
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,443 +0,0 @@
 | 
			
		|||
[global]
 | 
			
		||||
 | 
			
		||||
    ### Display ###
 | 
			
		||||
 | 
			
		||||
    # Which monitor should the notifications be shown on
 | 
			
		||||
    monitor = 0
 | 
			
		||||
 | 
			
		||||
    # Display notifications on focused monitor. Possible modes:
 | 
			
		||||
    # mouse: follow mouse pointer
 | 
			
		||||
    # keyboard: follow window with keyboard focus
 | 
			
		||||
    # none: don't follow anything
 | 
			
		||||
    #
 | 
			
		||||
    # keyboard needs a window manager that exports 
 | 
			
		||||
    # _NET_ACTIVE_WINDOW propery! This should be the case for almost
 | 
			
		||||
    # all modern window managers.
 | 
			
		||||
    #
 | 
			
		||||
    # If this option isn't none, monitor option will be ignored.
 | 
			
		||||
    follow = mouse
 | 
			
		||||
 | 
			
		||||
    ### Geometry ###
 | 
			
		||||
 | 
			
		||||
    # Dynamic width from 0 to 300
 | 
			
		||||
    # width = (0, 300)
 | 
			
		||||
    # constant width of 300
 | 
			
		||||
    # width = 300
 | 
			
		||||
    width = 270
 | 
			
		||||
 | 
			
		||||
    # The maximum height of a single notification, excluding the frame.
 | 
			
		||||
    height = 300
 | 
			
		||||
 | 
			
		||||
    # Position the notification in the top right corner
 | 
			
		||||
    origin = top-right
 | 
			
		||||
 | 
			
		||||
    # Offset from the origin
 | 
			
		||||
    offset = 30x30
 | 
			
		||||
 | 
			
		||||
    # Scale factor. It is auto-detected if value is 0.
 | 
			
		||||
    scale = 0
 | 
			
		||||
 | 
			
		||||
    # Maximum number of notifications (0 means no limit)
 | 
			
		||||
    notification_limit = 0
 | 
			
		||||
 | 
			
		||||
    ### Progress bar ###
 | 
			
		||||
 | 
			
		||||
    # Turn on the progress bar. It appears when a progress hint is passed
 | 
			
		||||
    # with for example dunstify -h int:value:12
 | 
			
		||||
    progress_bar = true
 | 
			
		||||
 | 
			
		||||
    # Set the progress bar height. This includes the frame, so make sure
 | 
			
		||||
    # it's at least twice as big as the frame width.
 | 
			
		||||
    progress_bar_height = 30
 | 
			
		||||
 | 
			
		||||
    # Set the frame width of the progress bar
 | 
			
		||||
    progress_bar_frame_width = 1
 | 
			
		||||
 | 
			
		||||
    # Set the minimum width for the progress bar
 | 
			
		||||
    progress_bar_min_width = 150
 | 
			
		||||
 | 
			
		||||
    # Set the maximum width for the progress bar
 | 
			
		||||
    progress_bar_max_width = 300
 | 
			
		||||
 | 
			
		||||
    # Show how many messages are currently hidden (because of
 | 
			
		||||
    # notification_limit).
 | 
			
		||||
    indicate_hidden = yes
 | 
			
		||||
 | 
			
		||||
    # The transparency of the window.  Range: [0; 100].
 | 
			
		||||
    # This option will only work if a compositing window manager is
 | 
			
		||||
    # present (e.g. xcompmgr, compiz, picom, etc.). (X11 only)
 | 
			
		||||
    transparency = 20
 | 
			
		||||
 | 
			
		||||
    # Draw a line of "separator_height" pixel height between two 
 | 
			
		||||
    # notifications. Set to 0 to disable.
 | 
			
		||||
    separator_height = 2
 | 
			
		||||
 | 
			
		||||
    # Padding between text and separator.
 | 
			
		||||
    padding = 10
 | 
			
		||||
 | 
			
		||||
    # Horizontal padding
 | 
			
		||||
    horizontal_padding = 10
 | 
			
		||||
 | 
			
		||||
    # Padding between text and icon.
 | 
			
		||||
    text_icon_padding = 0
 | 
			
		||||
 | 
			
		||||
    # Defines width in pixels of fram around the notification window.
 | 
			
		||||
    # Set to 0 to disable.
 | 
			
		||||
    frame_width = 3
 | 
			
		||||
 | 
			
		||||
    # Defines color of the frame around the notification window
 | 
			
		||||
    frame_color = "#aaaaaa"
 | 
			
		||||
 | 
			
		||||
    # Define a color for the separator.
 | 
			
		||||
    # possible values are:
 | 
			
		||||
    #  * auto: dunst tries to find a color fitting to the background;
 | 
			
		||||
    #  * foreground: use the same color as the foreground;
 | 
			
		||||
    #  * frame: use the same color as the frame;
 | 
			
		||||
    #  * anything else will be interpreted as a X color.
 | 
			
		||||
    separator_color = frame
 | 
			
		||||
 | 
			
		||||
    # Sort messages by urgency.
 | 
			
		||||
    sort = yes
 | 
			
		||||
 | 
			
		||||
    # Don't remove messages if the user is idle (no mouse/keyboard input)
 | 
			
		||||
    # for longer than idle_threshold seconds (0 to disable)
 | 
			
		||||
    # A client can set the 'transient' hint to bypass this. See the rules
 | 
			
		||||
    # section for how to disable this if necessary
 | 
			
		||||
    idle_threshold = 120
 | 
			
		||||
 | 
			
		||||
    ### Text ###
 | 
			
		||||
    font = JetBrains Mono 11
 | 
			
		||||
 | 
			
		||||
    # The spacing between the lines. If the height is smaller than the
 | 
			
		||||
    # font height, it will get raised to the font height.
 | 
			
		||||
    line_height = 0
 | 
			
		||||
 | 
			
		||||
    # Possible values are:
 | 
			
		||||
    # full: Allow a small subset of html markup in notifications:
 | 
			
		||||
    #        <b>bold</b>
 | 
			
		||||
    #        <i>italic</i>
 | 
			
		||||
    #        <s>strikethrough</s>
 | 
			
		||||
    #        <u>underline</u>
 | 
			
		||||
    #
 | 
			
		||||
    #        For a complete reference see
 | 
			
		||||
    #        <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
 | 
			
		||||
    #
 | 
			
		||||
    # strip: This setting is provided for compatibility with some broken
 | 
			
		||||
    #        clients that send markup even though it's not enabled on the
 | 
			
		||||
    #        server. Dunst will try to strip the markup but the parsing is
 | 
			
		||||
    #        simplistic so using this option outside of matching rules for
 | 
			
		||||
    #        specific applications *IS GREATLY DISCOURAGED*.
 | 
			
		||||
    #
 | 
			
		||||
    # no:    Disable markup parsing, incoming notifications will be treated as
 | 
			
		||||
    #        plain text. Dunst will not advertise that it has the body-markup
 | 
			
		||||
    #        capability if this is set as a global setting.
 | 
			
		||||
    #
 | 
			
		||||
    # It's important to note that markup inside the format option will be parsed
 | 
			
		||||
    # regardless of what this is set to.
 | 
			
		||||
    markup = full
 | 
			
		||||
 | 
			
		||||
    # The format of the message.  Possible variables are:
 | 
			
		||||
    #   %a  appname
 | 
			
		||||
    #   %s  summary
 | 
			
		||||
    #   %b  body
 | 
			
		||||
    #   %i  iconname (including its path)
 | 
			
		||||
    #   %I  iconname (without its path)
 | 
			
		||||
    #   %p  progress value if set ([  0%] to [100%]) or nothing
 | 
			
		||||
    #   %n  progress value if set without any extra characters
 | 
			
		||||
    #   %%  Literal %
 | 
			
		||||
    # Markup is allowed
 | 
			
		||||
    format = "<b>%a - %s</b>\n%b"
 | 
			
		||||
 | 
			
		||||
    # Alignment of the message text.
 | 
			
		||||
    # Possible values are "left", "center" and "right".
 | 
			
		||||
    alignment = left
 | 
			
		||||
 | 
			
		||||
    # Vertical alignment of message text and icon.
 | 
			
		||||
    # Possible values are "top", "center" and "bottom".
 | 
			
		||||
    vertical_alignment = center
 | 
			
		||||
 | 
			
		||||
    # Wrap longer sentences which don't fit into the horizonal size
 | 
			
		||||
    # of the noticication. If set to no, longer sententences will be truncated
 | 
			
		||||
    word_wrap = yes
 | 
			
		||||
 | 
			
		||||
    # Specify where to make an ellipsis in the long lines.
 | 
			
		||||
    # Possible values are "start", "middle", "end".
 | 
			
		||||
    ellipsize = middle
 | 
			
		||||
 | 
			
		||||
    # Ignore newlines '\n' in notifications.
 | 
			
		||||
    ignore_newline = no
 | 
			
		||||
 | 
			
		||||
    # Show age of message if message is older than show_age_threshold seconds
 | 
			
		||||
    # Set to -1 to disable, 0 to always show.
 | 
			
		||||
    show_age_threshold = 60
 | 
			
		||||
 | 
			
		||||
    # Merge multiple notifications with the same content
 | 
			
		||||
    stack_duplicates = true
 | 
			
		||||
 | 
			
		||||
    # Hide the count of merged notifications with the same content
 | 
			
		||||
    hide_duplicate_count = false
 | 
			
		||||
 | 
			
		||||
    # Display indicators for URLs (U) and actions (A)
 | 
			
		||||
    show_indicators = yes
 | 
			
		||||
 | 
			
		||||
    ### Icons ###
 | 
			
		||||
 | 
			
		||||
    # Align icons left/right/off
 | 
			
		||||
    icon_position = left
 | 
			
		||||
 | 
			
		||||
    # Scale small icons up to this size, set to 0 to disable. Helpful
 | 
			
		||||
    # for e.g. small files or high-dpi screens. In case of conflict,
 | 
			
		||||
    # max_icon_size takes precedence over this.
 | 
			
		||||
    min_icon_size = 0
 | 
			
		||||
 | 
			
		||||
    # Scale larger icons down to this size, set to 0 to disable
 | 
			
		||||
    max_icon_size = 32
 | 
			
		||||
 | 
			
		||||
    # Paths to default icons
 | 
			
		||||
    icon_path = /usr/share/icons/hicolor/16x16/status/:/usr/share/icons/hicolor/16x16/devices/:/usr/share/icons/hicolor/16x16/apps/
 | 
			
		||||
 | 
			
		||||
    ### History ###
 | 
			
		||||
 | 
			
		||||
    # Should a notification popped up from history be sticky or timeout
 | 
			
		||||
    # as if it would normally do.
 | 
			
		||||
    sticky_history = yes
 | 
			
		||||
 | 
			
		||||
    # Maximum amount of notifications kept in history
 | 
			
		||||
    history_length = 20
 | 
			
		||||
 | 
			
		||||
    ### Misc/Advanced ###
 | 
			
		||||
 | 
			
		||||
    # dmenu path
 | 
			
		||||
    dmenu = /usr/local/bin/dmenu -p dunst:
 | 
			
		||||
 | 
			
		||||
    # Browser for opening urls in content menu
 | 
			
		||||
    browser = /usr/bin/xdg-open
 | 
			
		||||
 | 
			
		||||
    # Always run rule-defined scripts, even if the notification is suppressed
 | 
			
		||||
    always_run_script = true
 | 
			
		||||
 | 
			
		||||
    # Define the title of the windows spawned by dunst
 | 
			
		||||
    title = Dunst
 | 
			
		||||
 | 
			
		||||
    # Define the class of the windows spawned by dunst
 | 
			
		||||
    class = Dunst
 | 
			
		||||
 | 
			
		||||
    # Define the corner radius of the notification window
 | 
			
		||||
    # in pixel size. If the radius is 0, you have no rounded
 | 
			
		||||
    # corners.
 | 
			
		||||
    # The radius will be automatically lowered if it exceeds half of the
 | 
			
		||||
    # notification height to avoid clipping text and/or icons.
 | 
			
		||||
    corner_radius = 0
 | 
			
		||||
 | 
			
		||||
    # Ignore the dbus closeNotification message.
 | 
			
		||||
    # Useful to enforce the timeout set by dunst configuration. Without this
 | 
			
		||||
    # parameter, an application may close the notification sent before the
 | 
			
		||||
    # user defined timeout.
 | 
			
		||||
    ignore_dbusclose = false
 | 
			
		||||
 | 
			
		||||
    ### Wayland ###
 | 
			
		||||
    # These settings are Wayland-specific. They have no effect when using X11
 | 
			
		||||
 | 
			
		||||
    # Uncomment this if you want to let notications appear under fullscreen
 | 
			
		||||
    # applications (default: overlay)
 | 
			
		||||
    # layer = top
 | 
			
		||||
 | 
			
		||||
    # Set this to true to use X11 output on Wayland.
 | 
			
		||||
    force_xwayland = false
 | 
			
		||||
 | 
			
		||||
    ### Legacy ###
 | 
			
		||||
 | 
			
		||||
    # Use the Xinerama extension instead of RandR for multi-monitor support.
 | 
			
		||||
    # This setting is provided for compatibility with older nVidia drivers that
 | 
			
		||||
    # do not support RandR and using it on systems that support RandR is highly
 | 
			
		||||
    # discouraged.
 | 
			
		||||
    #
 | 
			
		||||
    # By enabling this setting dunst will not be able to detect when a monitor
 | 
			
		||||
    # is connected or disconnected which might break follow mode if the screen
 | 
			
		||||
    # layout changes.
 | 
			
		||||
    force_xinerama = false
 | 
			
		||||
 | 
			
		||||
    ### Mouse ###
 | 
			
		||||
 | 
			
		||||
    # Defines list of actions for each mouse event
 | 
			
		||||
    # Possible values are:
 | 
			
		||||
    # * none: Don't do anything.
 | 
			
		||||
    # * do_action: Invoke the action determined by the action_name rule. If there is no
 | 
			
		||||
    #              such action, open the context menu.
 | 
			
		||||
    # * open_url: If the notification has exactly one url, open it. If there are multiple
 | 
			
		||||
    #             ones, open the context menu.
 | 
			
		||||
    # * close_current: Close current notification.
 | 
			
		||||
    # * close_all: Close all notifications.
 | 
			
		||||
    # * context: Open context menu for the notification.
 | 
			
		||||
    # * context_all: Open context menu for all notifications.
 | 
			
		||||
    # These values can be strung together for each mouse event, and
 | 
			
		||||
    # will be executed in sequence.
 | 
			
		||||
    mouse_left_click = do_action, open_url, close_current
 | 
			
		||||
    mouse_middle_click = context
 | 
			
		||||
    mouse_right_click = close_current
 | 
			
		||||
 | 
			
		||||
# Experimental features that may or may not work correctly. Do not expect them
 | 
			
		||||
# to have a consistent behaviour across releases.
 | 
			
		||||
[experimental]
 | 
			
		||||
    # Calculate the dpi to use on a per-monitor basis.
 | 
			
		||||
    # If this setting is enabled the Xft.dpi value will be ignored and instead
 | 
			
		||||
    # dunst will attempt to calculate an appropriate dpi value for each monitor
 | 
			
		||||
    # using the resolution and physical size. This might be useful in setups
 | 
			
		||||
    # where there are multiple screens with very different dpi values.
 | 
			
		||||
    per_monitor_dpi = false
 | 
			
		||||
 | 
			
		||||
[urgency_low]
 | 
			
		||||
    highlight = "#fe6c5a"
 | 
			
		||||
    background = "#1e2137fa"
 | 
			
		||||
    frame_color = "#27292c"
 | 
			
		||||
    foreground = "#ffffff"
 | 
			
		||||
 | 
			
		||||
    timeout = 5
 | 
			
		||||
    # Icon for notifications with low urgency, uncomment to enable
 | 
			
		||||
    #icon = /path/to/icon
 | 
			
		||||
 | 
			
		||||
[urgency_normal]
 | 
			
		||||
    highlight = "#fe6c5a"
 | 
			
		||||
    background = "#141c21fa"
 | 
			
		||||
    frame_color = "#27292c"
 | 
			
		||||
    foreground = "#ffffffff"
 | 
			
		||||
 | 
			
		||||
    timeout = 10
 | 
			
		||||
    # Icon for notifications with normal urgency, uncomment to enable
 | 
			
		||||
    #icon = /path/to/icon
 | 
			
		||||
 | 
			
		||||
[urgency_critical]
 | 
			
		||||
    highlight = "#fe6c5a"
 | 
			
		||||
    background = "#dd130ddd"
 | 
			
		||||
    frame_color = "#27292c"
 | 
			
		||||
    foreground = "#ffffffff"
 | 
			
		||||
 | 
			
		||||
    timeout = 0
 | 
			
		||||
    icon = arbt
 | 
			
		||||
    # Icon for notifications with critical urgency, uncomment to enable
 | 
			
		||||
    #icon = /path/to/icon
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Every section that isn't one of the above is interpreted as a rules to
 | 
			
		||||
# override settings for certain messages.
 | 
			
		||||
#
 | 
			
		||||
# Messages can be matched by
 | 
			
		||||
#    appname (discouraged, see desktop_entry)
 | 
			
		||||
#    body
 | 
			
		||||
#    category
 | 
			
		||||
#    desktop_entry
 | 
			
		||||
#    icon
 | 
			
		||||
#    match_transient
 | 
			
		||||
#    msg_urgency
 | 
			
		||||
#    stack_tag
 | 
			
		||||
#    summary
 | 
			
		||||
#
 | 
			
		||||
# and you can override the
 | 
			
		||||
#    background
 | 
			
		||||
#    foreground
 | 
			
		||||
#    format
 | 
			
		||||
#    frame_color
 | 
			
		||||
#    fullscreen
 | 
			
		||||
#    new_icon
 | 
			
		||||
#    set_stack_tag
 | 
			
		||||
#    set_transient
 | 
			
		||||
#    set_category
 | 
			
		||||
#    timeout
 | 
			
		||||
#    urgency
 | 
			
		||||
#    icon_position
 | 
			
		||||
#    skip_display
 | 
			
		||||
#    history_ignore
 | 
			
		||||
#    action_name
 | 
			
		||||
#    word_wrap
 | 
			
		||||
#    ellipsize
 | 
			
		||||
#    alignment
 | 
			
		||||
#    hide_text
 | 
			
		||||
#
 | 
			
		||||
# Shell-like globbing will get expanded.
 | 
			
		||||
#
 | 
			
		||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
 | 
			
		||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
 | 
			
		||||
# the desktop-entry won't get localized.
 | 
			
		||||
#
 | 
			
		||||
# SCRIPTING
 | 
			
		||||
# You can specify a script that gets run when the rule matches by
 | 
			
		||||
# setting the "script" option.
 | 
			
		||||
# The script will be called as follows:
 | 
			
		||||
#   script appname summary body icon urgency
 | 
			
		||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
 | 
			
		||||
#
 | 
			
		||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
 | 
			
		||||
# to find fitting options for rules.
 | 
			
		||||
 | 
			
		||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
 | 
			
		||||
# client
 | 
			
		||||
#[transient_disable]
 | 
			
		||||
#    match_transient = yes
 | 
			
		||||
#    set_transient = no
 | 
			
		||||
#
 | 
			
		||||
# Make the handling of transient notifications more strict by making them not
 | 
			
		||||
# be placed in history.
 | 
			
		||||
#[transient_history_ignore]
 | 
			
		||||
#    match_transient = yes
 | 
			
		||||
#    history_ignore = yes
 | 
			
		||||
 | 
			
		||||
# fullscreen values
 | 
			
		||||
# show: show the notifications, regardless if there is a fullscreen window opened
 | 
			
		||||
# delay: displays the new notification, if there is no fullscreen window active
 | 
			
		||||
#        If the notification is already drawn, it won't get undrawn.
 | 
			
		||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
 | 
			
		||||
#           withdrawn from screen again and will get delayed like a new notification
 | 
			
		||||
#[fullscreen_delay_everything]
 | 
			
		||||
#    fullscreen = delay
 | 
			
		||||
#[fullscreen_show_critical]
 | 
			
		||||
#    msg_urgency = critical
 | 
			
		||||
#    fullscreen = show
 | 
			
		||||
 | 
			
		||||
#[espeak]
 | 
			
		||||
#    summary = "*"
 | 
			
		||||
#    script = dunst_espeak.sh
 | 
			
		||||
 | 
			
		||||
#[script-test]
 | 
			
		||||
#    summary = "*script*"
 | 
			
		||||
#    script = dunst_test.sh
 | 
			
		||||
 | 
			
		||||
#[ignore]
 | 
			
		||||
#    # This notification will not be displayed
 | 
			
		||||
#    summary = "foobar"
 | 
			
		||||
#    skip_display = true
 | 
			
		||||
 | 
			
		||||
#[history-ignore]
 | 
			
		||||
#    # This notification will not be saved in history
 | 
			
		||||
#    summary = "foobar"
 | 
			
		||||
#    history_ignore = yes
 | 
			
		||||
 | 
			
		||||
#[skip-display]
 | 
			
		||||
#    # This notification will not be displayed, but will be included in the history
 | 
			
		||||
#    summary = "foobar"
 | 
			
		||||
#    skip_display = yes
 | 
			
		||||
 | 
			
		||||
#[signed_on]
 | 
			
		||||
#    appname = Pidgin
 | 
			
		||||
#    summary = "*signed on*"
 | 
			
		||||
#    urgency = low
 | 
			
		||||
#
 | 
			
		||||
#[signed_off]
 | 
			
		||||
#    appname = Pidgin
 | 
			
		||||
#    summary = *signed off*
 | 
			
		||||
#    urgency = low
 | 
			
		||||
#
 | 
			
		||||
#[says]
 | 
			
		||||
#    appname = Pidgin
 | 
			
		||||
#    summary = *says*
 | 
			
		||||
#    urgency = critical
 | 
			
		||||
#
 | 
			
		||||
#[twitter]
 | 
			
		||||
#    appname = Pidgin
 | 
			
		||||
#    summary = *twitter.com*
 | 
			
		||||
#    urgency = normal
 | 
			
		||||
#
 | 
			
		||||
#[stack-volumes]
 | 
			
		||||
#    appname = "some_volume_notifiers"
 | 
			
		||||
#    set_stack_tag = "volume"
 | 
			
		||||
#
 | 
			
		||||
# vim: ft=cfg
 | 
			
		||||
| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
[General]
 | 
			
		||||
contrastOpacity=188
 | 
			
		||||
disabledTrayIcon=true
 | 
			
		||||
drawColor=#ad00ff
 | 
			
		||||
drawThickness=1
 | 
			
		||||
filenamePattern=Screenshot_%Y-%m-%d_%H-%M-%S
 | 
			
		||||
savePath=/home/itsdrike/Pictures/Screenshots
 | 
			
		||||
savePathFixed=false
 | 
			
		||||
setSaveAsFileExtension=Portable Network Graphic file (PNG) (*.png)
 | 
			
		||||
showStartupLaunchMessage=true
 | 
			
		||||
startupLaunch=true
 | 
			
		||||
 | 
			
		||||
[Shortcuts]
 | 
			
		||||
TYPE_ARROW=A
 | 
			
		||||
TYPE_CIRCLE=C
 | 
			
		||||
TYPE_CIRCLECOUNT=
 | 
			
		||||
TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return
 | 
			
		||||
TYPE_COPY=Ctrl+C
 | 
			
		||||
TYPE_DELETE_CURRENT_TOOL=Del
 | 
			
		||||
TYPE_DRAWER=D
 | 
			
		||||
TYPE_EXIT=Ctrl+Q
 | 
			
		||||
TYPE_MARKER=M
 | 
			
		||||
TYPE_MOVESELECTION=Ctrl+M
 | 
			
		||||
TYPE_MOVE_DOWN=Down
 | 
			
		||||
TYPE_MOVE_LEFT=Left
 | 
			
		||||
TYPE_MOVE_RIGHT=Right
 | 
			
		||||
TYPE_MOVE_UP=Up
 | 
			
		||||
TYPE_OPEN_APP=Ctrl+O
 | 
			
		||||
TYPE_PENCIL=P
 | 
			
		||||
TYPE_PIN=
 | 
			
		||||
TYPE_PIXELATE=B
 | 
			
		||||
TYPE_RECTANGLE=R
 | 
			
		||||
TYPE_REDO=Ctrl+Shift+Z
 | 
			
		||||
TYPE_RESIZE_DOWN=Shift+Down
 | 
			
		||||
TYPE_RESIZE_LEFT=Shift+Left
 | 
			
		||||
TYPE_RESIZE_RIGHT=Shift+Right
 | 
			
		||||
TYPE_RESIZE_UP=Shift+Up
 | 
			
		||||
TYPE_SAVE=Ctrl+S
 | 
			
		||||
TYPE_SELECTION=S
 | 
			
		||||
TYPE_SELECTIONINDICATOR=
 | 
			
		||||
TYPE_SELECT_ALL=Ctrl+A
 | 
			
		||||
TYPE_TEXT=T
 | 
			
		||||
TYPE_TOGGLE_PANEL=Space
 | 
			
		||||
TYPE_UNDO=Ctrl+Z
 | 
			
		||||
| 
						 | 
				
			
			@ -1,83 +0,0 @@
 | 
			
		|||
[user]
 | 
			
		||||
    name = ItsDrike
 | 
			
		||||
    email = itsdrike@protonmail.com
 | 
			
		||||
    signingkey = B014E761034AF742
 | 
			
		||||
[alias]
 | 
			
		||||
    quickclone = "clone --single-branch --depth=1"
 | 
			
		||||
    bareclone = "!sh -c 'git clone --bare \"$0\" \"$1\"/.bare; echo \"gitdir: ./.bare\" > \"$1/.git\"'"
 | 
			
		||||
    bareinit = "!sh -c 'git init --bare \"$0\"/.bare; echo \"gitdir: ./.bare\" > \"$0/.git\"'"
 | 
			
		||||
    cleanup = "!default_branch=$(git remote show origin | awk '/HEAD branch/ {print $NF}'); git remote prune origin && git checkout -q $default_branch && git for-each-ref refs/heads/ '--format=%(refname:short)' | while read branch; do mergeBase=$(git merge-base $default_branch $branch) && [[ $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch^{tree}) -p $mergeBase -m _)) == '-'* ]] && git branch -D $branch; done"
 | 
			
		||||
 | 
			
		||||
    m = "merge"
 | 
			
		||||
    p = "push"
 | 
			
		||||
    pl = "pull"
 | 
			
		||||
    f = "fetch"
 | 
			
		||||
 | 
			
		||||
    s = "status --short --branch"
 | 
			
		||||
    ss = "status"
 | 
			
		||||
 | 
			
		||||
    ch = "checkout"
 | 
			
		||||
    chb = "checkout -b"
 | 
			
		||||
 | 
			
		||||
    undo = "reset --soft HEAD~"
 | 
			
		||||
    redo = "reset HEAD@{1}"
 | 
			
		||||
    unstage = "restore --staged"
 | 
			
		||||
 | 
			
		||||
    c = "commit"
 | 
			
		||||
    ca = "commit --ammend"
 | 
			
		||||
    ci = "commit --interactive"
 | 
			
		||||
    cm = "commit --message"
 | 
			
		||||
    cv = "commit --verbose"
 | 
			
		||||
 | 
			
		||||
    a = "add"
 | 
			
		||||
    aa = "add --all"
 | 
			
		||||
    ap = "add --patch"
 | 
			
		||||
    au = "add --update"
 | 
			
		||||
 | 
			
		||||
    d = "diff"
 | 
			
		||||
    dc = "diff --cached"
 | 
			
		||||
    ds = "diff --staged"
 | 
			
		||||
    dw = "diff --word-diff"
 | 
			
		||||
    dcm = "!sh -c 'git diff $0~ $0'"
 | 
			
		||||
 | 
			
		||||
    b = "branch"
 | 
			
		||||
    ba = "branch --all"
 | 
			
		||||
    bd = "branch --delete"
 | 
			
		||||
    bD = "branch --delete --force"
 | 
			
		||||
    bm = "branch --move"
 | 
			
		||||
    bM = "branch --move --force"
 | 
			
		||||
 | 
			
		||||
    l = "log --oneline --decorate --all --graph"
 | 
			
		||||
    lp = "log --patch"
 | 
			
		||||
    lo = "log --pretty=oneline --abbrev-commit --graph"
 | 
			
		||||
    lg = "log --all --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --"
 | 
			
		||||
 | 
			
		||||
    set-upstream = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
 | 
			
		||||
 | 
			
		||||
    stash-staged = "!sh -c 'git stash --keep-index; git stash push -m \"staged\" --keep-index; git stash pop stash@{1}'"
 | 
			
		||||
 | 
			
		||||
    find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'"
 | 
			
		||||
    show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'"
 | 
			
		||||
 | 
			
		||||
	comitter-lines = "!git log --author=\"$1\" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\\n\", add, subs, loc }' #"
 | 
			
		||||
    total-lines = "!git ls-files | xargs cat | wc -l"
 | 
			
		||||
[credential]
 | 
			
		||||
    helper = store --file ~/.config/git/git-credentials
 | 
			
		||||
[core]
 | 
			
		||||
    excludefile = ~/.config/git/global_gitignore
 | 
			
		||||
    editor = nvim
 | 
			
		||||
    pager = delta
 | 
			
		||||
[interactive]
 | 
			
		||||
    diffFilter = delta --color-only
 | 
			
		||||
[delta]
 | 
			
		||||
    line-numbers = true
 | 
			
		||||
[merge]
 | 
			
		||||
    conflictstyle = diff3
 | 
			
		||||
[diff]
 | 
			
		||||
    tool = vimdiff
 | 
			
		||||
[fetch]
 | 
			
		||||
    prune = true
 | 
			
		||||
[commit]
 | 
			
		||||
    gpgsign = true
 | 
			
		||||
[init]
 | 
			
		||||
    defaultBranch = main
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +0,0 @@
 | 
			
		|||
# vim: filetype=conf
 | 
			
		||||
# Byte-compiled / optimized / DLL Files
 | 
			
		||||
__pycache__/
 | 
			
		||||
*.py[cod]
 | 
			
		||||
*$py.class
 | 
			
		||||
 | 
			
		||||
# Virtual Environments
 | 
			
		||||
.venv/
 | 
			
		||||
 | 
			
		||||
# Editor project settings
 | 
			
		||||
## VSCode
 | 
			
		||||
.vscode/
 | 
			
		||||
## PyCharm intellij
 | 
			
		||||
.idea/
 | 
			
		||||
## repl.it
 | 
			
		||||
.replit
 | 
			
		||||
## spyder
 | 
			
		||||
.spyproject/
 | 
			
		||||
.spyderproject/
 | 
			
		||||
 | 
			
		||||
# Custom attributes for folders on Mac OS
 | 
			
		||||
.DS_Store
 | 
			
		||||
 | 
			
		||||
# Personal TODO files
 | 
			
		||||
TODO
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
[Filechooser Settings]
 | 
			
		||||
LocationMode=path-bar
 | 
			
		||||
ShowHidden=false
 | 
			
		||||
ShowSizeColumn=true
 | 
			
		||||
GeometryX=510
 | 
			
		||||
GeometryY=260
 | 
			
		||||
GeometryWidth=900
 | 
			
		||||
GeometryHeight=584
 | 
			
		||||
SortColumn=name
 | 
			
		||||
SortOrder=ascending
 | 
			
		||||
StartupMode=recent
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
# DO NOT EDIT! This file will be overwritten by LXAppearance.
 | 
			
		||||
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
 | 
			
		||||
 | 
			
		||||
include "/home/itsdrike/.gtkrc-2.0.mine"
 | 
			
		||||
gtk-theme-name="Adwaita-dark"
 | 
			
		||||
gtk-icon-theme-name="Papirus-Breeze-Dark"
 | 
			
		||||
gtk-font-name="Noto Sans,  10"
 | 
			
		||||
gtk-cursor-theme-name="BreezeX-Light"
 | 
			
		||||
gtk-cursor-theme-size=24
 | 
			
		||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
 | 
			
		||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
 | 
			
		||||
gtk-button-images=1
 | 
			
		||||
gtk-menu-images=1
 | 
			
		||||
gtk-enable-event-sounds=1
 | 
			
		||||
gtk-enable-input-feedback-sounds=1
 | 
			
		||||
gtk-xft-antialias=1
 | 
			
		||||
gtk-xft-hinting=1
 | 
			
		||||
gtk-xft-hintstyle="hintslight"
 | 
			
		||||
gtk-modules="colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
file:///home/itsdrike/Pictures Pictures
 | 
			
		||||
file:///home/itsdrike/Downloads Downloads
 | 
			
		||||
file:///home/itsdrike/Personal Personal
 | 
			
		||||
| 
						 | 
				
			
			@ -1,21 +0,0 @@
 | 
			
		|||
[Settings]
 | 
			
		||||
gtk-application-prefer-dark-theme=true
 | 
			
		||||
gtk-button-images=1
 | 
			
		||||
gtk-cursor-theme-name=BreezeX-Light
 | 
			
		||||
gtk-cursor-theme-size=24
 | 
			
		||||
gtk-decoration-layout=icon:minimize,maximize,close
 | 
			
		||||
gtk-enable-animations=true
 | 
			
		||||
gtk-font-name=Noto Sans,  10
 | 
			
		||||
gtk-icon-theme-name=Papirus-Breeze-Dark
 | 
			
		||||
gtk-menu-images=1
 | 
			
		||||
gtk-modules=colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module
 | 
			
		||||
gtk-primary-button-warps-slider=false
 | 
			
		||||
gtk-shell-shows-menubar=1
 | 
			
		||||
gtk-theme-name=Adwaita-dark
 | 
			
		||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
 | 
			
		||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
 | 
			
		||||
gtk-enable-event-sounds=1
 | 
			
		||||
gtk-enable-input-feedback-sounds=1
 | 
			
		||||
gtk-xft-antialias=1
 | 
			
		||||
gtk-xft-hinting=1
 | 
			
		||||
gtk-xft-hintstyle=hintslight
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
readonly PREVIEW_ID="preview"
 | 
			
		||||
 | 
			
		||||
printf '{"action": "remove", "identifier": "%s"}\n' "$PREVIEW_ID" > "$FIFO_UEBERZUG"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,21 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
path="$1"
 | 
			
		||||
x="$2"
 | 
			
		||||
y="$3"
 | 
			
		||||
width="$4"
 | 
			
		||||
height="$5"
 | 
			
		||||
PREVIEW_ID="preview"
 | 
			
		||||
 | 
			
		||||
if [ -n "$FIFO_UEBERZUG" ]; then
 | 
			
		||||
    printf '{"action": "add", "identifier": "%s", "x": %d, "y": %d, "width": %d, "height": %d, "scaler": "contain", "scaling_position_x": 0.5, "scaling_position_y": 0.5, "path": "%s"}\n' \
 | 
			
		||||
        "$PREVIEW_ID" "$x" "$y" "$width" "$height" "$path" > "$FIFO_UEBERZUG"
 | 
			
		||||
else
 | 
			
		||||
    # Ueberzug isn't avialable, try to use pixterm
 | 
			
		||||
    if command -v pixterm > /dev/null; then
 | 
			
		||||
        pixterm -s 2 -tr "$x" -tc "$width" "$path"
 | 
			
		||||
    else
 | 
			
		||||
        >&2 echo "ueberzug not running, pixterm fallback not found!"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,144 +0,0 @@
 | 
			
		|||
# Basic settings
 | 
			
		||||
set previewer ~/.config/lf/previewer.sh
 | 
			
		||||
set cleaner ~/.config/lf/clear_img.sh
 | 
			
		||||
set preview true
 | 
			
		||||
set hidden true
 | 
			
		||||
set drawbox true
 | 
			
		||||
set icons true
 | 
			
		||||
set ignorecase true
 | 
			
		||||
set scrolloff 5
 | 
			
		||||
 | 
			
		||||
# Use $EDITOR for text
 | 
			
		||||
cmd open ${{
 | 
			
		||||
    case $(file --mime-type "$f" -bL) in
 | 
			
		||||
        text/*|application/json) $EDITOR "$f";;
 | 
			
		||||
        *) devour xdg-open "$f" ;;
 | 
			
		||||
    esac
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
# File/Directory control functions
 | 
			
		||||
cmd mkdir %{{
 | 
			
		||||
    printf "Directory Name: "
 | 
			
		||||
    read ans
 | 
			
		||||
    mkdir $ans
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd mkfile %{{
 | 
			
		||||
    printf "File Name: "
 | 
			
		||||
    read ans
 | 
			
		||||
    touch $ans
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd chmod %{{
 | 
			
		||||
    printf "Mode Bits: "
 | 
			
		||||
    read ans
 | 
			
		||||
 | 
			
		||||
    for file in "$fx"; do
 | 
			
		||||
        chmod $ans $file
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    lf -remote 'send reload'
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
# Add z.lua functionality for easy autojumps
 | 
			
		||||
cmd zlua %{{
 | 
			
		||||
    printf "z.lua input: "
 | 
			
		||||
    read ans
 | 
			
		||||
 | 
			
		||||
    /usr/local/src/z.lua/z.lua $ans
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Archive bindings
 | 
			
		||||
cmd unarchive ${{
 | 
			
		||||
    case "$f" in
 | 
			
		||||
        *.zip) unzip "$f" ;;
 | 
			
		||||
        *.tar.gz) tar -xzvf "$f" ;;
 | 
			
		||||
        *.tar.bz2) tar -xjvf "$f" ;;
 | 
			
		||||
        *.tar) tar -xvf "$f" ;;
 | 
			
		||||
        *) echo "Unsuported format" ;;
 | 
			
		||||
    esac
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd zip %zip -r "$f" "$f"
 | 
			
		||||
cmd tar %tar cvf "$f.tar" "$f"
 | 
			
		||||
cmd targz %tar cvzf "%f.tar.gz" "$f"
 | 
			
		||||
cmd tarbz2 %tar cjvf "$f.tar.bz2" "$f"
 | 
			
		||||
 | 
			
		||||
# Trash-cli bindings
 | 
			
		||||
cmd trash ${{
 | 
			
		||||
    files=$(printf "$fx" | tr '\n' ':')
 | 
			
		||||
    while [ "$files" ]; do
 | 
			
		||||
        # extract the substring from start of string up to delimeter.
 | 
			
		||||
        # this is the first "element" of the string
 | 
			
		||||
        file=${files%%:*}
 | 
			
		||||
 | 
			
		||||
        trash-put "$(basename "$file")"
 | 
			
		||||
        # if there's only one element left, set `files` to an empty string.
 | 
			
		||||
        # this causes us to exit this `while` loop.
 | 
			
		||||
        # else, we delete the first "element" of the string from files, and
 | 
			
		||||
        # move onto the next.
 | 
			
		||||
        if [ "$files" = "$file" ]; then
 | 
			
		||||
            files=''
 | 
			
		||||
        else
 | 
			
		||||
            files="${files#*;}"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd clear_trash %trash-empty
 | 
			
		||||
 | 
			
		||||
cmd restore_trash ${{
 | 
			
		||||
    trash-restore
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
# Bindings
 | 
			
		||||
# Remove some defaults
 | 
			
		||||
map m
 | 
			
		||||
map n
 | 
			
		||||
map "'"
 | 
			
		||||
map '"'
 | 
			
		||||
map d
 | 
			
		||||
map c
 | 
			
		||||
 | 
			
		||||
# Archive mappings
 | 
			
		||||
map az zip
 | 
			
		||||
map at tar
 | 
			
		||||
map ag targz
 | 
			
		||||
map au unarchive
 | 
			
		||||
 | 
			
		||||
# Trash mappings
 | 
			
		||||
map dd trash
 | 
			
		||||
map tc clear_trash
 | 
			
		||||
map tr restore_trash
 | 
			
		||||
 | 
			
		||||
# Basic functions
 | 
			
		||||
map . set hidden!
 | 
			
		||||
map DD delete
 | 
			
		||||
map p paste
 | 
			
		||||
map x cut
 | 
			
		||||
map y copy
 | 
			
		||||
map <enter> open
 | 
			
		||||
map md mkdir
 | 
			
		||||
map mf mkfile
 | 
			
		||||
map ch chmod
 | 
			
		||||
map r rename
 | 
			
		||||
map H top
 | 
			
		||||
map L bottom
 | 
			
		||||
map R reload
 | 
			
		||||
map C clear
 | 
			
		||||
map z zlua
 | 
			
		||||
 | 
			
		||||
# Movement
 | 
			
		||||
map gh cd ~
 | 
			
		||||
map gc cd ~/.config
 | 
			
		||||
map gl cd ~/.local
 | 
			
		||||
map gs cd ~/.local/bin/scripts
 | 
			
		||||
map gtr cd ~/.local/share/Trash/files
 | 
			
		||||
map gE. cd /etc
 | 
			
		||||
map gEp cd /etc/portage
 | 
			
		||||
map gU. cd /usr
 | 
			
		||||
map gUs cd /usr/share
 | 
			
		||||
map gUl cd /usr/local
 | 
			
		||||
map gM cd /mnt
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,162 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# This script handles showing file-previews within lf.
 | 
			
		||||
 | 
			
		||||
# It can also show image previews using ueberzug, however
 | 
			
		||||
# that requires lf to be started with a script that also starts
 | 
			
		||||
# ueberzug alongside of it.
 | 
			
		||||
# (In my dotfiles, this script is in '~/.local/bin/scripts/lfu')
 | 
			
		||||
# Alternatively, we could also handle ANSI previews with pixterms
 | 
			
		||||
# this will be in a pretty low quiality, but it will work without
 | 
			
		||||
# ueberzug. To enable this, change PIXTERM_ENABLED to 1.
 | 
			
		||||
# if both ueberzug and pixterm are enabled, ueberzug takes precedence.
 | 
			
		||||
PIXTERM_ENABLED=1
 | 
			
		||||
 | 
			
		||||
run_cmd() {
 | 
			
		||||
    # Try to run given command, if it is installed.
 | 
			
		||||
    # If it isn't try to fallback to text_handle,
 | 
			
		||||
    # otherwise fail completely.
 | 
			
		||||
    cmd="$1"
 | 
			
		||||
    shift
 | 
			
		||||
 | 
			
		||||
    if command -v "$cmd" > /dev/null; then
 | 
			
		||||
        $cmd $@
 | 
			
		||||
    else
 | 
			
		||||
        # If we didn't found the requested command, check if
 | 
			
		||||
        # the file is text-like and try to use the text_handle
 | 
			
		||||
        # to show the preview, this may not be ideal for given
 | 
			
		||||
        # file-format, but at least we won't fail.
 | 
			
		||||
        case $(file --mime-type "$1" -bL) in
 | 
			
		||||
            # TODO: Consider checking for UTF-8 formatting instead,
 | 
			
		||||
            # or show previews for any file-type
 | 
			
		||||
            text/*|application/json)
 | 
			
		||||
                echo "@@PREVIEW FALLBACK: Using text handle, $cmd command not found!"
 | 
			
		||||
                text_handle "$1"
 | 
			
		||||
                ;;
 | 
			
		||||
            *)
 | 
			
		||||
                echo "@@PREVIEW ERROR: Preview failed, $cmd command not found!"
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
draw_image() {
 | 
			
		||||
    # Draw passed image with use of given draw_script.
 | 
			
		||||
    # If the image contains EXIF (metadata) orientation info,
 | 
			
		||||
    # handle it and draw the rotated image.
 | 
			
		||||
    draw_script="$1"
 | 
			
		||||
    file="$2"
 | 
			
		||||
    shift
 | 
			
		||||
    shift
 | 
			
		||||
 | 
			
		||||
    # Calculate where the image should be placed on the screen.
 | 
			
		||||
    num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`")
 | 
			
		||||
    numb=$(printf "%0.f\n" "`echo "$(tput cols) - $num - 1" | bc`")
 | 
			
		||||
    numc=$(printf "%0.f\n" "`echo "$(tput lines) - 2" | bc`")
 | 
			
		||||
 | 
			
		||||
    # Handle EXIF (metadata) orientation.
 | 
			
		||||
    exif_orientation="$(identify -format '%[EXIF:Orientation]\n' -- "$file")"
 | 
			
		||||
    if [ -n "$exif_orientation" ] && [ "$exif_orientation" != 1 ]; then
 | 
			
		||||
        # In case `convert` command isn't aviable, ignore EXIF rotation
 | 
			
		||||
        if command -v convert > /dev/null; then
 | 
			
		||||
            cache=$(mktemp /tmp/thumbcache.XXXXX)
 | 
			
		||||
            convert -- "$file" -auto-orient "$cache"
 | 
			
		||||
            $draw_script "$cache" $num 1 $numb $numc
 | 
			
		||||
        else
 | 
			
		||||
            $draw_script "$file" $num 1 $numb $numc
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        $draw_script "$file" $num 1 $numb $numc
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Exit with status code 1 to signal lf that the function
 | 
			
		||||
    # should be re-ran next time instead of caching the result.
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
media_handle() {
 | 
			
		||||
    # Handle media type files (videos, photos). These types of
 | 
			
		||||
    # files are usually not stored in any form of textually readable
 | 
			
		||||
    # format and they require a special way of displaying them.
 | 
			
		||||
    # This mostly uses ueberzug (if available) for this.
 | 
			
		||||
 | 
			
		||||
    draw_script="${XDG_CONFIG_HOME:-$HOME/.config}/lf/draw_img.sh"
 | 
			
		||||
    file="$1"
 | 
			
		||||
    shift
 | 
			
		||||
 | 
			
		||||
    # Set ENABLED=1 if ueberzug or pixterm is enabled
 | 
			
		||||
    command -v pixterm > /dev/null && [ "$PIXTERM_ENABLED" = 1 ] && ENABLED=1
 | 
			
		||||
    [ -n "$FIFO_UEBERZUG" ] && [ -f "$draw_script" ] && ENABLED=1
 | 
			
		||||
 | 
			
		||||
    case "$file" in
 | 
			
		||||
        *.bmp|*.jpg|*.jpeg|*.png|*.xpm)
 | 
			
		||||
            if [ -n "$ENABLED" ]; then
 | 
			
		||||
                draw_image $draw_script "$file"
 | 
			
		||||
            else
 | 
			
		||||
                echo "@@PREVIEW FALLBACK: Using mediainfo, ueberzug isn't available."
 | 
			
		||||
                run_cmd mediainfo "$file"
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
        *.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|\
 | 
			
		||||
        *.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
 | 
			
		||||
            if [ -n "$ENABLED" ]; then
 | 
			
		||||
                cache="$(mktemp /tmp/thumbcache.XXXXX)"
 | 
			
		||||
                ffmpegthumbnailer -i "$file" -o "$cache" -s 0
 | 
			
		||||
                draw_image $draw_script "$cache"
 | 
			
		||||
            else
 | 
			
		||||
                echo "@@PREVIEW FALLBACK: Using exiftool, ueberzug isn't aviable."
 | 
			
		||||
                run_cmd exiftool "$file"
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
        *.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac)
 | 
			
		||||
            # These types can't make use of ueberzug easily, so simply use eixftool
 | 
			
		||||
            run_cmd exiftool "$file"
 | 
			
		||||
            ;;
 | 
			
		||||
        *)
 | 
			
		||||
            echo "@@PREVIEW FALLBACK: Unrecognized media file, falling back to text handle."
 | 
			
		||||
            text_handle "$file"
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
text_handle() {
 | 
			
		||||
    # Handle all other formats as text and cat them
 | 
			
		||||
    # if highlighting tools are aviable, try to use them
 | 
			
		||||
    if command -v bat > /dev/null; then
 | 
			
		||||
        num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`")
 | 
			
		||||
        numb=$(printf "%d\n" "`echo "$(tput cols) - $num - 3" | bc`")
 | 
			
		||||
        bat -pp --color=always --wrap=character --terminal-width="$numb" "$1"
 | 
			
		||||
    elif command -v highlight > /dev/null; then
 | 
			
		||||
        highlight "$1" --out-format ansi --force
 | 
			
		||||
    else
 | 
			
		||||
        cat "$1"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Capture all directories at first, since they could
 | 
			
		||||
# potentionally match one of the file case statements
 | 
			
		||||
if [ -d "$1" ]; then
 | 
			
		||||
    tree "$1" -La 1
 | 
			
		||||
elif [ -f "$1" ]; then
 | 
			
		||||
    case "$1" in
 | 
			
		||||
        *.tgz|*.tar.gz) run_cmd tar tzf "$1";;
 | 
			
		||||
        *.tar.bz2|*.tbz2) run_cmd tar tjf "$1";;
 | 
			
		||||
        *.tar.txz|*.txz) run_cmd xz --list "$1";;
 | 
			
		||||
        *.tar) run_cmd tar tf "$1";;
 | 
			
		||||
        *.zip|*.jar|*.war|*.ear|*.oxt) run_cmd unzip -l "$1";;
 | 
			
		||||
        *.rar) run_cmd unrar l "$1";;
 | 
			
		||||
        *.7z) run_cmd 7z l "$1";;
 | 
			
		||||
        *.iso) run_cmd iso-info --no-header -l "$1";;
 | 
			
		||||
        *.o) run_cmd nm "$1" | less ;;
 | 
			
		||||
        *.csv) cat "$1" | sed s/,/\\n/g ;;
 | 
			
		||||
        *odt,*.ods,*.odp,*.sxw) run_cmd odt2txt "$1";;
 | 
			
		||||
        *.doc) run_cmd catdoc "$1" ;;
 | 
			
		||||
        *.docx) run_cmd docx2txt "$1" - ;;
 | 
			
		||||
        *.torrent) run_cmd transmission-show "$1";;
 | 
			
		||||
        *.pdf) run_cmd pdftotext "$1";;
 | 
			
		||||
        *.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac|\
 | 
			
		||||
        *.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|\
 | 
			
		||||
        *.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx|\
 | 
			
		||||
        *.bmp|*.jpg|*.jpeg|*.png|*.xpm) media_handle "$1" ;;
 | 
			
		||||
        *) text_handle "$1" ;;
 | 
			
		||||
    esac
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +0,0 @@
 | 
			
		|||
# Vim keys seeking
 | 
			
		||||
l seek 5
 | 
			
		||||
h seek -5
 | 
			
		||||
j seek -60
 | 
			
		||||
k seek 60
 | 
			
		||||
 | 
			
		||||
# Set A-B Loop key to g, since l was rebound
 | 
			
		||||
g ab-loop
 | 
			
		||||
 | 
			
		||||
# Swap i and I, use lowercase for toggle
 | 
			
		||||
i script-binding stats/display-stats-toggle
 | 
			
		||||
I script-binding stats/display-stats
 | 
			
		||||
 | 
			
		||||
# Zooming
 | 
			
		||||
-           add video-zoom -.25
 | 
			
		||||
+           add video-zoom .25
 | 
			
		||||
# Moving/panning video
 | 
			
		||||
kp8         add video-pan-y .05
 | 
			
		||||
kp6         add video-pan-x -.05
 | 
			
		||||
kp2         add video-pan-y -.05
 | 
			
		||||
kp4         add video-pan-x .05
 | 
			
		||||
kp5         set video-pan-x 0; set video-pan-y 0; set video-zoom 0
 | 
			
		||||
 | 
			
		||||
# Rotation
 | 
			
		||||
ctrl+r      cycle_values video-rotate "90" "180" "270" "0" 
 | 
			
		||||
| 
						 | 
				
			
			@ -1,180 +0,0 @@
 | 
			
		|||
# mpv keybindings
 | 
			
		||||
#
 | 
			
		||||
# Location of user-defined bindings: ~/.config/mpv/input.conf
 | 
			
		||||
#
 | 
			
		||||
# Lines starting with # are comments. Use SHARP to assign the # key.
 | 
			
		||||
# Copy this file and uncomment and edit the bindings you want to change.
 | 
			
		||||
#
 | 
			
		||||
# List of commands and further details: DOCS/man/input.rst
 | 
			
		||||
# List of special keys: --input-keylist
 | 
			
		||||
# Keybindings testing mode: mpv --input-test --force-window --idle
 | 
			
		||||
#
 | 
			
		||||
# Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore').
 | 
			
		||||
#
 | 
			
		||||
# Strings need to be quoted and escaped:
 | 
			
		||||
#   KEY show-text "This is a single backslash: \\ and a quote: \" !"
 | 
			
		||||
#
 | 
			
		||||
# You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with
 | 
			
		||||
# the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal).
 | 
			
		||||
#
 | 
			
		||||
# The default keybindings are hardcoded into the mpv binary.
 | 
			
		||||
# You can disable them completely with: --no-input-default-bindings
 | 
			
		||||
 | 
			
		||||
# Developer note:
 | 
			
		||||
# On compilation, this file is baked into the mpv binary, and all lines are
 | 
			
		||||
# uncommented (unless '#' is followed by a space) - thus this file defines the
 | 
			
		||||
# default key bindings.
 | 
			
		||||
 | 
			
		||||
# If this is enabled, treat all the following bindings as default.
 | 
			
		||||
#default-bindings start
 | 
			
		||||
 | 
			
		||||
#MBTN_LEFT     ignore              # don't do anything
 | 
			
		||||
#MBTN_LEFT_DBL cycle fullscreen    # toggle fullscreen
 | 
			
		||||
#MBTN_RIGHT    cycle pause         # toggle pause/playback mode
 | 
			
		||||
#MBTN_BACK     playlist-prev       # skip to the previous file
 | 
			
		||||
#MBTN_FORWARD  playlist-next       # skip to the next file
 | 
			
		||||
 | 
			
		||||
# Mouse wheels, touchpad or other input devices that have axes
 | 
			
		||||
# if the input devices supports precise scrolling it will also scale the
 | 
			
		||||
# numeric value accordingly
 | 
			
		||||
#WHEEL_UP      seek 10          # seek 10 seconds forward
 | 
			
		||||
#WHEEL_DOWN    seek -10         # seek 10 seconds backward
 | 
			
		||||
#WHEEL_LEFT    add volume -2    # lower the volume
 | 
			
		||||
#WHEEL_RIGHT   add volume 2     # raise the volume
 | 
			
		||||
 | 
			
		||||
## Seek units are in seconds, but note that these are limited by keyframes
 | 
			
		||||
#RIGHT seek  5                          # seek 5 seconds forward
 | 
			
		||||
#LEFT  seek -5                          # seek 5 seconds backward
 | 
			
		||||
#UP    seek  60                         # seek 1 minute forward
 | 
			
		||||
#DOWN  seek -60                         # seek 1 minute backward
 | 
			
		||||
# Do smaller, always exact (non-keyframe-limited), seeks with shift.
 | 
			
		||||
# Don't show them on the OSD (no-osd).
 | 
			
		||||
#Shift+RIGHT no-osd seek  1 exact       # seek exactly 1 second forward
 | 
			
		||||
#Shift+LEFT  no-osd seek -1 exact       # seek exactly 1 second backward
 | 
			
		||||
#Shift+UP    no-osd seek  5 exact       # seek exactly 5 seconds forward
 | 
			
		||||
#Shift+DOWN  no-osd seek -5 exact       # seek exactly 5 seconds backward
 | 
			
		||||
#Ctrl+LEFT   no-osd sub-seek -1         # seek to the previous subtitle
 | 
			
		||||
#Ctrl+RIGHT  no-osd sub-seek  1         # seek to the next subtitle
 | 
			
		||||
#Ctrl+Shift+LEFT sub-step -1            # change subtitle timing such that the previous subtitle is displayed
 | 
			
		||||
#Ctrl+Shift+RIGHT sub-step 1            # change subtitle timing such that the next subtitle is displayed
 | 
			
		||||
#Alt+left  add video-pan-x  0.1         # move the video right
 | 
			
		||||
#Alt+right add video-pan-x -0.1         # move the video left
 | 
			
		||||
#Alt+up    add video-pan-y  0.1         # move the video down
 | 
			
		||||
#Alt+down  add video-pan-y -0.1         # move the video up
 | 
			
		||||
#Alt++     add video-zoom   0.1         # zoom in
 | 
			
		||||
#Alt+-     add video-zoom  -0.1         # zoom out
 | 
			
		||||
#Alt+BS set video-zoom 0 ; set video-pan-x 0 ; set video-pan-y 0 # reset zoom and pan settings
 | 
			
		||||
#PGUP add chapter 1                     # seek to the next chapter
 | 
			
		||||
#PGDWN add chapter -1                   # seek to the previous chapter
 | 
			
		||||
#Shift+PGUP seek 600                    # seek 10 minutes forward
 | 
			
		||||
#Shift+PGDWN seek -600                  # seek 10 minutes backward
 | 
			
		||||
#[ multiply speed 1/1.1                 # decrease the playback speed
 | 
			
		||||
#] multiply speed 1.1                   # increase the playback speed
 | 
			
		||||
#{ multiply speed 0.5                   # halve the playback speed
 | 
			
		||||
#} multiply speed 2.0                   # double the playback speed
 | 
			
		||||
#BS set speed 1.0                       # reset the speed to normal
 | 
			
		||||
#Shift+BS revert-seek                   # undo the previous (or marked) seek
 | 
			
		||||
#Shift+Ctrl+BS revert-seek mark         # mark the position for revert-seek
 | 
			
		||||
#q quit                                 # exit
 | 
			
		||||
#Q quit-watch-later                     # exit and remember the playback position
 | 
			
		||||
#q {encode} quit 4                      # exit
 | 
			
		||||
#ESC set fullscreen no                  # leave fullscreen
 | 
			
		||||
#ESC {encode} quit 4                    # exit
 | 
			
		||||
#p cycle pause                          # toggle pause/playback mode
 | 
			
		||||
#. frame-step                           # advance one frame and pause
 | 
			
		||||
#, frame-back-step                      # go back by one frame and pause
 | 
			
		||||
#SPACE cycle pause                      # toggle pause/playback mode
 | 
			
		||||
#> playlist-next                        # skip to the next file
 | 
			
		||||
#ENTER playlist-next                    # skip to the next file
 | 
			
		||||
#< playlist-prev                        # skip to the previous file
 | 
			
		||||
#O no-osd cycle-values osd-level 3 1    # toggle displaying the OSD on user interaction or always
 | 
			
		||||
#o show-progress                        # show playback progress
 | 
			
		||||
#P show-progress                        # show playback progress
 | 
			
		||||
#i script-binding stats/display-stats   # display information and statistics
 | 
			
		||||
#I script-binding stats/display-stats-toggle # toggle displaying information and statistics
 | 
			
		||||
#` script-binding console/enable        # open the console
 | 
			
		||||
#z add sub-delay -0.1                   # shift subtitles 100 ms earlier
 | 
			
		||||
#Z add sub-delay +0.1                   # delay subtitles by 100 ms
 | 
			
		||||
#x add sub-delay +0.1                   # delay subtitles by 100 ms
 | 
			
		||||
#ctrl++ add audio-delay 0.100           # change audio/video sync by delaying the audio
 | 
			
		||||
#ctrl+- add audio-delay -0.100          # change audio/video sync by shifting the audio earlier
 | 
			
		||||
#Shift+g add sub-scale +0.1             # increase the subtitle font size
 | 
			
		||||
#Shift+f add sub-scale -0.1             # decrease the subtitle font size
 | 
			
		||||
#9 add volume -2                        # lower the volume
 | 
			
		||||
#/ add volume -2                        # lower the volume
 | 
			
		||||
#0 add volume 2                         # raise the volume
 | 
			
		||||
#* add volume 2                         # raise the volume
 | 
			
		||||
#m cycle mute                           # toggle mute
 | 
			
		||||
#1 add contrast -1                      # decrease the contrast
 | 
			
		||||
#2 add contrast 1                       # increase the contrast
 | 
			
		||||
#3 add brightness -1                    # decrease the brightness
 | 
			
		||||
#4 add brightness 1                     # increase the brightness
 | 
			
		||||
#5 add gamma -1                         # decrease the gamma
 | 
			
		||||
#6 add gamma 1                          # increase the gamma
 | 
			
		||||
#7 add saturation -1                    # decrease the saturation
 | 
			
		||||
#8 add saturation 1                     # increase the saturation
 | 
			
		||||
#Alt+0 set current-window-scale 0.5     # halve the window size
 | 
			
		||||
#Alt+1 set current-window-scale 1.0     # reset the window size
 | 
			
		||||
#Alt+2 set current-window-scale 2.0     # double the window size
 | 
			
		||||
#d cycle deinterlace                    # toggle the deinterlacing filter
 | 
			
		||||
#r add sub-pos -1                       # move subtitles up
 | 
			
		||||
#R add sub-pos +1                       # move subtitles down
 | 
			
		||||
#t add sub-pos +1                       # move subtitles down
 | 
			
		||||
#v cycle sub-visibility                 # hide or show the subtitles
 | 
			
		||||
#Alt+v cycle secondary-sub-visibility   # hide or show the secondary subtitles
 | 
			
		||||
#V cycle sub-ass-vsfilter-aspect-compat # toggle stretching SSA/ASS subtitles with anamorphic videos to match the historical renderer
 | 
			
		||||
#u cycle-values sub-ass-override "force" "no" # toggle overriding SSA/ASS subtitle styles with the normal styles
 | 
			
		||||
#j cycle sub                            # switch subtitle track
 | 
			
		||||
#J cycle sub down                       # switch subtitle track backwards
 | 
			
		||||
#SHARP cycle audio                      # switch audio track
 | 
			
		||||
#_ cycle video                          # switch video track
 | 
			
		||||
#T cycle ontop                          # toggle placing the video on top of other windows
 | 
			
		||||
#f cycle fullscreen                     # toggle fullscreen
 | 
			
		||||
#s screenshot                           # take a screenshot of the video in its original resolution with subtitles
 | 
			
		||||
#S screenshot video                     # take a screenshot of the video in its original resolution without subtitles
 | 
			
		||||
#Ctrl+s screenshot window               # take a screenshot of the window with OSD and subtitles
 | 
			
		||||
#Alt+s screenshot each-frame            # automatically screenshot every frame; issue this command again to stop taking screenshots
 | 
			
		||||
#w add panscan -0.1                     # decrease panscan
 | 
			
		||||
#W add panscan +0.1                     # shrink black bars by cropping the video
 | 
			
		||||
#e add panscan +0.1                     # shrink black bars by cropping the video
 | 
			
		||||
#A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "-1" # cycle the video aspect ratio ("-1" is the container aspect)
 | 
			
		||||
#POWER quit                             # exit
 | 
			
		||||
#PLAY cycle pause                       # toggle pause/playback mode
 | 
			
		||||
#PAUSE cycle pause                      # toggle pause/playback mode
 | 
			
		||||
#PLAYPAUSE cycle pause                  # toggle pause/playback mode
 | 
			
		||||
#PLAYONLY set pause no                  # unpause
 | 
			
		||||
#PAUSEONLY set pause yes                # pause
 | 
			
		||||
#STOP quit                              # exit
 | 
			
		||||
#FORWARD seek 60                        # seek 1 minute forward
 | 
			
		||||
#REWIND seek -60                        # seek 1 minute backward
 | 
			
		||||
#NEXT playlist-next                     # skip to the next file
 | 
			
		||||
#PREV playlist-prev                     # skip to the previous file
 | 
			
		||||
#VOLUME_UP add volume 2                 # raise the volume
 | 
			
		||||
#VOLUME_DOWN add volume -2              # lower the volume
 | 
			
		||||
#MUTE cycle mute                        # toggle mute
 | 
			
		||||
#CLOSE_WIN quit                         # exit
 | 
			
		||||
#CLOSE_WIN {encode} quit 4              # exit
 | 
			
		||||
#ctrl+w quit                            # exit
 | 
			
		||||
#E cycle edition                        # switch edition
 | 
			
		||||
#l ab-loop                              # set/clear A-B loop points
 | 
			
		||||
#L cycle-values loop-file "inf" "no"    # toggle infinite looping
 | 
			
		||||
#ctrl+c quit 4                          # exit
 | 
			
		||||
#DEL script-binding osc/visibility      # cycle OSC visibility between never, auto (mouse-move) and always
 | 
			
		||||
#ctrl+h cycle-values hwdec "auto" "no"  # toggle hardware decoding
 | 
			
		||||
#F8 show-text ${playlist}               # show the playlist
 | 
			
		||||
#F9 show-text ${track-list}             # show the list of video, audio and sub tracks
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Legacy bindings (may or may not be removed in the future)
 | 
			
		||||
#
 | 
			
		||||
#! add chapter -1                       # seek to the previous chapter
 | 
			
		||||
#@ add chapter 1                        # seek to the next chapter
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Not assigned by default
 | 
			
		||||
# (not an exhaustive list of unbound commands)
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# ? cycle sub-forced-only               # toggle DVD forced subs
 | 
			
		||||
# ? stop                                # stop playback (quit or enter idle mode)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
loop=yes
 | 
			
		||||
| 
						 | 
				
			
			@ -1,47 +0,0 @@
 | 
			
		|||
unbind-key j
 | 
			
		||||
unbind-key k
 | 
			
		||||
unbind-key h
 | 
			
		||||
unbind-key H
 | 
			
		||||
unbind-key L
 | 
			
		||||
unbind-key c
 | 
			
		||||
unbind-key ,
 | 
			
		||||
browser "xdg-open %u"
 | 
			
		||||
 | 
			
		||||
# Feed settings
 | 
			
		||||
prepopulate-query-feeds yes
 | 
			
		||||
refresh-on-startup yes
 | 
			
		||||
 | 
			
		||||
# Macros
 | 
			
		||||
macro w set browser "mpv %u" ; open-in-browser ; set browser "xdg-open %u"
 | 
			
		||||
macro r set browser "w3m %u" ; open-in-browser ; set browser "xdg-open %u"
 | 
			
		||||
 | 
			
		||||
# bind keys
 | 
			
		||||
bind-key ; macro-prefix
 | 
			
		||||
bind-key BACKSPACE quit
 | 
			
		||||
bind-key h quit
 | 
			
		||||
bind-key j down
 | 
			
		||||
bind-key k up
 | 
			
		||||
bind-key l open
 | 
			
		||||
bind-key H prev-feed
 | 
			
		||||
bind-key L next-feed
 | 
			
		||||
bind-key c toggle-show-read-feeds
 | 
			
		||||
 | 
			
		||||
color background default default
 | 
			
		||||
color listnormal default default
 | 
			
		||||
color listnormal_unread default default
 | 
			
		||||
color listfocus color16 cyan
 | 
			
		||||
color listfocus_unread color16 cyan
 | 
			
		||||
color info default black
 | 
			
		||||
color article default default
 | 
			
		||||
 | 
			
		||||
highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold
 | 
			
		||||
highlight article "(^Link:.*|^Date:.*)" default default
 | 
			
		||||
highlight article "https?://[^ ]+" green default
 | 
			
		||||
 | 
			
		||||
highlight article "^(Title):.*$" blue default
 | 
			
		||||
highlight article "\\[[0-9][0-9]*\\]" magenta default bold
 | 
			
		||||
highlight article "\\[image\\ [0-9]+\\]" green default bold
 | 
			
		||||
highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold
 | 
			
		||||
highlight article ":.*\\(link\\)$" cyan default
 | 
			
		||||
highlight article ":.*\\(image\\)$" blue default
 | 
			
		||||
highlight article ":.*\\(embedded flash\\)$" magenta default
 | 
			
		||||
| 
						 | 
				
			
			@ -1,2 +0,0 @@
 | 
			
		|||
https://itsdrike.com/posts/index.xml
 | 
			
		||||
https://archlinux.org/feeds/news
 | 
			
		||||
| 
						 | 
				
			
			@ -1,78 +0,0 @@
 | 
			
		|||
[General]
 | 
			
		||||
DkEditDock=2
 | 
			
		||||
firstTime=false
 | 
			
		||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x5\x89\0\0\0\x18\0\0\aG\0\0\x1\xdf\0\0\x5\x8d\0\0\0\x36\0\0\aC\0\0\x1\xdb\0\0\0\0\0\0\0\0\a\x80\0\0\x5\x8d\0\0\0\x36\0\0\aC\0\0\x1\xdb)
 | 
			
		||||
geometryNomacs=@Rect(1421 54 439 422)
 | 
			
		||||
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\x1\0\0\0\xdd\0\0\x3\xc4\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0\x44\0k\0\x45\0\x64\0i\0t\0\x44\0o\0\x63\0k\0\0\0\0\x1e\0\0\x3\xc4\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\x3\xb8\0\0\0>\xfc\x1\0\0\0\x1\xfb\0\0\0\x10\0\x63\0r\0o\0p\0\x44\0o\0\x63\0k\0\0\0\0\0\0\0\x3\xb8\0\0\0\0\0\0\0\0\0\0\x1\xb7\0\0\x1\x88\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0\x45\0\x64\0i\0t\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
 | 
			
		||||
 | 
			
		||||
[AppSettings]
 | 
			
		||||
appMode=0
 | 
			
		||||
currentAppMode=0
 | 
			
		||||
defaultJpgQuality=97
 | 
			
		||||
firstTime.nomacs.3=false
 | 
			
		||||
hideAllPanels=false
 | 
			
		||||
showPlayer=@Variant(\0\0\0\r\0\0\0\x6\0)
 | 
			
		||||
 | 
			
		||||
[CustomPluginShortcuts]
 | 
			
		||||
Composite%20Image=Composite Image
 | 
			
		||||
Crop%20to%20Metadata=Crop to Metadata
 | 
			
		||||
Crop%20to%20Page=Crop to Page
 | 
			
		||||
Draw%20to%20Page=Draw to Page
 | 
			
		||||
Fake%20Miniatures=Fake Miniatures
 | 
			
		||||
Image%20Transform=Image Transform
 | 
			
		||||
Paint%20on%20Image=Paint on Image
 | 
			
		||||
 | 
			
		||||
[DisplaySettings]
 | 
			
		||||
bgColorNoMacsRGBA=4281545523
 | 
			
		||||
bgColorWidgetRGBA=2852126720
 | 
			
		||||
fadeSec=@Variant(\0\0\0\x87\0\0\0\0)
 | 
			
		||||
fontColorRGBA=4292730333
 | 
			
		||||
highlightColorRGBA=4278233855
 | 
			
		||||
iconColorRGBA=4292730333
 | 
			
		||||
iconSize=18
 | 
			
		||||
showCrop=true
 | 
			
		||||
themeName312=Dark-Theme.css
 | 
			
		||||
transition=0
 | 
			
		||||
zoomToFit=true
 | 
			
		||||
 | 
			
		||||
[DkAppManager]
 | 
			
		||||
Apps\size=0
 | 
			
		||||
 | 
			
		||||
[DkCompressionDialog]
 | 
			
		||||
CompressionCombo0=0
 | 
			
		||||
bgCompressionColor0=4294967295
 | 
			
		||||
 | 
			
		||||
[DkDialog]
 | 
			
		||||
deleteFileDialog=false
 | 
			
		||||
deleteFileDialog-answer=16384
 | 
			
		||||
overwriteDialog=false
 | 
			
		||||
overwriteDialog-answer=16384
 | 
			
		||||
saveEditDialog=false
 | 
			
		||||
saveEditDialog-answer=16384
 | 
			
		||||
saveTabsDialog=false
 | 
			
		||||
saveTabsDialog-answer=65536
 | 
			
		||||
 | 
			
		||||
[DkFilePreview]
 | 
			
		||||
windowPosition=1
 | 
			
		||||
 | 
			
		||||
[DkMetaDataHUD]
 | 
			
		||||
keyValues=File.Filename, File.Path, File.Size, Exif.Image.Make, Exif.Image.Model, Exif.Image.DateTime, Exif.Image.ImageDescription, Exif.Photo.ISO, Exif.Photo.FocalLength, Exif.Photo.ExposureTime, Exif.Photo.Flash, Exif.Photo.FNumber
 | 
			
		||||
numColumns=-1
 | 
			
		||||
windowPosition=3
 | 
			
		||||
 | 
			
		||||
[MetaDataSettings]
 | 
			
		||||
saveExifOrientation=false
 | 
			
		||||
 | 
			
		||||
[Page%20Extraction%20Plugin]
 | 
			
		||||
Method=0
 | 
			
		||||
 | 
			
		||||
[SlideShowSettings]
 | 
			
		||||
time=@Variant(\0\0\0\x87@\xa0\0\0)
 | 
			
		||||
 | 
			
		||||
[SynchronizeSettings]
 | 
			
		||||
checkForUpdates=true
 | 
			
		||||
disableUpdateInteraction=false
 | 
			
		||||
 | 
			
		||||
[zooming]
 | 
			
		||||
useLevels=false
 | 
			
		||||
zoomLevels="0.0001,0.001,0.01,0.05,0.1,0.125,0.166,0.25,0.333,0.5,0.66,1,1.5,2,3,4,5,6,7,8,12,16,32,64,128"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
prefix=${XDG_DATA_HOME}/npm
 | 
			
		||||
cache=${XDG_CACHE_HOME}/npm
 | 
			
		||||
tmp=${XDG_RUNTIME_DIR}/npm
 | 
			
		||||
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
Subproject commit 5e10bd30328a890bc2f62d8687b3c346a8032b14
 | 
			
		||||
| 
						 | 
				
			
			@ -1,29 +0,0 @@
 | 
			
		|||
[config]
 | 
			
		||||
bm_open_method=0
 | 
			
		||||
 | 
			
		||||
[volume]
 | 
			
		||||
mount_on_startup=1
 | 
			
		||||
mount_removable=1
 | 
			
		||||
autorun=1
 | 
			
		||||
 | 
			
		||||
[autorun]
 | 
			
		||||
x-content/bootable-media=pcmanfm
 | 
			
		||||
 | 
			
		||||
[ui]
 | 
			
		||||
always_show_tabs=0
 | 
			
		||||
max_tab_chars=32
 | 
			
		||||
win_width=1884
 | 
			
		||||
win_height=1020
 | 
			
		||||
splitter_pos=269
 | 
			
		||||
media_in_new_tab=0
 | 
			
		||||
desktop_folder_new_win=0
 | 
			
		||||
change_tab_on_drop=1
 | 
			
		||||
close_on_unmount=1
 | 
			
		||||
focus_previous=0
 | 
			
		||||
side_pane_mode=places
 | 
			
		||||
view_mode=icon
 | 
			
		||||
show_hidden=0
 | 
			
		||||
sort=desc;ascending;
 | 
			
		||||
toolbar=newtab;navigation;home;
 | 
			
		||||
show_statusbar=1
 | 
			
		||||
pathbar_mode_buttons=1
 | 
			
		||||
| 
						 | 
				
			
			@ -1,290 +0,0 @@
 | 
			
		|||
# NOTE 1: This configuration when used as-is, requires --experimental-backends
 | 
			
		||||
# command line option to be used, in order to enable the usage of the
 | 
			
		||||
# dual-kawase blur method.
 | 
			
		||||
 | 
			
		||||
# NOTE 2: With the picom from standard repositories, currently using experimental
 | 
			
		||||
# backends will disable the support for rounded corners. If you want to use both
 | 
			
		||||
# the dual-kawase blur method and rounded corners, you will need to use a fork.
 | 
			
		||||
# However it is not mandantory. If you will use the standard version, you will just
 | 
			
		||||
# see a warning in picom's logs each time it's started, you can disable rounded
 | 
			
		||||
# corners completely to prevent this. If you do want to use a fork, I recommend this:
 | 
			
		||||
# <https://github.com/jonaburg/picom> (picom-jonaburg-git on AUR).
 | 
			
		||||
 | 
			
		||||
# NOTE 3: The shadows are currently disabled, the reason for this are the issues
 | 
			
		||||
# that occur with combining rounded corners and shadows, for more info, check:
 | 
			
		||||
# <https://github.com/jonaburg/picom/issues/62>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# General settings
 | 
			
		||||
###################
 | 
			
		||||
 | 
			
		||||
# Daemonize process. Fork to background after initialization.
 | 
			
		||||
# Causes issues with certain (badly-written) drivers.
 | 
			
		||||
daemon = false
 | 
			
		||||
 | 
			
		||||
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
 | 
			
		||||
# `xrender` is the default one.
 | 
			
		||||
# We use GLX since it's generally a lot faster than xrender.
 | 
			
		||||
# There usually aren't anny issues with this, but if you do experience some
 | 
			
		||||
# try falling back to xrender.
 | 
			
		||||
backend = "glx";
 | 
			
		||||
 | 
			
		||||
# To properly use the GLX backend, we need to enable experimental backends
 | 
			
		||||
experimental-backends = true;
 | 
			
		||||
 | 
			
		||||
# Enable/Disable VSync.
 | 
			
		||||
vsync = true;
 | 
			
		||||
 | 
			
		||||
# Enable remote control via D-Bus.
 | 
			
		||||
dbus = false;
 | 
			
		||||
 | 
			
		||||
# Try to detect WM windows (a non-override-redirect window with no
 | 
			
		||||
# child that has 'WM_STATE') and mark them as active.
 | 
			
		||||
mark-wmwin-focused = true;
 | 
			
		||||
 | 
			
		||||
# Mark override-redirect windows that doesn't have a child window
 | 
			
		||||
# with 'WM_STATE' focused.
 | 
			
		||||
mark-ovredir-focused = true;
 | 
			
		||||
 | 
			
		||||
# Try to detect windows with rounded corners and don't consider them
 | 
			
		||||
# shaped windows. The accuracy is not very high, unfortunately.
 | 
			
		||||
detect-rounded-corners = true;
 | 
			
		||||
 | 
			
		||||
# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
 | 
			
		||||
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
 | 
			
		||||
detect-client-opacity = true;
 | 
			
		||||
 | 
			
		||||
# Specify refresh rate of the screen. If not specified or 0, picom will
 | 
			
		||||
# try detecting this with X RandR extension.
 | 
			
		||||
refresh-rate = 0;
 | 
			
		||||
 | 
			
		||||
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
 | 
			
		||||
# Might cause incorrect opacity when rendering transparent content (but never
 | 
			
		||||
# practically happened) and may not work with blur-background.
 | 
			
		||||
# My tests show a 15% performance boost. Recommended.
 | 
			
		||||
glx-no-stencil = true;
 | 
			
		||||
 | 
			
		||||
# GLX backend: Avoid rebinding pixmap on window damage.
 | 
			
		||||
# Probably could improve performance on rapid window content changes,
 | 
			
		||||
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
 | 
			
		||||
# Recommended if it works.
 | 
			
		||||
glx-no-rebind-pixmap = true;
 | 
			
		||||
 | 
			
		||||
# Disable/Enable the use of damage information.
 | 
			
		||||
# Disabling cause the whole screen to be redrawn everytime, instead of the part
 | 
			
		||||
# of the screen has actually changed. Potentially degrades the performance,
 | 
			
		||||
# but might fix some artifacts. It is recommended to keep this enabled.
 | 
			
		||||
# The opposing option is no-use-damage
 | 
			
		||||
use-damage = true
 | 
			
		||||
 | 
			
		||||
# Window type settings
 | 
			
		||||
#
 | 
			
		||||
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
 | 
			
		||||
#     "unknown", "desktop", "dock", "toolbar", "menu", "utility",
 | 
			
		||||
#     "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
 | 
			
		||||
#     "tooltip", "notification", "combo", and "dnd".
 | 
			
		||||
#
 | 
			
		||||
# Following per window-type options are available: ::
 | 
			
		||||
#
 | 
			
		||||
#   fade, shadow:::
 | 
			
		||||
#     Controls window-type-specific shadow and fade settings.
 | 
			
		||||
#
 | 
			
		||||
#   opacity:::
 | 
			
		||||
#     Controls default opacity of the window type.
 | 
			
		||||
#
 | 
			
		||||
#   focus:::
 | 
			
		||||
#     Controls whether the window of this type is to be always considered focused.
 | 
			
		||||
#     (By default, all window types except "normal" and "dialog" has this on.)
 | 
			
		||||
#
 | 
			
		||||
#   full-shadow:::
 | 
			
		||||
#     Controls whether shadow is drawn under the parts of the window that you
 | 
			
		||||
#     normally won't be able to see. Useful when the window has parts of it
 | 
			
		||||
#     transparent, and you want shadows in those areas.
 | 
			
		||||
#
 | 
			
		||||
#   redir-ignore:::
 | 
			
		||||
#     Controls whether this type of windows should cause screen to become
 | 
			
		||||
#     redirected again after been unredirected. If you have unredir-if-possible
 | 
			
		||||
#     set, and doesn't want certain window to cause unnecessary screen redirection,
 | 
			
		||||
#     you can set this to `true`.
 | 
			
		||||
#
 | 
			
		||||
wintypes:
 | 
			
		||||
{
 | 
			
		||||
    normal = { full-shadow = true; blur-background = true; };
 | 
			
		||||
    splash = { blur-background = false; };
 | 
			
		||||
    menu = { full-shadow = true; };
 | 
			
		||||
    tooltip = { fade = true; shadow = false; focus = true;};
 | 
			
		||||
    dock = { shadow = false; };
 | 
			
		||||
    dnd = { shadow = false; };
 | 
			
		||||
    popup_menu = { full-shadow = true; };
 | 
			
		||||
    utility = { full-shadow = true; };
 | 
			
		||||
    toolbar = { full-shadow = true; };
 | 
			
		||||
    notification = { opacity = 1; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Transparency / Opacity
 | 
			
		||||
#########################
 | 
			
		||||
 | 
			
		||||
# Specify a list of opacity rules.
 | 
			
		||||
# format: "[Opacity level]:[xprop info name] = '[xprop value]'"
 | 
			
		||||
#   - class_g reffers to class in position #0,
 | 
			
		||||
#   - class_i reffers to class in position #1
 | 
			
		||||
# Note we don't make any guarantee about possible conflicts with other
 | 
			
		||||
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
 | 
			
		||||
 | 
			
		||||
# Apply blur to terminals
 | 
			
		||||
opacity-rule = [
 | 
			
		||||
    "100:name = 'Dunst'",
 | 
			
		||||
    # Opacities with enabled shadows (shadows allow for higher alpha - lower number)
 | 
			
		||||
    #"70:class_g = 'Alacritty'",
 | 
			
		||||
    #"70:class_g = 'st-256color'",
 | 
			
		||||
    #"70:class_g = 'URxvt'",
 | 
			
		||||
    #"70:class_g = 'kitty'",
 | 
			
		||||
    #"82:class_g = 'Spotify'"
 | 
			
		||||
    # Opacities without shadows
 | 
			
		||||
    "80:class_g = 'Alacritty'",
 | 
			
		||||
    "80:class_g = 'st-256color'",
 | 
			
		||||
    "80:class_g = 'URxvt'",
 | 
			
		||||
    "80:class_g = 'kitty'",
 | 
			
		||||
    "92:class_g = 'Spotify'"
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
 | 
			
		||||
active-opacity = 1;
 | 
			
		||||
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
 | 
			
		||||
inactive-opacity = 1;
 | 
			
		||||
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
 | 
			
		||||
frame-opacity = 1.0;
 | 
			
		||||
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
 | 
			
		||||
opacity = 1.0
 | 
			
		||||
# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
 | 
			
		||||
inactive-opacity-override = false
 | 
			
		||||
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
 | 
			
		||||
inactive-dim = 0.0
 | 
			
		||||
# Use fixed inactive dim value, instead of adjusting according to window opacity.
 | 
			
		||||
inactive-dim-fixed = 1.0
 | 
			
		||||
# Specify a list of conditions of windows that should always be considered focused.
 | 
			
		||||
focus-exclude = []
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Background blurring
 | 
			
		||||
########################
 | 
			
		||||
 | 
			
		||||
blur:
 | 
			
		||||
{
 | 
			
		||||
    # dual_kawase blur method requires GLX as backend
 | 
			
		||||
    # If you can't get GLX to work, use 'kernel' blur instead.
 | 
			
		||||
    # dual_kawase allows for multi-threaded bluring that's
 | 
			
		||||
    # very fast.
 | 
			
		||||
    method = "dual_kawase";
 | 
			
		||||
    #method = "kernel";
 | 
			
		||||
    #kernel = "11x11gaussian";
 | 
			
		||||
    strength = 4;
 | 
			
		||||
    deviation = 1.0;
 | 
			
		||||
    # When true, blur background of semi-transparent / ARGB window.
 | 
			
		||||
    background = false;
 | 
			
		||||
    # When true, the background of windows when the window frame
 | 
			
		||||
    # is not opaque is blurred, implies background=true
 | 
			
		||||
    background-frame = false;
 | 
			
		||||
    # Whe true, use fixeed blur strength rather than adjusing
 | 
			
		||||
    # according to window opacity
 | 
			
		||||
    background-fixed = false;
 | 
			
		||||
    # Specify the blur convolution kernel
 | 
			
		||||
    kern = "3x3box"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Exclude conditions for background blur
 | 
			
		||||
blur-background-exclude = [
 | 
			
		||||
    # Prevents picom from blurring the background
 | 
			
		||||
    # when taking selection screenshot with `maim`
 | 
			
		||||
    "class_g = 'slop'",
 | 
			
		||||
    "_GTK_FRAME_EXTENTS@:c"
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Shadows
 | 
			
		||||
################
 | 
			
		||||
 | 
			
		||||
# Enabled client-side shadows on windows. Note desktop windows
 | 
			
		||||
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
 | 
			
		||||
# unless explicitly requested using the wintypes option.
 | 
			
		||||
shadow = false;
 | 
			
		||||
 | 
			
		||||
# The blur radius for shadows, in pixels. (defaults to 12)
 | 
			
		||||
shadow-radius = 12;
 | 
			
		||||
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
 | 
			
		||||
shadow-opacity = 0.75;
 | 
			
		||||
# The left offset for shadows, in pixels. (defaults to -15)
 | 
			
		||||
shadow-offset-x = -15;
 | 
			
		||||
# The top offset for shadows, in pixels. (defaults to -15)
 | 
			
		||||
shadow-offset-y = -15;
 | 
			
		||||
# Red color value of shadow (0.0 - 1.0, defaults to 0).
 | 
			
		||||
shadow-red = 0
 | 
			
		||||
# Green color value of shadow (0.0 - 1.0, defaults to 0).
 | 
			
		||||
shadow-green = 0
 | 
			
		||||
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
 | 
			
		||||
shadow-blue = 0
 | 
			
		||||
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
 | 
			
		||||
xinerama-shadow-crop = false
 | 
			
		||||
 | 
			
		||||
# Specify a list of conditions of windows that should have no shadow.
 | 
			
		||||
shadow-exclude = [
 | 
			
		||||
  "name = 'Notification'",
 | 
			
		||||
  "class_g = 'Conky'",
 | 
			
		||||
  "class_g ?= 'Notify-osd'",
 | 
			
		||||
  "class_g = 'Cairo-clock'",
 | 
			
		||||
  "class_g = 'slop'",
 | 
			
		||||
  "class_g = 'Polybar'",
 | 
			
		||||
  "_GTK_FRAME_EXTENTS@:c"
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Window Fading
 | 
			
		||||
################
 | 
			
		||||
 | 
			
		||||
# Fade windows in/out when opening/closing and when opacity changes,
 | 
			
		||||
# unless no-fading-openclose is used.
 | 
			
		||||
fading = false;
 | 
			
		||||
 | 
			
		||||
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
 | 
			
		||||
fade-in-step = 0.07;
 | 
			
		||||
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
 | 
			
		||||
fade-out-step = 0.1;
 | 
			
		||||
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
 | 
			
		||||
fade-delta = 10
 | 
			
		||||
# Do not fade on window open/close.
 | 
			
		||||
no-fading-openclose = false
 | 
			
		||||
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox,
 | 
			
		||||
# Fluxbox, etc.
 | 
			
		||||
no-fading-destroyed-argb = false
 | 
			
		||||
 | 
			
		||||
# Specify a list of conditions of windows that should not be faded.
 | 
			
		||||
# don't need this, we disable fading for all normal windows with wintypes: {}
 | 
			
		||||
fade-exclude = [
 | 
			
		||||
  "class_g = 'slop'"   # maim
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Corners
 | 
			
		||||
################
 | 
			
		||||
 | 
			
		||||
# Sets the radius of rounded window corners. When > 0, the compositor will
 | 
			
		||||
# round the corners of windows.
 | 
			
		||||
corner-radius = 12;
 | 
			
		||||
rounded-corners-exclude = [
 | 
			
		||||
    "class_g = 'Rofi'",
 | 
			
		||||
    "class_g = 'dmenu'",
 | 
			
		||||
    "class_g = 'Polybar'",
 | 
			
		||||
    "name = 'Notification area'",
 | 
			
		||||
    "name = 'Dunst'"
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# Rounded corners alone only changes the window, but the borders
 | 
			
		||||
# around it still remain rectangular, round-borders option allows
 | 
			
		||||
# the borders to also be round.
 | 
			
		||||
round-borders = 1;
 | 
			
		||||
# Specify a list of border width rules.
 | 
			
		||||
# format: "[pixels]:[xprop info name] = '[xprop value]'"
 | 
			
		||||
# Note this doesn't have any guarantee about not conflicting with the
 | 
			
		||||
# border width set by the window manager.
 | 
			
		||||
round-borders-rule = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
[virtualenvs]
 | 
			
		||||
in-project = true
 | 
			
		||||
prefer-active-python = true
 | 
			
		||||
| 
						 | 
				
			
			@ -1,294 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# I'm not the greatest typist
 | 
			
		||||
alias sl='ls'
 | 
			
		||||
alias mdkir='mkdir'
 | 
			
		||||
alias soruce='source'
 | 
			
		||||
alias souce='source'
 | 
			
		||||
alias suod='sudo '
 | 
			
		||||
alias sduo='sudo '
 | 
			
		||||
 | 
			
		||||
# Replacements (adding flags)
 | 
			
		||||
alias cp='cp -iv' # Ask before overwriting, verbose
 | 
			
		||||
alias mv='mv -iv' # Ask before overwriting, verbose
 | 
			
		||||
alias rm='trash-put' # Use trash-cli instead of true removal
 | 
			
		||||
alias rmr='\rm -v' # True rm, verbose (asking here is too annoying)
 | 
			
		||||
alias wget='wget -c' # Resume wget by default
 | 
			
		||||
alias df='df -H' # Show sizes as powers of 1000
 | 
			
		||||
 | 
			
		||||
# Directory changing
 | 
			
		||||
alias ..='cd ..'
 | 
			
		||||
alias ...='cd ../../'
 | 
			
		||||
alias ....='cd ../../../'
 | 
			
		||||
alias .....='cd ../../../../'
 | 
			
		||||
alias .2='cd ../../'
 | 
			
		||||
alias .3='cd ../../../'
 | 
			
		||||
alias .4='cd ../../../../'
 | 
			
		||||
alias .5='cd ../../../../../'
 | 
			
		||||
 | 
			
		||||
# Files/Directories utilities
 | 
			
		||||
alias mkdir='mkdir -p'
 | 
			
		||||
alias md='mkdir'
 | 
			
		||||
alias fhere='find . -name'
 | 
			
		||||
alias rr='rmr -r'
 | 
			
		||||
alias rf='rmr -f'
 | 
			
		||||
alias rrf='rmr -rf'
 | 
			
		||||
alias vimdiff='nvim -d'
 | 
			
		||||
 | 
			
		||||
# Directory listing aliases, defaults to exa, if aviable
 | 
			
		||||
if command -v exa > /dev/null; then
 | 
			
		||||
    alias ls='exa'
 | 
			
		||||
    alias l='exa -glah --classify'
 | 
			
		||||
    alias ll='exa -glah --classify -s=size --group-directories-first -r'
 | 
			
		||||
    alias ldir='exa -glahD'
 | 
			
		||||
    alias tree='exa -Tlagh'
 | 
			
		||||
    alias dotall='exa -hulad .[a-z]*' # Show both dotdirs and dotfiles
 | 
			
		||||
    alias dotfiles='dotall | grep -v ^d' # Show all dotfiles
 | 
			
		||||
    alias dotdirs='dotall | grep --color=never ^d' # Show all dotdirs
 | 
			
		||||
else
 | 
			
		||||
    alias ls='ls --color=auto'
 | 
			
		||||
    alias l='ls -lahX --classify'
 | 
			
		||||
    alias ll='ls -lahX --classify --group-directories-first'
 | 
			
		||||
    alias ldir='ls -lahX --classify | grep --color=never ^d'
 | 
			
		||||
    alias dotall='ls -lahXd .[a-z]*'
 | 
			
		||||
    alias dotfiles='dotall | grep -v ^d'
 | 
			
		||||
    alias dotdirs='dotall | grep --color=never ^d'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Config access shortcuts
 | 
			
		||||
alias cfzsh='vim ~/.config/zsh/.zshrc'
 | 
			
		||||
alias cfalias='vim ~/.config/shell/aliases'
 | 
			
		||||
alias cffunctions='vim ~/.config/shell/functions'
 | 
			
		||||
alias cfprofile='vim ~/.config/shell/profile'
 | 
			
		||||
alias cfenvironment='vim ~/.config/shell/environment'
 | 
			
		||||
alias cfenv='cfenvironment'
 | 
			
		||||
alias cfhandlers='vim ~/.config/shell/handlers'
 | 
			
		||||
alias cfprompt='vim ~/.config/shell/prompt'
 | 
			
		||||
alias cfkeybinds='vim ~/.config/shell/keybinds'
 | 
			
		||||
alias cfxprofile='vim ~/.config/x11/xprofile'
 | 
			
		||||
alias cfxmonad='vim ~/.config/xmonad/xmonad.hs && xmonad --recompile && xmonad --restart'
 | 
			
		||||
alias cfxmobar='vim ~/.config/xmobar/xmobarrc.hs && ~/.config/xmobar/multi_mon.sh 2'
 | 
			
		||||
alias cftodo='vim ~/Personal/vimwiki/todo.md'
 | 
			
		||||
alias cfnvim='vim ~/.config/nvim'
 | 
			
		||||
alias cfvim='cfnvim'
 | 
			
		||||
 | 
			
		||||
# z.lua shortcuts
 | 
			
		||||
alias j='z'             # for the sake of autojump old habits
 | 
			
		||||
alias zz='z -c'         # restrict matches to subdirs of $PWD
 | 
			
		||||
alias zb='z -b'         # restrict matches to parent directories
 | 
			
		||||
alias zi='z -I'         # cd with interactive fzf selection
 | 
			
		||||
alias zbi='z -b -I'     # pick parent directory to cd into with fzf
 | 
			
		||||
 | 
			
		||||
# Fallbacks
 | 
			
		||||
command -v hd > /dev/null || alias hd='hexdump -C' # Cannonical hex dump; some systems have this symlinked
 | 
			
		||||
command -v md5sum > /dev/null || alias md5sum='md5' # Fallback from `md5sum` to `md5`
 | 
			
		||||
command -v sha1sum > /dev/null || alias sha1sum='shasum' # Fallback from `sha1sum` to `shasum`
 | 
			
		||||
command -v vim > /dev/null && alias vi='vim' # Let vim take precedence over vi
 | 
			
		||||
command -v nvim > /dev/null && alias vi='nvim' && alias vim='nvim' # Let nvim take precedence over vi/vim
 | 
			
		||||
command -v vimtutor > /dev/null || alias vimtutor='nvim -c Tutor'  # Let vimtutor fallback to nvim's tutor
 | 
			
		||||
 | 
			
		||||
# X11 clipboard (either using xclip or xsel, xsel takes precedence if both)
 | 
			
		||||
command -v xclip > /dev/null && alias pbcopy='xclip -selection clipboard'
 | 
			
		||||
command -v xclip > /dev/null && alias pbpaste='xclip -selection clipboard -o'
 | 
			
		||||
command -v xsel > /dev/null && alias pbcopy='xsel --clipboard --input'
 | 
			
		||||
command -v xsel > /dev/null && alias pbpaste='xsel --clipboard --output'
 | 
			
		||||
 | 
			
		||||
# File validation and manipulation
 | 
			
		||||
alias yamlcheck='python -c "import sys, yaml as y; y.safe_load(open(sys.argv[1]))"' # Validate YAML
 | 
			
		||||
alias jsoncheck='jq "." >/dev/null <' # Validate JSON
 | 
			
		||||
alias urlencode='python2 -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1]);"' # Encode strings as URLs (space->%20, etc.)
 | 
			
		||||
alias mergepdf='gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=_merged.pdf' # Usage: `mergepdf input{1,2,3}.pdf``
 | 
			
		||||
alias encrypt='gpg -c --no-symkey-cache --cipher-algo AES256' # Encrypt file with AES256 symetric encryption
 | 
			
		||||
alias decrypt='gpg' # For the sake of completeness, include decrypt command to the above, though it's only just gpg alias
 | 
			
		||||
 | 
			
		||||
# Terminal window swallowing for blocking programs (devour)
 | 
			
		||||
alias xdg-open='devour xdg-open'
 | 
			
		||||
alias mpv='devour mpv'
 | 
			
		||||
alias nomacs='devour nomacs'
 | 
			
		||||
alias pcmanfm='devour pcmanfm'
 | 
			
		||||
alias spotify='devour spotify'
 | 
			
		||||
 | 
			
		||||
# Regular expressions
 | 
			
		||||
alias reg_email='echo "[a-Z0-9._%-]+@[a-Z0-9.-]+\.[a-Z]{2,10}"'
 | 
			
		||||
alias reg_mac='echo "([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}"'
 | 
			
		||||
alias reg_ipv4='echo "([0-9]{1,3}\.){3}[0-9]{1,3}"'
 | 
			
		||||
alias reg_ipv6='echo "\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*"' # Also catches loopbacks (::1), (for valid matching, it needs to be this long...)
 | 
			
		||||
alias reg_ip='echo "(`reg_ipv4`|`reg_ipv6`)"' # Match both IPv4 and IPv6
 | 
			
		||||
 | 
			
		||||
# Grep aliases
 | 
			
		||||
alias grep_email='grep -E `reg_email`'
 | 
			
		||||
alias grep_ip='grep -E `reg_ip`'
 | 
			
		||||
alias grep_mac='grep -E `reg_mac`'
 | 
			
		||||
alias massgrep='grep -RHIni'
 | 
			
		||||
 | 
			
		||||
# Network
 | 
			
		||||
alias ip-show='curl https://ifconfig.co' # Get global IP address
 | 
			
		||||
alias ips="ifconfig -a | grep -oE \"inet6? (addr:)?s?\`reg_ip\`\" | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'"
 | 
			
		||||
alias lan-device-scan='nmap -T5 -sP 192.168.0.0-255'
 | 
			
		||||
alias lan-vuln-scan='nmap -sT -O --script vuln 192.168.0.0-255'
 | 
			
		||||
alias ports='netstat -tulanp'
 | 
			
		||||
alias listening-ports='netstat -vtlnp --listening'
 | 
			
		||||
alias ssh-list='ss | grep ssh' # List all SSH connections
 | 
			
		||||
alias serve='python -m http.server'  # Serve current directorty as HTTP
 | 
			
		||||
alias reverse-dns='host' # It might be easier to just use `host` though
 | 
			
		||||
alias torify='source torsocks on' # Pass every command via torsocks
 | 
			
		||||
alias untorify='source torsocks off' # Stop passing commands via torsocks
 | 
			
		||||
 | 
			
		||||
# Firewall aliases (IPTables/UFW)
 | 
			
		||||
alias ipt='iptables' # Shortcut
 | 
			
		||||
alias iptlist='iptables -L -n -v --line-numbers'  # All rules
 | 
			
		||||
alias iptlistin='iptables -L INPUT -n -v --line-numbers' # IN rules
 | 
			
		||||
alias iptlistout='iptables -L OUTPUT -n -v --line-numbers' # OUT rules
 | 
			
		||||
alias iptlistfw='iptables -L FORWARD -n -v --line-numbers' # FORWARD rules
 | 
			
		||||
alias ufw-log='journalctl -f -n 100 -g ufw' # Show UFW log entries in system journal
 | 
			
		||||
 | 
			
		||||
# Kernel actions
 | 
			
		||||
alias kernel-recompile='cd /usr/src/linux && make -j7 && make -j7 modules_install && make install'
 | 
			
		||||
alias kernel-oldconfig='cd /usr/src/linux && make oldconfig'
 | 
			
		||||
alias kernel-configure='cd /usr/src/linux && make menuconfig'
 | 
			
		||||
 | 
			
		||||
# System actions
 | 
			
		||||
alias sv='systemctl'
 | 
			
		||||
alias pacnew="find / -name '*.pacnew' 2>/dev/null" # Search for all new configurations after pacman update
 | 
			
		||||
alias backup="rsync -avHAXS --delete --filter='dir-merge /.rsync-filter'" # Make full rsync backup, respecting .rsync-filter files for exclusions
 | 
			
		||||
alias upload='curl -F "f:1=<-" ix.io'
 | 
			
		||||
alias upload-journal='sudo journalctl -b -1 | upload' # Upload journalctl from last boot to ix.io
 | 
			
		||||
alias auth-log='journalctl SYSLOG_FACILITY=10 -r'
 | 
			
		||||
alias cpu-stress='for i in $(seq $(getconf _NPROCESSORS_ONLN)); do yes > /dev/null & done' # Run `yes > /dev/null` on all cores as stress test
 | 
			
		||||
alias nvidia='__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia' # Run app with nvidia (on hybrid mode with optimus)
 | 
			
		||||
alias swapout='sudo swapoff -a; sudo swapon -a' # Reset swap (move everything to RAM)
 | 
			
		||||
alias mount-ram='mount -t tmpfs tmpfs' # Mount RAM disk for fast filesystem
 | 
			
		||||
alias screenlock='xset s activate' # Use DPMS to trigger xss-lock and handle screen locking
 | 
			
		||||
 | 
			
		||||
# System info
 | 
			
		||||
alias meminfo='free -m -l -t'
 | 
			
		||||
alias cpuinfo='lscpu'
 | 
			
		||||
alias batinfo='sudo watch -d -n 2 tlp-stat -b'
 | 
			
		||||
alias battery='cat /sys/class/power_supply/BAT0/capacity'
 | 
			
		||||
alias gpumeminfo='frep -i --color memory /var/log/Xorg.0.log'
 | 
			
		||||
alias journalerr='sudo journalctl -p 3 -xb'
 | 
			
		||||
alias distro='cat /etc/*-release'
 | 
			
		||||
alias diskspace_report="df -P -kHl"
 | 
			
		||||
alias kernel='uname -r'
 | 
			
		||||
 | 
			
		||||
# System processes
 | 
			
		||||
alias psmem='ps auxf | sort -nr -k 4' # Top memory eaters
 | 
			
		||||
alias psmem10='psmem | head -10' # Top 10 memory eaters
 | 
			
		||||
alias pscpu='ps auxf | sort -nr -k 3' # Top cpu eaters
 | 
			
		||||
alias pscpu10='pscpu | head -10' # Top 10 cpu eaters
 | 
			
		||||
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e' # Get searchable process with nice output
 | 
			
		||||
 | 
			
		||||
# Time info
 | 
			
		||||
alias now='date +"%T"'
 | 
			
		||||
alias nowtime='now'
 | 
			
		||||
alias nowdate='date +"%d-%m-%Y"'
 | 
			
		||||
alias week='date +%V'
 | 
			
		||||
 | 
			
		||||
# Cleanup
 | 
			
		||||
alias clean-trash='rm -rf ~/.local/share/Trash/* || echo "Trash already empty"'
 | 
			
		||||
alias clean-downloads='rm -rf ~/Downloads/* || echo "Downloads directory is already empty"'
 | 
			
		||||
alias clean-journal='journalctl --vacuum-size=200M || echo "You have to be root to clean journal"'
 | 
			
		||||
alias clean-pacman='pacman -Sc || echo "You have to be root to clean pacman cache"'
 | 
			
		||||
alias cleanup='clean-trash && clean-down && clean-journal && clean-pacman'
 | 
			
		||||
 | 
			
		||||
# Git aliases
 | 
			
		||||
alias g='git'
 | 
			
		||||
alias gp='git push'
 | 
			
		||||
alias gpl='git pull'
 | 
			
		||||
alias gf='git fetch'
 | 
			
		||||
alias gs='git status --short --branch'
 | 
			
		||||
alias gss='git status'
 | 
			
		||||
alias ga='git add'
 | 
			
		||||
alias gap='git add --patch'
 | 
			
		||||
alias gc='git commit'
 | 
			
		||||
alias gcm='git commit --message'
 | 
			
		||||
alias gb='git branch'
 | 
			
		||||
alias gch='git checkout'
 | 
			
		||||
alias gchb='git checkout -b'
 | 
			
		||||
alias gd='git diff'
 | 
			
		||||
alias gdc='git diff --cached'
 | 
			
		||||
alias gundo='git reset --soft HEAD~'
 | 
			
		||||
alias gredo="git reset 'HEAD@{1}'"
 | 
			
		||||
 | 
			
		||||
# Youtube-dl aliases
 | 
			
		||||
alias ytv-best='youtube-dl -f bestvideo+bestaudio'
 | 
			
		||||
alias yta-best='youtube-dl --extract-audio --audio-format best'
 | 
			
		||||
alias yta-mp3='youtube-dl --extract-audio --audio-format mp3'
 | 
			
		||||
alias yta-wav='youtube-dl --extract-audio --audio-format wav'
 | 
			
		||||
 | 
			
		||||
# Terminal vim-like exits, in case I think the terminal is vim
 | 
			
		||||
alias :q='exit'
 | 
			
		||||
alias :q!='exit'
 | 
			
		||||
alias :wq='exit'
 | 
			
		||||
alias :wq!='exit'
 | 
			
		||||
 | 
			
		||||
# Shell aliases
 | 
			
		||||
alias reload="exec \$SHELL" # Reload the shell (i.e. invoke as a login shell)
 | 
			
		||||
alias path='echo -e ${PATH//:/\\n}' # Print each PATH entry on a separate line
 | 
			
		||||
alias unsudo='sudo -k' # Reset sudo timeout (sudo will require password)
 | 
			
		||||
alias vimwiki='vim -c VimwikiIndex' # Open vimwiki index
 | 
			
		||||
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
 | 
			
		||||
alias tty-clock='tty-clock -Ssc' # Terminal clock screensaver
 | 
			
		||||
alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll
 | 
			
		||||
alias hist='fc -lt "$HISTTIMEFORMAT" 1'
 | 
			
		||||
 | 
			
		||||
# If user is not root, pass all commands via sudo/doas
 | 
			
		||||
if [ "$(id -u)" -ne 0 ]; then
 | 
			
		||||
    # Enable aliases to be sudoed/doased
 | 
			
		||||
    # with doas having precedence over sudo if found
 | 
			
		||||
 | 
			
		||||
    ## Uncomment if you are using autocompletion (is ZSH)
 | 
			
		||||
    #command -v /usr/bin/sudo > /dev/null && alias doas='nocorrect sudo ' && alias sudo='nocorrect sudo '
 | 
			
		||||
    #command -v /usr/bin/doas > /dev/null && alias doas='nocorrect doas ' && alias sudo='nocorrect doas '
 | 
			
		||||
 | 
			
		||||
    ## if the above is uncommented, comment this
 | 
			
		||||
    command -v /usr/bin/sudo > /dev/null && alias doas='sudo ' && alias sudo='sudo '
 | 
			
		||||
    command -v /usr/bin/doas > /dev/null && alias doas='doas ' && alias sudo='doas '
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# enable color support
 | 
			
		||||
if [ -x /usr/bin/dircolors ]; then
 | 
			
		||||
    (test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)") || eval "$(dircolors -b)"
 | 
			
		||||
    alias dir='dir --color=auto'
 | 
			
		||||
    alias vdir='vdir --color=auto'
 | 
			
		||||
 | 
			
		||||
    alias grep='grep --color=auto'
 | 
			
		||||
    alias cgrep='grep --color=always'
 | 
			
		||||
    alias fgrep='fgrep --color=auto'
 | 
			
		||||
    alias egrep='egrep --color=auto'
 | 
			
		||||
 | 
			
		||||
    alias diff='diff --color=auto'
 | 
			
		||||
    alias ip='ip --color=auto'
 | 
			
		||||
 | 
			
		||||
    # Take advantage of $LS_COLORS for completion as well
 | 
			
		||||
    zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Normalize `open` across Linux, macOS, and Windows.
 | 
			
		||||
# This is needed to make `open` function (see below) cross-platform
 | 
			
		||||
if [ ! "$(uname -s)" = 'Darwin' ]; then
 | 
			
		||||
    if grep -q Microsoft /proc/version; then
 | 
			
		||||
        # Ubuntu on Windows using the Linux subsystem
 | 
			
		||||
        alias open='explorer.exe'
 | 
			
		||||
    else
 | 
			
		||||
        alias open='xdg-open'
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Autogenerate python aliases
 | 
			
		||||
if [ -f ~/.config/shell/py-alias ]; then
 | 
			
		||||
    # shellcheck source=/home/itsdrike/.config/shell/py-alias
 | 
			
		||||
    . "$HOME/.config/shell/py-alias"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Functions
 | 
			
		||||
if [ -f ~/.config/shell/functions ]; then
 | 
			
		||||
    # shellcheck source=/home/itsdrike/.config/shell/functions
 | 
			
		||||
    . "$HOME/.config/shell/functions"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Extra
 | 
			
		||||
if [ -f ~/.config/shell/extra ]; then
 | 
			
		||||
    # shellcheck source=/home/itsdrike/.config/shell/extra
 | 
			
		||||
    . "$HOME/.config/shell/extra"
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,78 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Environmental variable definitions.
 | 
			
		||||
# This file is only sourced once after login, unlike .zshrc/.bashrc
 | 
			
		||||
#
 | 
			
		||||
# NOTE: This file shouldn't be defined for root account. Sudo
 | 
			
		||||
# will not source it (and neither will it source .zshrc/.zprofile),
 | 
			
		||||
# which means the XDG definitions will be ignored anyway, and
 | 
			
		||||
# defining them may break programs when root is actually logged in.
 | 
			
		||||
 | 
			
		||||
# Define some variables for POSIX compatibility
 | 
			
		||||
uid="$(id -u)"
 | 
			
		||||
 | 
			
		||||
# Default programs
 | 
			
		||||
export EDITOR="nvim"
 | 
			
		||||
export BROWSER="firefox"
 | 
			
		||||
export TERMINAL="alacritty"
 | 
			
		||||
export DIFFPROG="nvim -d"
 | 
			
		||||
export FILEMANAGER="pcmanfm"
 | 
			
		||||
 | 
			
		||||
# XDG Standard paths
 | 
			
		||||
export XDG_CONFIG_HOME="$HOME/.config"
 | 
			
		||||
export XDG_CACHE_HOME="$HOME/.cache"
 | 
			
		||||
export XDG_DATA_HOME="$HOME/.local/share"
 | 
			
		||||
export XDG_RUNTIME_DIR="/run/user/$uid"
 | 
			
		||||
 | 
			
		||||
# Per-Application XDG settings
 | 
			
		||||
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
 | 
			
		||||
export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
 | 
			
		||||
#export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # This line will break some DMs.
 | 
			
		||||
export LESSHISTFILE="-"
 | 
			
		||||
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
 | 
			
		||||
export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
 | 
			
		||||
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
 | 
			
		||||
# Less commonly used applications
 | 
			
		||||
export _ZL_DATA="$XDG_DATA_HOME/zlua"
 | 
			
		||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
 | 
			
		||||
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
 | 
			
		||||
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
 | 
			
		||||
export GOPATH="$XDG_DATA_HOME/go"
 | 
			
		||||
export IPYTHONDIR="$XDG_CONFIG_HOME/ipython"
 | 
			
		||||
export PYENV_ROOT="$XDG_DATA_HOME/pyenv"
 | 
			
		||||
export MYPY_CACHE_DIR="$XDG_CACHE_HOME/mypy"
 | 
			
		||||
export CARGO_HOME="$XDG_DATA_HOME/cargo"
 | 
			
		||||
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
 | 
			
		||||
export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle"
 | 
			
		||||
export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"
 | 
			
		||||
#export PYLINTHOME="$XDG_CACHE_HOME/pylint"
 | 
			
		||||
#export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
 | 
			
		||||
#export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
 | 
			
		||||
 | 
			
		||||
# Colorful man pages
 | 
			
		||||
# If bat is installed, use it as manpager
 | 
			
		||||
# shellcheck disable=SC2155
 | 
			
		||||
if command -v bat > /dev/null; then
 | 
			
		||||
    export MANPAGER="sh -c 'col -bx | bat -l man -p'"
 | 
			
		||||
else
 | 
			
		||||
    export LESS_TERMCAP_mb="$(printf '%b' '[1;31m')"
 | 
			
		||||
    export LESS_TERMCAP_md="$(printf '%b' '[1;36m')"
 | 
			
		||||
    export LESS_TERMCAP_me="$(printf '%b' '[0m')"
 | 
			
		||||
    export LESS_TERMCAP_so="$(printf '%b' '[01;44;33m')"
 | 
			
		||||
    export LESS_TERMCAP_se="$(printf '%b' '[0m')"
 | 
			
		||||
    export LESS_TERMCAP_us="$(printf '%b' '[1;32m')"
 | 
			
		||||
    export LESS_TERMCAP_ue="$(printf '%b' '[0m')"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Other program settings
 | 
			
		||||
export HISTTIMEFORMAT="%Y-%m-%d %T "
 | 
			
		||||
export SUDO_ASKPASS="$HOME/.local/bin/scripts/dmenu/dmenupass"
 | 
			
		||||
export PIPENV_VENV_IN_PROJECT=1         # Force pipenv to create new environments within projects ./.venv
 | 
			
		||||
export XSECURELOCK_SHOW_HOSTNAME=0      # Don't show hostname in xsecurelock
 | 
			
		||||
export XSECURELOCK_SHOW_DATETIME=1      # Show current date and time in xsecurelock
 | 
			
		||||
export QT_QPA_PLATFORMTHEME="qt5ct"     # Have QT use theme from qt5ct.
 | 
			
		||||
#export QT_STYLE_OVERRIDE="gtk2"        # Have QT use the gtk2 theme (needs aur/qt5-styleplugins)
 | 
			
		||||
 | 
			
		||||
# Remove irrelevant variables added for posix compatibility
 | 
			
		||||
unset posix
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,291 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# TODO: Currently, this file isn't entirely POSIX compatible,
 | 
			
		||||
# it will run fine with bash or zsh, however some functions may cause
 | 
			
		||||
# issues with pure POSIX. The fill will however run fine, the errors
 | 
			
		||||
# would only occur if the incompatible functions would be started.
 | 
			
		||||
 | 
			
		||||
# Show application listening on given port
 | 
			
		||||
port() {
 | 
			
		||||
    sudo netstat -pln | grep "$1" | awk '{print $NF}'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Create a new directory and enter it
 | 
			
		||||
mkd() {
 | 
			
		||||
    # shellcheck disable=SC2164
 | 
			
		||||
    mkdir -p "$1" && cd "$1";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# `o` with no arguments opens the current directory, otherwise opens the given
 | 
			
		||||
# location
 | 
			
		||||
o() {
 | 
			
		||||
    if [ $# -eq 0 ]; then
 | 
			
		||||
        open .;
 | 
			
		||||
    else
 | 
			
		||||
        open "$@";
 | 
			
		||||
    fi;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Use bat for nicer git diffs
 | 
			
		||||
batdiff() {
 | 
			
		||||
    git diff --name-only --diff-filter=d | xargs bat --diff
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Determine size of a file or total size of a directory
 | 
			
		||||
dirsize() {
 | 
			
		||||
    if du -b /dev/null > /dev/null 2>&1; then
 | 
			
		||||
        arg=-sbh;
 | 
			
		||||
    else
 | 
			
		||||
        arg=-sh;
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -n "$*" ]]; then
 | 
			
		||||
        \du $arg -- "$@";
 | 
			
		||||
    else
 | 
			
		||||
        \du $arg .[^.]* ./*;
 | 
			
		||||
    fi;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
randmac() {
 | 
			
		||||
    sudo ip link set dev "$1" down
 | 
			
		||||
    sudo macchanger -A "$1"
 | 
			
		||||
    sudo ip link set dev "$1" up
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Go to the root of a git tree
 | 
			
		||||
cdgit () {
 | 
			
		||||
    if [ "$(git rev-parse --is-inside-work-tree > /dev/null 2>&1)" -eq 0 ]; then
 | 
			
		||||
        while ! [ -d .git ]; do
 | 
			
		||||
            cd ..
 | 
			
		||||
        done
 | 
			
		||||
        return 0
 | 
			
		||||
    else
 | 
			
		||||
        echo "Not a git directory"
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Create a data URL from a file
 | 
			
		||||
dataurl() {
 | 
			
		||||
    mimeType="$(file -b --mime-type "$1")"
 | 
			
		||||
    if echo "$mimeType" | grep -e "^text/.*$" >/dev/null; then
 | 
			
		||||
        mimeType="${mimeType};charset=utf-8"
 | 
			
		||||
    fi
 | 
			
		||||
    echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
 | 
			
		||||
# the `.git` directory, listing directories first. The output gets piped into
 | 
			
		||||
# `less` with options to preserve color and line numbers, unless the output is
 | 
			
		||||
# small enough for one screen.
 | 
			
		||||
tre() {
 | 
			
		||||
    tree -I '.git|node_modules|bower_components' --group-directories-first "$@" | less -FRNX;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Show all the names (CNs and SANs) listed in the SSL certificate
 | 
			
		||||
# for a given domain
 | 
			
		||||
getcertnames() {
 | 
			
		||||
    if [ -z "${1}" ]; then
 | 
			
		||||
        echo "ERROR: No domain specified.";
 | 
			
		||||
        return 1;
 | 
			
		||||
    fi;
 | 
			
		||||
 | 
			
		||||
    domain="${1}";
 | 
			
		||||
    echo "Testing ${domain}…";
 | 
			
		||||
    echo ""; # newline
 | 
			
		||||
 | 
			
		||||
    tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
 | 
			
		||||
        | openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1);
 | 
			
		||||
 | 
			
		||||
    if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then
 | 
			
		||||
        certText=$(echo "${tmp}" \
 | 
			
		||||
            | openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \
 | 
			
		||||
            no_serial, no_sigdump, no_signame, no_validity, no_version");
 | 
			
		||||
        echo "Common Name:";
 | 
			
		||||
        echo ""; # newline
 | 
			
		||||
        echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//";
 | 
			
		||||
        echo ""; # newline
 | 
			
		||||
        echo "Subject Alternative Name(s):";
 | 
			
		||||
        echo ""; # newline
 | 
			
		||||
        echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
 | 
			
		||||
            | sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
 | 
			
		||||
        return 0;
 | 
			
		||||
    else
 | 
			
		||||
        echo "ERROR: Certificate not found.";
 | 
			
		||||
        return 1;
 | 
			
		||||
    fi;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Compare original and gzipped file size
 | 
			
		||||
gz_compare() {
 | 
			
		||||
    origsize=$(wc -c < "$1");
 | 
			
		||||
    gzipsize=$(gzip -c "$1" | wc -c);
 | 
			
		||||
    ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l);
 | 
			
		||||
    printf "orig: %d bytes\n" "$origsize";
 | 
			
		||||
    printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Extract almost any archive
 | 
			
		||||
extract() {
 | 
			
		||||
 if [ -z "$1" ]; then
 | 
			
		||||
    # display usage if no parameters given
 | 
			
		||||
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
 | 
			
		||||
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
 | 
			
		||||
    return 1
 | 
			
		||||
 else
 | 
			
		||||
    for n in "$@"
 | 
			
		||||
    do
 | 
			
		||||
      if [ -f "$n" ] ; then
 | 
			
		||||
          case "${n%,}" in
 | 
			
		||||
            *.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
 | 
			
		||||
                         tar xvf "$n"       ;;
 | 
			
		||||
            *.lzma)      unlzma ./"$n"      ;;
 | 
			
		||||
            *.bz2)       bunzip2 ./"$n"     ;;
 | 
			
		||||
            *.rar)       unrar x -ad ./"$n" ;;
 | 
			
		||||
            *.gz)        gunzip ./"$n"      ;;
 | 
			
		||||
            *.zip)       unzip ./"$n"       ;;
 | 
			
		||||
            *.z)         uncompress ./"$n"  ;;
 | 
			
		||||
            *.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
 | 
			
		||||
                         7z x ./"$n"        ;;
 | 
			
		||||
            *.xz)        unxz ./"$n"        ;;
 | 
			
		||||
            *.exe)       cabextract ./"$n"  ;;
 | 
			
		||||
            *)
 | 
			
		||||
                         echo "extract: '$n' - unknown archive method"
 | 
			
		||||
                         return 1
 | 
			
		||||
                         ;;
 | 
			
		||||
          esac
 | 
			
		||||
      else
 | 
			
		||||
          echo "'$n' - file does not exist"
 | 
			
		||||
          return 1
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression
 | 
			
		||||
targz() {
 | 
			
		||||
    # Combine given names spearated with spaces as the filename
 | 
			
		||||
    tmpFile="${*%/}.tar"
 | 
			
		||||
 | 
			
		||||
    tar -cvf "${tmpFile}" "${@}" || return 1
 | 
			
		||||
 | 
			
		||||
    size=$(
 | 
			
		||||
        stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat`
 | 
			
		||||
        stat -c"%s" "${tmpFile}" 2> /dev/null;  # GNU `stat`
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cmd="";
 | 
			
		||||
    if (( size < 52428800 )) && hash zopfli 2> /dev/null; then
 | 
			
		||||
        # the .tar file is smaller than 50 MB and Zopfli is available; use it
 | 
			
		||||
        cmd="zopfli";
 | 
			
		||||
    else
 | 
			
		||||
        if hash pigz 2> /dev/null; then
 | 
			
		||||
            cmd="pigz";
 | 
			
		||||
        else
 | 
			
		||||
            cmd="gzip";
 | 
			
		||||
        fi;
 | 
			
		||||
    fi;
 | 
			
		||||
 | 
			
		||||
    echo "Compressing .tar ($((size / 1000)) kB) using \`${cmd}\`…";
 | 
			
		||||
    "${cmd}" -v "${tmpFile}" || return 1;
 | 
			
		||||
    [ -f "${tmpFile}" ] && rm "${tmpFile}";
 | 
			
		||||
 | 
			
		||||
    zippedSize=$(
 | 
			
		||||
        stat -f"%z" "${tmpFile}.gz" 2> /dev/null; # macOS `stat`
 | 
			
		||||
        stat -c"%s" "${tmpFile}.gz" 2> /dev/null; # GNU `stat`
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully.";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
anonymize() {
 | 
			
		||||
    # Reset the prompt on initial run to allow this script
 | 
			
		||||
    # to be ran multiple times without user having to reload
 | 
			
		||||
    # PS1 manually
 | 
			
		||||
    # shellcheck source=/home/itsdrike/.config/shell/prompt
 | 
			
		||||
    . "${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt"
 | 
			
		||||
 | 
			
		||||
    # Regular expression to match 0-255 numbers (color)
 | 
			
		||||
    color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
 | 
			
		||||
 | 
			
		||||
    # Defaults
 | 
			
		||||
    NAME="%n"
 | 
			
		||||
    MACHINE=""
 | 
			
		||||
    #NAME_COLOR="%F{047}"
 | 
			
		||||
    NAME_COLOR="%F{172}"
 | 
			
		||||
    #DIR_COLOR="%F{027}"
 | 
			
		||||
    DIR_COLOR="%F{158}"
 | 
			
		||||
    AT_COLOR="%F{004}"
 | 
			
		||||
    MACHINE_COLOR="%F{070}"
 | 
			
		||||
 | 
			
		||||
    while [ $# -gt 0 ]; do
 | 
			
		||||
        key=$1
 | 
			
		||||
 | 
			
		||||
        case $key in
 | 
			
		||||
            -n|--name)
 | 
			
		||||
                NAME=$2
 | 
			
		||||
                shift
 | 
			
		||||
                shift
 | 
			
		||||
                ;;
 | 
			
		||||
            -m|--machine)
 | 
			
		||||
                MACHINE=$2
 | 
			
		||||
                shift
 | 
			
		||||
                shift
 | 
			
		||||
                ;;
 | 
			
		||||
            -nc|--name-color)
 | 
			
		||||
                if [[ $2 =~ $color_int_re ]]; then
 | 
			
		||||
                    NAME_COLOR="%F{$2}"
 | 
			
		||||
                else
 | 
			
		||||
                    NAME_COLOR=$2
 | 
			
		||||
                fi
 | 
			
		||||
                shift
 | 
			
		||||
                shift
 | 
			
		||||
                ;;
 | 
			
		||||
            -dc|--dir-color)
 | 
			
		||||
                if [[ $2 =~ $color_int_re ]]; then
 | 
			
		||||
                    DIR_COLOR="%F{$2}"
 | 
			
		||||
                else
 | 
			
		||||
                    DIR_COLOR=$2
 | 
			
		||||
                fi
 | 
			
		||||
                shift
 | 
			
		||||
                shift
 | 
			
		||||
                ;;
 | 
			
		||||
            -mc|--machine-color)
 | 
			
		||||
                if [[ $2 =~ $color_int_re ]]; then
 | 
			
		||||
                    MACHINE_COLOR="%F{$2}"
 | 
			
		||||
                else
 | 
			
		||||
                    MACHINE_COLOR=$2
 | 
			
		||||
                fi
 | 
			
		||||
                shift
 | 
			
		||||
                shift
 | 
			
		||||
                ;;
 | 
			
		||||
            -ac|--at-color)
 | 
			
		||||
                if [[ $2 =~ $color_int_re ]]; then
 | 
			
		||||
                    AT_COLOR="%F{$2}"
 | 
			
		||||
                else
 | 
			
		||||
                    AT_COLOR=$2
 | 
			
		||||
                fi
 | 
			
		||||
                shift
 | 
			
		||||
                shift
 | 
			
		||||
                ;;
 | 
			
		||||
            *)
 | 
			
		||||
                echo "Unrecognized argument: $key"
 | 
			
		||||
                echo "Arguments: -n|--name, -m|--machine, -nc|--name-color, -dc|--dir-color, -mc|--machine-color, -ac|--at-color"
 | 
			
		||||
                return 1
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    OLD_LINE="%F{047}%n%f %F{027}"
 | 
			
		||||
 | 
			
		||||
    [ -n "$NAME" ] && NEW_LINE="${NAME_COLOR}${NAME}"
 | 
			
		||||
    [ -n "$NAME" ] && [ -n "$MACHINE" ] && NEW_LINE="${NEW_LINE}${AT_COLOR}@"
 | 
			
		||||
    [ -n "$MACHINE" ] && NEW_LINE="${NEW_LINE}${MACHINE_COLOR}${MACHINE}"
 | 
			
		||||
    [ -n "$NAME" ] || [ -n "$MACHINE" ] && NEW_LINE="${NEW_LINE}%f "
 | 
			
		||||
    NEW_LINE="${NEW_LINE}${DIR_COLOR}"
 | 
			
		||||
 | 
			
		||||
    # Use new anonymized name, machine and colors in PS1
 | 
			
		||||
    PS1=${PS1/"$OLD_LINE"/"$NEW_LINE"}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,40 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
if command -v pkgfile > /dev/null; then
 | 
			
		||||
    # Command not found hook that uses `pkgfile` package
 | 
			
		||||
    # to search through the package index in order to find
 | 
			
		||||
    # a package which includes given command, which was resolved
 | 
			
		||||
    # and not found, if there are no such packages, only print
 | 
			
		||||
    # command not found message
 | 
			
		||||
    command_not_found_handler() {
 | 
			
		||||
        cmd="$1"
 | 
			
		||||
        printf 'zsh: command not found: %s' "$cmd" # print command not found asap, then search for packages
 | 
			
		||||
        repos="$(pkgfile "$cmd")"
 | 
			
		||||
        if [ -n "$repos" ]; then
 | 
			
		||||
            printf '\r%s may be found in the following packages:\n' "$cmd"
 | 
			
		||||
            echo "$repos" | while read -r pkg; do
 | 
			
		||||
                printf '  %s\n' "$pkg"
 | 
			
		||||
            done
 | 
			
		||||
        else
 | 
			
		||||
            printf '\n'
 | 
			
		||||
        fi
 | 
			
		||||
        return 127
 | 
			
		||||
    }
 | 
			
		||||
elif [ -x /usr/lib/command-not-found ] || [ -x /usr/share/command-not-found/command-not-found ]; then
 | 
			
		||||
    # Ubuntu handle for bash default command-not-found
 | 
			
		||||
    # it works similarely to the above arch alternative,
 | 
			
		||||
    # this is based on the original bash implementation
 | 
			
		||||
    command_not_found_handler() {
 | 
			
		||||
        # check because cmd not found could've been removed in the meantime
 | 
			
		||||
        if [ -x /usr/lib/command-not-found ]; then
 | 
			
		||||
            /usr/lib/command-not-found -- "$1"
 | 
			
		||||
            return $?
 | 
			
		||||
        elif [ -x /usr/share/command-not-found/command-not-found ]; then
 | 
			
		||||
            /usr/share/command-not-found/command-not-found -- "$1"
 | 
			
		||||
            return $?
 | 
			
		||||
        else
 | 
			
		||||
            printf "%s: command not found\n" "$1" >&2
 | 
			
		||||
            return 127
 | 
			
		||||
        fi
 | 
			
		||||
    }
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,65 +0,0 @@
 | 
			
		|||
#!/usr/bin/env zsh
 | 
			
		||||
# shellcheck disable=SC2030,SC2031,SC2015
 | 
			
		||||
# Set default keybindings (mostly from oh-my-zsh)
 | 
			
		||||
 | 
			
		||||
# Make sure that the terminal is in application mode when zle is active, since
 | 
			
		||||
# only then values from $terminfo are valid
 | 
			
		||||
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
 | 
			
		||||
  function zle-line-init() {
 | 
			
		||||
    echoti smkx
 | 
			
		||||
  }
 | 
			
		||||
  function zle-line-finish() {
 | 
			
		||||
    echoti rmkx
 | 
			
		||||
  }
 | 
			
		||||
  zle -N zle-line-init
 | 
			
		||||
  zle -N zle-line-finish
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Use emacs keybindings
 | 
			
		||||
bindkey -e
 | 
			
		||||
 | 
			
		||||
# Start typing + [Up-Arrow] - fuzzy find history forward
 | 
			
		||||
if [ -n "${terminfo[kcuu1]}" ]; then
 | 
			
		||||
  autoload -U up-line-or-beginning-search
 | 
			
		||||
  zle -N up-line-or-beginning-search
 | 
			
		||||
  bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
 | 
			
		||||
fi
 | 
			
		||||
# Start typing + [Down-Arrow] - fuzzy find history backward
 | 
			
		||||
if [ -n "${terminfo[kcud1]}" ]; then
 | 
			
		||||
  autoload -U down-line-or-beginning-search
 | 
			
		||||
  zle -N down-line-or-beginning-search
 | 
			
		||||
  bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# [Home] - Go to beginning of line
 | 
			
		||||
[ -n "${terminfo[khome]}" ] && bindkey "${terminfo[khome]}" beginning-of-line || bindkey "^[[H" beginning-of-line
 | 
			
		||||
# [End] - Go to end of line
 | 
			
		||||
[ -n "${terminfo[kend]}" ] && bindkey "${terminfo[kend]}"  end-of-line || bindkey "^[[F"  end-of-line
 | 
			
		||||
 | 
			
		||||
# [Shift-Tab] - move through the completion menu backwards
 | 
			
		||||
[ -n "${terminfo[kcbt]}" ] && bindkey "${terminfo[kcbt]}" reverse-menu-complete
 | 
			
		||||
 | 
			
		||||
# [Backspace] - delete backward
 | 
			
		||||
bindkey '^?' backward-delete-char
 | 
			
		||||
# [Delete] - delete forward
 | 
			
		||||
[ -n "${terminfo[kdch1]}" ] && bindkey "${terminfo[kdch1]}" delete-char || bindkey "^[[3~" delete-char
 | 
			
		||||
# [Ctrl-Delete] - delete whole forward-word
 | 
			
		||||
bindkey '^[[3;5~' kill-word
 | 
			
		||||
 | 
			
		||||
# [Ctrl-RightArrow] - move forward one word
 | 
			
		||||
bindkey '^[[1;5C' forward-word
 | 
			
		||||
# [Ctrl-LeftArrow] - move backward one word
 | 
			
		||||
bindkey '^[[1;5D' backward-word
 | 
			
		||||
 | 
			
		||||
# [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
 | 
			
		||||
bindkey '^r' history-incremental-search-backward
 | 
			
		||||
# [PageUp] - Up a line of history
 | 
			
		||||
[ -n "${terminfo[kpp]}" ] && bindkey "${terminfo[kpp]}" up-line-or-history
 | 
			
		||||
# [PageDown] - Down a line of history
 | 
			
		||||
[ -n "${terminfo[knp]}" ] && bindkey "${terminfo[knp]}" down-line-or-history
 | 
			
		||||
 | 
			
		||||
# [Space] - do history expansion on space
 | 
			
		||||
bindkey ' ' magic-space
 | 
			
		||||
 | 
			
		||||
# [ctrl+space] Accept suggestion from zsh-autosuggestions plugin
 | 
			
		||||
bindkey '^ ' autosuggest-accept
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# User .profile definition.
 | 
			
		||||
# This file is only sourced once, after login, Unlike
 | 
			
		||||
# .zshrc/.bashrc, which will run whenever a new terminal
 | 
			
		||||
# is opened.
 | 
			
		||||
 | 
			
		||||
# Add all folders in ~/.local/bin into PATH
 | 
			
		||||
# Some window managers require this line to be in profile
 | 
			
		||||
# not in .zshenv
 | 
			
		||||
PATH+=":${$(find ~/.local/bin -type d | tr '\n' ':')%%:}"
 | 
			
		||||
 | 
			
		||||
# Start graphical session automatically on tty1 if startx is aviable
 | 
			
		||||
if [ "$(tty)" = "/dev/tty1" ] && [ "$UID" != 0 ]; then
 | 
			
		||||
    if command -v startx > /dev/null; then
 | 
			
		||||
        ! pidof -s Xorg > /dev/null 2>&1 && exec startx "$XINITRC"
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,187 +0,0 @@
 | 
			
		|||
#!/usr/bin/env zsh
 | 
			
		||||
# shellcheck disable=SC2155
 | 
			
		||||
 | 
			
		||||
# Configuration variables:
 | 
			
		||||
 | 
			
		||||
# Once we are too deep in the filestructure, we can usually afford to shorten
 | 
			
		||||
# the whole working directory and only print something like ~/.../dir3/dir4/dir5
 | 
			
		||||
# instead of ~/dir1/dir2/dir3/dir4/dir5. If this isn't desired, set this to 0
 | 
			
		||||
USE_SHORTENED_WORKDIR=1
 | 
			
		||||
 | 
			
		||||
# Show how much time it took to run a command
 | 
			
		||||
CMD_TIME_SHOW=1
 | 
			
		||||
# Minimum units to show the time precision, if
 | 
			
		||||
# we use "s" (seconds), and the output took 0s,
 | 
			
		||||
# we don't print the output at all to avoid clutter.
 | 
			
		||||
# Same goes for any other units, however with "ms"
 | 
			
		||||
# (miliseconds), this is very unlikely
 | 
			
		||||
# Valid options: ms/s/m/h/d
 | 
			
		||||
CMD_TIME_PRECISION="s"
 | 
			
		||||
# Minimum time in miliseconds, to print the time took,
 | 
			
		||||
# if the command takes less than this amount of miliseconds,
 | 
			
		||||
# don't bother printing the time took, this is nice if you
 | 
			
		||||
# don't need to see how long commands like 'echo' took
 | 
			
		||||
# Setting this to 0 will always print the time taken
 | 
			
		||||
CMD_TIME_MINIMUM=100
 | 
			
		||||
 | 
			
		||||
# hide EOL sign ('%')
 | 
			
		||||
export PROMPT_EOL_MARK=""
 | 
			
		||||
 | 
			
		||||
# TTY (pure linux) terminal only has 8-bit color support
 | 
			
		||||
# (unless you change it in kernel), respect this and downgrade
 | 
			
		||||
# the color scheme accordingly (it won't look best, but it's
 | 
			
		||||
# still better than no colors)
 | 
			
		||||
if [ "$TERM" = "linux" ]; then
 | 
			
		||||
    GREEN="%F{002}"
 | 
			
		||||
    RED="%F{001}"
 | 
			
		||||
    ORANGE="%F{003}"
 | 
			
		||||
    BLUE="%F{004}"
 | 
			
		||||
    LBLUE="%F{006}"
 | 
			
		||||
    PURPLE="%F{005}"
 | 
			
		||||
else
 | 
			
		||||
    GREEN="%F{047}"
 | 
			
		||||
    RED="%F{196}"
 | 
			
		||||
    ORANGE="%F{214}"
 | 
			
		||||
    BLUE="%F{027}"
 | 
			
		||||
    LBLUE="%F{075}"
 | 
			
		||||
    PURPLE="%F{105}"
 | 
			
		||||
fi
 | 
			
		||||
RESET="%f"
 | 
			
		||||
 | 
			
		||||
# Signals git status of CWD repository (if any)
 | 
			
		||||
git_prompt() {
 | 
			
		||||
    ref=$(command git symbolic-ref HEAD 2> /dev/null) || ref=$(command git rev-parse --short HEAD 2> /dev/null) || return 0
 | 
			
		||||
    echo -n " $ORANGE${ref#refs/heads/}"
 | 
			
		||||
 | 
			
		||||
    if [ -n "$(git status --short 2>/dev/null)" ]; then
 | 
			
		||||
        echo "$RED+"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Adds @chroot or @ssh
 | 
			
		||||
foreign_prompt() {
 | 
			
		||||
    if [ "$(awk '$5=="/" {print $1}' </proc/1/mountinfo)" != "$(awk '$5=="/" {print $1}' </proc/$$/mountinfo)" ]; then
 | 
			
		||||
        echo -n "@${ORANGE}chroot"
 | 
			
		||||
    elif [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
 | 
			
		||||
        echo -n "@${ORANGE}ssh"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#nd Prints appropriate working directory
 | 
			
		||||
working_directory() {
 | 
			
		||||
    # By default up to 5 directories will be tolerated before shortening
 | 
			
		||||
    # After we surpass that, first directory (or ~) will be printed together with last 3
 | 
			
		||||
    # This feature uses special symbol '…', but this isn't aviable when in TTY. Because
 | 
			
		||||
    # of this, when we are in TTY, we fall back to longer '...'
 | 
			
		||||
 | 
			
		||||
    if [ $USE_SHORTENED_WORKDIR != 1 ]; then
 | 
			
		||||
        echo -n " $BLUE$~"
 | 
			
		||||
    elif [ "$TERM" = "linux" ]; then
 | 
			
		||||
        echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)"
 | 
			
		||||
    else
 | 
			
		||||
        echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Execution time tracking hooks, this is unique to zsh, as it can add
 | 
			
		||||
# preexec and precmd hooks. We can utilize this to keep track of the
 | 
			
		||||
# amount of time it took to run certain command. We store the start time
 | 
			
		||||
# within a variable: PROMPT_EXEC_TIME_START, which we then compare and
 | 
			
		||||
# unset after the command was finished. In here, we simply set the
 | 
			
		||||
# PROMPT_EXEC_TIME_DURATION, which is then used in the actual prompt
 | 
			
		||||
# This will only be enabled if SHOW_CMD_TIME is 1.
 | 
			
		||||
exec_time_preexec_hook() {
 | 
			
		||||
    [[ $SHOW_CMD_TIME == 0 ]] && return
 | 
			
		||||
    PROMPT_EXEC_TIME_START=$(date +%s.%N)
 | 
			
		||||
}
 | 
			
		||||
exec_time_precmd_hook() {
 | 
			
		||||
    [[ $SHOW_CMD_TIME == 0 ]] && return
 | 
			
		||||
    [[ -z $PROMPT_EXEC_TIME_START ]] && return
 | 
			
		||||
    local PROMPT_EXEC_TIME_STOP="$(date +%s.%N)"
 | 
			
		||||
    PROMPT_EXEC_TIME_DURATION=$(echo "($PROMPT_EXEC_TIME_STOP - $PROMPT_EXEC_TIME_START) * 1000" | bc -l)
 | 
			
		||||
    unset PROMPT_EXEC_TIME_START
 | 
			
		||||
}
 | 
			
		||||
format_time() {
 | 
			
		||||
    # Do some formatting to get nice time (e.g. 2m 12s) from miliseconds
 | 
			
		||||
    # $1 is the milisecond amount (int or float)
 | 
			
		||||
    # $2 is the precision (ms/s/m/h/d)
 | 
			
		||||
    local T="$1"
 | 
			
		||||
    local D="$(echo "scale=0;$T/1000/60/60/24" | bc -l)"
 | 
			
		||||
    local H="$(echo "scale=0;$T/1000/60/60%24" | bc -l)"
 | 
			
		||||
    local M="$(echo "scale=0;$T/1000/60%60" | bc -l)"
 | 
			
		||||
    local S="$(echo "scale=0;$T/1000%60" | bc -l)"
 | 
			
		||||
    local MS="$(echo "scale=0;$T%1000" | bc -l)"
 | 
			
		||||
 | 
			
		||||
    local precision=$2
 | 
			
		||||
    local out=""
 | 
			
		||||
    case "$precision" in
 | 
			
		||||
        "ms") [[ "$MS" -gt 0 ]] && out="$(printf "%dms" "$MS") ${out}"; precision="s" ;&
 | 
			
		||||
        "s") [[ "$S" -gt 0 ]] && out="$(printf "%ds" "$S") ${out}"; precision="m" ;&
 | 
			
		||||
        "m") [[ "$M" -gt 0 ]] && out="$(printf "%dm" "$M") ${out}"; precision="h" ;&
 | 
			
		||||
        "h") [[ "$H" -gt 0 ]] && out="$(printf "%dh" "$H") ${out}"; precision="d" ;&
 | 
			
		||||
        "d") [[ "$D" -gt 0 ]] && out="$(printf "%dd" "$D") ${out}" ;;
 | 
			
		||||
        *) out="$T" ;; # Return $1 ($T) if precision wasn't specified/valid
 | 
			
		||||
    esac
 | 
			
		||||
    printf "%s" "$out"
 | 
			
		||||
}
 | 
			
		||||
display_cmd_time() {
 | 
			
		||||
    [[ $CMD_TIME_SHOW == 0 ]] && return
 | 
			
		||||
    [[ -z $PROMPT_EXEC_TIME_DURATION ]] && return
 | 
			
		||||
    # If the time duration is less than minimum time,
 | 
			
		||||
    # don't print the time taken
 | 
			
		||||
    [[ $PROMPT_EXEC_TIME_DURATION -lt $CMD_TIME_MINIMUM ]] && return
 | 
			
		||||
    local time_took="$(format_time "$PROMPT_EXEC_TIME_DURATION" "$CMD_TIME_PRECISION")"
 | 
			
		||||
    # Don't display if the time didn't give us output
 | 
			
		||||
    # this happens when all fields (seconds/minutes/...) are 0,
 | 
			
		||||
    # if we use milisecond precision, this will likely never happen
 | 
			
		||||
    # but with other precisions, it could
 | 
			
		||||
    [ ${#time_took} -eq 0 ] && return
 | 
			
		||||
    echo -n " ${LBLUE}took ${time_took}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
setopt promptsubst  # enable command substitution in prompt
 | 
			
		||||
 | 
			
		||||
# Setup ZSH hooks to display the running time of commands
 | 
			
		||||
autoload -Uz add-zsh-hook
 | 
			
		||||
add-zsh-hook preexec exec_time_preexec_hook
 | 
			
		||||
add-zsh-hook precmd exec_time_precmd_hook
 | 
			
		||||
 | 
			
		||||
# Primary Prompt
 | 
			
		||||
[ "$EUID" -eq 0 ] && PS1="$RED%n$RESET" || PS1="$GREEN%n$RESET" # user
 | 
			
		||||
PS1+="$(foreign_prompt)"
 | 
			
		||||
PS1+="$(working_directory)"
 | 
			
		||||
PS1+="\$(git_prompt)"
 | 
			
		||||
PS1+="\$(display_cmd_time)"
 | 
			
		||||
PS1+=" $PURPLE%(!.#.$)$RESET " # Final symbol (# or $)
 | 
			
		||||
 | 
			
		||||
# Next line prompt
 | 
			
		||||
PS2="$RED\ $RESET"
 | 
			
		||||
 | 
			
		||||
# Right side prompt
 | 
			
		||||
RPS1=""
 | 
			
		||||
if [ "$TERM" = "linux" ]; then
 | 
			
		||||
    # Displaying cmd time here works, but often causes issues when we
 | 
			
		||||
    # resize the terminal, since right prompts can be annoying to deal
 | 
			
		||||
    # with when resizing. This would run relatively often so it makes
 | 
			
		||||
    # more sense to only use it in PS1 (left prompt), but if desired,
 | 
			
		||||
    # this can be uncommented
 | 
			
		||||
    #RPS1+="\$(display_cmd_time)"
 | 
			
		||||
 | 
			
		||||
    # If we find a non-zero return code, print it in the right prompt,
 | 
			
		||||
    # use X here, to avoid issues with TTY not having support for
 | 
			
		||||
    # a nicer unicode character that we use otherwise ("↵")
 | 
			
		||||
    RPS1+="%(?..${RED}%? X$RESET)"
 | 
			
		||||
else
 | 
			
		||||
    # Read comments for the section above.
 | 
			
		||||
    #RPS1+="\$(display_cmd_time)"
 | 
			
		||||
 | 
			
		||||
    # NOTE: "↵" symbol could cause issues with on some terminals/machines that
 | 
			
		||||
    # don't handle unicode well, this issue could be very confusing to debug,
 | 
			
		||||
    # and it would not be apparent what's wrong since the symbol itself will
 | 
			
		||||
    # be drawn, however when it is drawn, it will also move the cursor line
 | 
			
		||||
    # 2 places back since this symbol is made up of 3 bytes (in unicode) and
 | 
			
		||||
    # regular ASCII characters only take up 1 byte, this means that whenever
 | 
			
		||||
    # the right-side prompt appears (on error), the prompt would have this issue.
 | 
			
		||||
    RPS1="%(?..${RED}%? ↵$RESET)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,196 +0,0 @@
 | 
			
		|||
#!/usr/bin/env zsh
 | 
			
		||||
# Simple script which automatically defines certain aliases for python,
 | 
			
		||||
# which will automatically use certain python version 
 | 
			
		||||
# Versions are automatically obtained from $PYENV_ROOT/versions directories
 | 
			
		||||
# NOTE: This assumes that all folders in this directory are valid python versions
 | 
			
		||||
#
 | 
			
		||||
# Assume we have these installed pyenv python versions 3.6.5, 3.6.12 and 3.10.1:
 | 
			
		||||
#   - Set full-version aliases: py3.6.5, py3.6.12 and py3.10.1
 | 
			
		||||
#   - Set py3 to 3.10.1 (latest with major version 3)
 | 
			
		||||
#   - Set py3.6 to 3.6.12 (latest with major version 3 and minor version 6)
 | 
			
		||||
#   - Set py3.10 to 3.10.1 (latest, and only python with major version 3 and minor version 10)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define all wanted aliases for a given python version
 | 
			
		||||
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
 | 
			
		||||
# $2 - version used in the alias (for example '3.6', '3', or even '', but also `pypy3.7`, ...)
 | 
			
		||||
define_aliases() {
 | 
			
		||||
    version="$1"
 | 
			
		||||
    alias_version="$2"
 | 
			
		||||
    cmd_prefix="PYENV_VERSION=$version"
 | 
			
		||||
 | 
			
		||||
    alias "py$alias_version=$cmd_prefix python"
 | 
			
		||||
    alias "ipy$alias_version=$cmd_prefix ipython"
 | 
			
		||||
    alias "bpy$alias_version=$cmd_prefix bpython"
 | 
			
		||||
    alias "pydoc$alias_version=$cmd_prefix pydoc"
 | 
			
		||||
    alias "pytest$alias_version=$cmd_prefix pytest"
 | 
			
		||||
    alias -g "PY$alias_version=$cmd_prefix"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Handle splitting full version into prefix, version number and suffix
 | 
			
		||||
# Because of the huge variaty of python implemenations and their different namings,
 | 
			
		||||
# this function will only be able to handle the default CPython version names,
 | 
			
		||||
# which follow the regex pattern of: '\d+\.\d+\.\d+', the rest will print 'full_version;;'
 | 
			
		||||
# In the future, this may also include support for some other naming schemes.
 | 
			
		||||
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
 | 
			
		||||
parse_python_version() {
 | 
			
		||||
    full_version="$1"
 | 
			
		||||
    if echo "$full_version" | grep -E "[0-9]+\.[0-9]+\.[0-9]+" >/dev/null; then
 | 
			
		||||
        echo ";$full_version;"
 | 
			
		||||
    else
 | 
			
		||||
        echo ';;'
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Prints version number extracted from alias for given version
 | 
			
		||||
# $1 - version used in the alias (for example '3.6', '3', or even '', but also 'pypy3.6', ...)
 | 
			
		||||
get_alias_version() {
 | 
			
		||||
    alias_version="$1"
 | 
			
		||||
    definition="$(alias "py$alias_version")"
 | 
			
		||||
    full_version="$(echo "$definition" | cut -d= -f3 | cut -d' '  -f1)"
 | 
			
		||||
 | 
			
		||||
    version_info="$(parse_python_version "$full_version")"
 | 
			
		||||
    version="$(echo "$version_info" | cut -d';' -f2)"
 | 
			
		||||
    echo "$version"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Compares 2 python versions in major, minor and micro parts
 | 
			
		||||
# $1 - version #1
 | 
			
		||||
# $2 - version #2
 | 
			
		||||
# Returns:
 | 
			
		||||
# 0 - version #1 is newer
 | 
			
		||||
# 1 - version #2 is newer
 | 
			
		||||
# 2 - versions are equal
 | 
			
		||||
version_compare() {
 | 
			
		||||
    version_1="$1"
 | 
			
		||||
    version_2="$2"
 | 
			
		||||
    # ZSH Only:
 | 
			
		||||
    version_1=("${(@s:.:)version_1}")
 | 
			
		||||
    version_2=("${(@s:.:)version_2}")
 | 
			
		||||
    major_1=$version_1[1]
 | 
			
		||||
    major_2=$version_2[1]
 | 
			
		||||
    minor_1=$version_1[2]
 | 
			
		||||
    minor_2=$version_2[2]
 | 
			
		||||
    micro_1=$version_1[3]
 | 
			
		||||
    micro_2=$version_2[3]
 | 
			
		||||
    # POSIX, but slow:
 | 
			
		||||
    # major_1="$(echo "$version_1" | cut -d. -f1)"
 | 
			
		||||
    # major_2="$(echo "$version_2" | cut -d. -f1)"
 | 
			
		||||
    # minor_1="$(echo "$version_1" | cut -d. -f2)"
 | 
			
		||||
    # minor_2="$(echo "$version_2" | cut -d. -f2)"
 | 
			
		||||
    # micro_1="$(echo "$version_1" | cut -d. -f3)"
 | 
			
		||||
    # micro_2="$(echo "$version_2" | cut -d. -f3)"
 | 
			
		||||
 | 
			
		||||
    # Compare majors
 | 
			
		||||
    if [ $major_1 -gt $major_2 ]; then
 | 
			
		||||
        # version 1's major is bigger, version 1 is newer
 | 
			
		||||
        return 0
 | 
			
		||||
    elif [ $major_1 -lt $major_2 ]; then
 | 
			
		||||
        # version 1's major is smaller, version 2 is newer
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Majors equal, compare minors
 | 
			
		||||
    if [ $minor_1 -gt $minor_2 ]; then
 | 
			
		||||
        # version 1's minor is bigger, version 1 is newer
 | 
			
		||||
        return 0
 | 
			
		||||
    elif [ $minor_1 -lt $minor_2 ]; then
 | 
			
		||||
        # version 1's major is smaller, version 2 is newer
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Minors equal, compare micros
 | 
			
		||||
    if [ $micro_1 -gt $micro_2 ]; then
 | 
			
		||||
        # version 1's micro is bigger, version 1 is newer
 | 
			
		||||
        return 0
 | 
			
		||||
    elif [ $micro_1 -lt $micro_2 ]; then
 | 
			
		||||
        # version 1's micro is smaller, version 2 is newer
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Micros equal, versions equal
 | 
			
		||||
    return 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Define new aliases if they don't already exsist, in which case override
 | 
			
		||||
# if the current version is newer than the version in the alias
 | 
			
		||||
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
 | 
			
		||||
# $2 - version used in the alias (for example '3.6', '3', or even '', but also `pypy3.7`, ...)
 | 
			
		||||
try_define_aliases() {
 | 
			
		||||
    version="$1"
 | 
			
		||||
    alias_version="$2"
 | 
			
		||||
 | 
			
		||||
    # Check if alias already exists
 | 
			
		||||
    if alias "py$alias_version" >/dev/null; then
 | 
			
		||||
        # Compare version from the existing alias with current version,
 | 
			
		||||
        # if current is newer, override the existing alias(es)
 | 
			
		||||
        defined_version="$(get_alias_version "$alias_version")"
 | 
			
		||||
        if version_compare "$version" "$defined_version"; then
 | 
			
		||||
            define_aliases "$version" "$alias_version"
 | 
			
		||||
            # echo "Overwrote '$alias_version' aliases to point to '$version'"
 | 
			
		||||
            return 0
 | 
			
		||||
        else
 | 
			
		||||
            return 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # The aliases aren't already defined, it's safe to create them
 | 
			
		||||
    define_aliases "$version" "$alias_version"
 | 
			
		||||
    # echo "Made '$alias_version' aliases pointing to '$version'"
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define_version_aliases() {
 | 
			
		||||
    prefix="$1"
 | 
			
		||||
    version="$2"
 | 
			
		||||
    suffix="$3"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # ZSH only:
 | 
			
		||||
    version_data=("${(@s:.:)version}")
 | 
			
		||||
    major_version=$version_data[1]
 | 
			
		||||
    minor_version=$version_data[2]
 | 
			
		||||
    # POSIX, but slow:
 | 
			
		||||
    # major_version="$(echo "$version" | cut -d. -f1)"
 | 
			
		||||
    # minor_version="$(echo "$version" | cut -d. -f2)"
 | 
			
		||||
 | 
			
		||||
    # Define the major.minor.micro (full) alias
 | 
			
		||||
    try_define_aliases "$version" "$prefix$version$suffix"
 | 
			
		||||
    # Define the major.minor alias
 | 
			
		||||
    try_define_aliases "$version" "$prefix$major_version.$minor_version$suffix"
 | 
			
		||||
    # Define the major alias
 | 
			
		||||
    try_define_aliases "$version" "$prefix$major_version$suffix"
 | 
			
		||||
    # Define top level alias
 | 
			
		||||
    try_define_aliases "$version" "$prefix$suffix"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for python_dir in "$PYENV_ROOT"/versions/*/ ; do
 | 
			
		||||
    full_version="$(basename $python_dir)"
 | 
			
		||||
 | 
			
		||||
    version_info="$(parse_python_version "$full_version")"
 | 
			
		||||
    if [ $version_info = ';;' ]; then
 | 
			
		||||
        # Version info wasn't obtained successfully, skip this version
 | 
			
		||||
        echo "Skipped $full_version"
 | 
			
		||||
        continue
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # ZSH only:
 | 
			
		||||
    version_data=("${(@s:;:)version_info}")
 | 
			
		||||
    prefix=$version_data[1]
 | 
			
		||||
    version=$version_data[2]
 | 
			
		||||
    suffix=$version_data[3]
 | 
			
		||||
    # POSIX, but slow:
 | 
			
		||||
    # prefix="$(echo "$version_info" | cut -d';' -f1)"
 | 
			
		||||
    # version="$(echo "$version_info" | cut -d';' -f2)"
 | 
			
		||||
    # suffix="$(echo "$version_info" | cut -d';' -f3)"
 | 
			
		||||
 | 
			
		||||
    # startTime=$(date +%N)
 | 
			
		||||
    define_version_aliases "$prefix" "$version" "$suffix"
 | 
			
		||||
    # endTime=$(date +%N)
 | 
			
		||||
    # nanos="$(expr $endTime - $startTime)"
 | 
			
		||||
    # echo "took $(expr $nanos / 1000000) miliseconds"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if command -v poetry >/dev/null 2>&1; then
 | 
			
		||||
    alias poetry-pyenv='poetry env use "$(pyenv which python)" && poetry install'
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
/usr/lib/systemd/user/clipmenud.service
 | 
			
		||||
| 
						 | 
				
			
			@ -1,98 +0,0 @@
 | 
			
		|||
# Don't ask for confirmations
 | 
			
		||||
#assume_yes = true
 | 
			
		||||
 | 
			
		||||
# Disable specific steps - same options as the command line flag
 | 
			
		||||
#disable = ["system", "emacs"]
 | 
			
		||||
 | 
			
		||||
# Ignore failures for these steps
 | 
			
		||||
#ignore_failures = ["powershell"]
 | 
			
		||||
 | 
			
		||||
# Run specific steps - same options as the command line flag
 | 
			
		||||
only = ["system", "pip3", "flatpak", "node", "pipx", "rustup", "dotnet", "tldr", "vim"]
 | 
			
		||||
 | 
			
		||||
# Do not ask to retry failed steps (default: false)
 | 
			
		||||
#no_retry = true
 | 
			
		||||
 | 
			
		||||
# Run inside tmux
 | 
			
		||||
#run_in_tmux = true
 | 
			
		||||
 | 
			
		||||
# List of remote machines with Topgrade installed on them
 | 
			
		||||
#remote_topgrades = ["toothless", "pi", "parnas"]
 | 
			
		||||
 | 
			
		||||
# Arguments to pass SSH when upgrading remote systems
 | 
			
		||||
#ssh_arguments = "-o ConnectTimeout=2"
 | 
			
		||||
 | 
			
		||||
# Path to Topgrade executable on remote machines
 | 
			
		||||
#remote_topgrade_path = ".cargo/bin/topgrade"
 | 
			
		||||
 | 
			
		||||
# Arguments to pass tmux when pulling Repositories
 | 
			
		||||
#tmux_arguments = "-S /var/tmux.sock"
 | 
			
		||||
 | 
			
		||||
# Do not set the terminal title
 | 
			
		||||
#set_title = false
 | 
			
		||||
 | 
			
		||||
# Cleanup temporary or old files
 | 
			
		||||
#cleanup = true
 | 
			
		||||
 | 
			
		||||
[git]
 | 
			
		||||
#max_concurrency = 5
 | 
			
		||||
# Additional git repositories to pull
 | 
			
		||||
#repos = [
 | 
			
		||||
#    "~/src/*/",
 | 
			
		||||
#    "~/.config/something"
 | 
			
		||||
#]
 | 
			
		||||
 | 
			
		||||
# Don't pull the predefined git repos
 | 
			
		||||
#predefined_repos = false
 | 
			
		||||
 | 
			
		||||
# Arguments to pass Git when pulling Repositories
 | 
			
		||||
#arguments = "--rebase --autostash"
 | 
			
		||||
 | 
			
		||||
[composer]
 | 
			
		||||
#self_update = true
 | 
			
		||||
 | 
			
		||||
# Commands to run before anything
 | 
			
		||||
[pre_commands]
 | 
			
		||||
#"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"
 | 
			
		||||
 | 
			
		||||
# Custom commands
 | 
			
		||||
[commands]
 | 
			
		||||
#"Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter"
 | 
			
		||||
 | 
			
		||||
[brew]
 | 
			
		||||
#greedy_cask = true
 | 
			
		||||
 | 
			
		||||
[linux]
 | 
			
		||||
# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pacman.
 | 
			
		||||
#arch_package_manager = "pacman"
 | 
			
		||||
# Arguments to pass yay (or paru) when updating packages
 | 
			
		||||
#yay_arguments = "--nodevel"
 | 
			
		||||
#show_arch_news = true
 | 
			
		||||
#trizen_arguments = "--devel"
 | 
			
		||||
#enable_tlmgr = true
 | 
			
		||||
#emerge_sync_flags = "-q"
 | 
			
		||||
#emerge_update_flags = "-uDNa --with-bdeps=y world"
 | 
			
		||||
#redhat_distro_sync = false
 | 
			
		||||
#rpm_ostree = false
 | 
			
		||||
 | 
			
		||||
[windows]
 | 
			
		||||
# Manually select Windows updates
 | 
			
		||||
#accept_all_updates = false
 | 
			
		||||
#open_remotes_in_new_terminal = true
 | 
			
		||||
 | 
			
		||||
# Causes Topgrade to rename itself during the run to allow package managers
 | 
			
		||||
# to upgrade it. Use this only if you installed Topgrade by using a package
 | 
			
		||||
# manager such as Scoop to Cargo
 | 
			
		||||
#self_rename = true
 | 
			
		||||
 | 
			
		||||
[npm]
 | 
			
		||||
# Use sudo if the NPM directory isn't owned by the current user
 | 
			
		||||
#use_sudo = true
 | 
			
		||||
 | 
			
		||||
[firmware]
 | 
			
		||||
# Offer to update firmware; if false just check for and display available updates
 | 
			
		||||
#upgrade = true
 | 
			
		||||
 | 
			
		||||
[flatpak]
 | 
			
		||||
# Use sudo for updating the system-wide installation
 | 
			
		||||
#use_sudo = true
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +0,0 @@
 | 
			
		|||
# This file is written by xdg-user-dirs-update
 | 
			
		||||
# If you want to change or add directories, just edit the line you're
 | 
			
		||||
# interested in. All local changes will be retained on the next run.
 | 
			
		||||
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
 | 
			
		||||
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
 | 
			
		||||
# absolute path. No other format is supported.
 | 
			
		||||
#
 | 
			
		||||
#XDG_DESKTOP_DIR="$HOME/Desktop"
 | 
			
		||||
XDG_DOWNLOAD_DIR="$HOME/Downloads"
 | 
			
		||||
#XDG_TEMPLATES_DIR="$HOME/Templates"
 | 
			
		||||
#XDG_PUBLICSHARE_DIR="$HOME/Public"
 | 
			
		||||
#XDG_DOCUMENTS_DIR="$HOME/Documents"
 | 
			
		||||
XDG_DOCUMENTS_DIR="$HOME/Personal"
 | 
			
		||||
#XDG_MUSIC_DIR="$HOME/Music"
 | 
			
		||||
XDG_MUSIC_DIR="$HOME/Audio"
 | 
			
		||||
XDG_PICTURES_DIR="$HOME/Pictures"
 | 
			
		||||
#XDG_VIDEOS_DIR="$HOME/Videos"
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
en_US
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
hsts-file=~/.cache/wget-hsts
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# xinitrc runs automatically when startx is ran
 | 
			
		||||
 | 
			
		||||
# There are some important commands that need to be executed when we start
 | 
			
		||||
# the graphical environment. There is a link to this file in ~/.xprofile
 | 
			
		||||
# because that file is ran automatically if someone uses a display manager
 | 
			
		||||
# (login screen) and so they are needed there. To prevent doubling up commands
 | 
			
		||||
# I source them here with the line below.
 | 
			
		||||
 | 
			
		||||
if [ -f "${XDG_CONFIG_HOME:-$HOME/config}/x11/xprofile" ]; then
 | 
			
		||||
    source "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile"
 | 
			
		||||
else
 | 
			
		||||
    source "$HOME/.xprofile"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exec xmonad
 | 
			
		||||
# Launch xmonad with dbus
 | 
			
		||||
#exec dbus-launch --sh-syntax --exit-with-session xmonad
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,50 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# This file runs when a DM logs you into a graphical session
 | 
			
		||||
# if you use startx/xinit this file should also be soruced.
 | 
			
		||||
 | 
			
		||||
# Set monitor order
 | 
			
		||||
xrandr --output HDMI-1 --auto --output eDP-1 --right-of HDMI-1 --auto &
 | 
			
		||||
 | 
			
		||||
# Start xsecurelock lockscreen with xss-lock
 | 
			
		||||
~/.local/bin/scripts/lockscreen start &
 | 
			
		||||
 | 
			
		||||
# Set the background with a custom `setbg` script
 | 
			
		||||
setbg &
 | 
			
		||||
 | 
			
		||||
# Use xresources file in ~/.config/x11
 | 
			
		||||
xrdb -merge ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources &
 | 
			
		||||
 | 
			
		||||
# Start compositor manager to allow transparency
 | 
			
		||||
picom -b --experimental-backends &
 | 
			
		||||
 | 
			
		||||
# Dunst for notifications
 | 
			
		||||
dunst &
 | 
			
		||||
 | 
			
		||||
# Run network manager applet to show connectivity
 | 
			
		||||
nm-applet &
 | 
			
		||||
 | 
			
		||||
# Run trayer-srg for systemtray bar
 | 
			
		||||
# if installed normally, command will be `trayer`, not `trayer-srg` command
 | 
			
		||||
trayer --monitor 0 --edge top --align right --widthtype request --padding 0 --transparent true --tint 0x282c34 --alpha 0 --height 23 &
 | 
			
		||||
 | 
			
		||||
# Start flameshot in background
 | 
			
		||||
flameshot &
 | 
			
		||||
 | 
			
		||||
# AppArmor notifications
 | 
			
		||||
aa-notify -p &
 | 
			
		||||
 | 
			
		||||
# Enable numlock with numlockx
 | 
			
		||||
numlockx &
 | 
			
		||||
 | 
			
		||||
# Udiskie for simple mounting and notifications, no automount for security reasons
 | 
			
		||||
udiskie -A -s &
 | 
			
		||||
 | 
			
		||||
# Enable running applications from chroot
 | 
			
		||||
xhost +local:
 | 
			
		||||
 | 
			
		||||
# Change x shaped default cursor (fonts are located in /usr/include/X11/cursorfont.h)
 | 
			
		||||
xsetroot -cursor_name left_ptr
 | 
			
		||||
 | 
			
		||||
# import DISPLAY environment variable for systemd user services
 | 
			
		||||
systemctl --user import-environment DISPLAY
 | 
			
		||||
| 
						 | 
				
			
			@ -1,40 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
if [ $# -lt 1 ]; then
 | 
			
		||||
    echo "Invalid amount of arguments passed!"
 | 
			
		||||
    echo "Required parameter: amount of monitors"
 | 
			
		||||
    exit
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
MONITOR_AMOUT="$1"
 | 
			
		||||
WIDTH=1920
 | 
			
		||||
WORK_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/xmobar"
 | 
			
		||||
 | 
			
		||||
make_position_line(){
 | 
			
		||||
    xpos=$(($1 * $WIDTH))
 | 
			
		||||
    line="position = Static { xpos = $xpos, ypos = 0, width = $WIDTH, height = 24 },"
 | 
			
		||||
    echo "$line"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Remove all already existing specific xmobar configurations
 | 
			
		||||
find $WORK_DIR -regex '\./xmobarrc[0-9]+' -exec rm {} +
 | 
			
		||||
 | 
			
		||||
xmobarhs_content="$(cat $WORK_DIR/xmobarrc.hs)"
 | 
			
		||||
position_line_0="$(make_position_line 0)"
 | 
			
		||||
 | 
			
		||||
for ((n=0;n<MONITOR_AMOUT;n++)); do
 | 
			
		||||
    cur_file="$WORK_DIR/xmobarrc$n"
 | 
			
		||||
 | 
			
		||||
    # Replace position line to accomodate for multiple monitors
 | 
			
		||||
    position_line="$(make_position_line $n)"
 | 
			
		||||
    contents="${xmobarhs_content/$position_line_0/$position_line}"
 | 
			
		||||
 | 
			
		||||
    # Only use Trayer in the 1st xmobar (on single monitor)
 | 
			
		||||
    if [ $n -ne 0 ]; then
 | 
			
		||||
        contents="$(grep -v trayerpad <<< $contents)"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    echo "$contents" > "$cur_file"
 | 
			
		||||
    echo "$cur_file created."
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -1,49 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# Copied from https://github.com/jaor/xmobar/issues/239#issuecomment-233206552
 | 
			
		||||
# Detects the width of running trayer-srg window (xprop name 'panel')
 | 
			
		||||
# and creates an XPM icon of that width, 1px height, and transparent.
 | 
			
		||||
# Outputs an <icon>-tag for use in xmobar to display the generated
 | 
			
		||||
# XPM icon.
 | 
			
		||||
#
 | 
			
		||||
# Run script from xmobar:
 | 
			
		||||
# `Run Com "/where/ever/trayer-padding-icon.sh" [] "trayerpad" 10`
 | 
			
		||||
# and use `%trayerpad%` in your template.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Function to create a transparent Wx1 px XPM icon
 | 
			
		||||
create_xpm_icon () {
 | 
			
		||||
    timestamp=$(date)
 | 
			
		||||
    pixels=$(for i in `seq $1`; do echo -n "."; done)
 | 
			
		||||
 | 
			
		||||
    cat << EOF > "$2"
 | 
			
		||||
/* XPM *
 | 
			
		||||
static char * trayer_pad_xpm[] = {
 | 
			
		||||
/* This XPM icon is used for padding in xmobar to */
 | 
			
		||||
/* leave room for trayer-srg. It is dynamically   */
 | 
			
		||||
/* updated by by trayer-padding-icon.sh which is run  */
 | 
			
		||||
/* by xmobar.                                     */
 | 
			
		||||
/* Created: ${timestamp} */
 | 
			
		||||
/* <w/cols>  <h/rows>  <colors>  <chars per pixel> */
 | 
			
		||||
"$1 1 1 1",
 | 
			
		||||
/* Colors (none: transparent) */
 | 
			
		||||
". c none",
 | 
			
		||||
/* Pixels */
 | 
			
		||||
"$pixels"
 | 
			
		||||
};
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Width of the trayer window
 | 
			
		||||
width=$(xprop -name panel | grep 'program specified minimum size' | cut -d ' ' -f 5)
 | 
			
		||||
 | 
			
		||||
# Icon file name
 | 
			
		||||
iconfile="/tmp/trayer-padding-${width}px.xpm"
 | 
			
		||||
 | 
			
		||||
# If the desired icon does not exist create it
 | 
			
		||||
if [ ! -f $iconfile ]; then
 | 
			
		||||
    create_xpm_icon $width $iconfile
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Output the icon tag for xmobar
 | 
			
		||||
echo "<icon=${iconfile}/>"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,122 +0,0 @@
 | 
			
		|||
-- xmobar main configuration file
 | 
			
		||||
--
 | 
			
		||||
-- This file serves as a shared template for the specific xmonad
 | 
			
		||||
-- configuration files that are generated from this file to accomodate
 | 
			
		||||
-- for multiple monitors.
 | 
			
		||||
--
 | 
			
		||||
-- For more details, run 'man xmobar', or visit the project website
 | 
			
		||||
-- http://projects.haskell.org/xmobar/
 | 
			
		||||
 | 
			
		||||
Config {
 | 
			
		||||
-- Set font for default dg/bg colors. xmobar height will
 | 
			
		||||
-- be controlled by this font (it'll adjust itself to accomodate it)
 | 
			
		||||
-- Additional fonts can be defined for emoji support
 | 
			
		||||
font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true",
 | 
			
		||||
additionalFonts = [
 | 
			
		||||
        "xft:Font Awesome 6 Free Solid:pixelsize=12",
 | 
			
		||||
        "xft:Font Awesome 6 Brands:pixelsize=12"
 | 
			
		||||
        --"xft:Mononoki Nerd Font:pixelsize=11:antialias=true:hinting=true"
 | 
			
		||||
],
 | 
			
		||||
bgColor = "#282c34",
 | 
			
		||||
fgColor = "#ff6c6b",
 | 
			
		||||
 | 
			
		||||
-- Define static position that will be adjusted by the deploy script
 | 
			
		||||
-- which will tweak the starting positions for multiple monitors, this
 | 
			
		||||
-- configuration will work fine for single monitor systems out of the box.
 | 
			
		||||
position = Static { xpos = 0, ypos = 0, width = 1920, height = 24 },
 | 
			
		||||
-- Define the place where all used XPM images will be stored in
 | 
			
		||||
-- Apparently there's is no way to use env var or relpaths here.
 | 
			
		||||
iconRoot = "/home/itsdrike/.config/xmobar/xpm",
 | 
			
		||||
-- list of commands which gather information about the system
 | 
			
		||||
-- which can then be referrenced in the final template string
 | 
			
		||||
commands = [
 | 
			
		||||
        -- Gather and format CPU usage information
 | 
			
		||||
        -- if it's above 50%, we consider it high and make it red
 | 
			
		||||
        Run Cpu [
 | 
			
		||||
        "-t", "<fn=1>\xf2db</fn>  <total>%",
 | 
			
		||||
        "-H","50",
 | 
			
		||||
        "--high","red"
 | 
			
		||||
        ] 20,
 | 
			
		||||
 | 
			
		||||
        -- Ram used number and percent
 | 
			
		||||
        Run Memory ["-t", "<fn=1>\xf538</fn>  <used>M (<usedratio>%)"] 20,
 | 
			
		||||
 | 
			
		||||
        -- Battery information. This is likely to require some customization
 | 
			
		||||
        -- based upon your specific hardware. Or, for a desktop you may want
 | 
			
		||||
        -- to just remove this section entirely.
 | 
			
		||||
        --Run Battery [
 | 
			
		||||
        --"-t", "<fn=1>\xf240</fn> <acstatus> <left>% - <timeleft>",
 | 
			
		||||
        --"--",
 | 
			
		||||
        --"-i", "<fc=#75c44c>AC</fc>",
 | 
			
		||||
        --"-O", "<fc=#75c44c>AC</fc>",
 | 
			
		||||
        --"-o", "<fc=#ff0000>AUX</fc>",
 | 
			
		||||
        --"-L", "12",
 | 
			
		||||
        --"-h", "green",
 | 
			
		||||
        --"-l", "red"
 | 
			
		||||
        --] 10,
 | 
			
		||||
 | 
			
		||||
        -- Time and date
 | 
			
		||||
        Run Date "<fn=1>\xf017</fn>  %H:%M %b %d %Y" "date" 50,
 | 
			
		||||
 | 
			
		||||
        -- Network up and down
 | 
			
		||||
        --Run Network "wlp4s0" ["-t", "<fn=1>\xf0ab</fn>  <rx>kb  <fn=1>\xf0aa</fn>  <tx>kb"] 20,
 | 
			
		||||
        --Run Network "enp3s0" ["-t", "<fn=1>\xf0ab</fn>  <rx>kb  <fn=1>\xf0aa</fn>  <tx>kb"] 20,
 | 
			
		||||
 | 
			
		||||
        -- Uptime
 | 
			
		||||
        Run Uptime ["-t", "<fn=1>\xf011</fn>  <days>d <hours>h"] 360,
 | 
			
		||||
 | 
			
		||||
        -- Show free disk space on /
 | 
			
		||||
        Run DiskU [("/", "<fn=1>\xf0c7</fn>  <free>")] [] 60,
 | 
			
		||||
 | 
			
		||||
        -- Get kernel version from uname -r
 | 
			
		||||
        Run Com "uname" ["-r"] "" 3600,
 | 
			
		||||
 | 
			
		||||
        -- Volume info
 | 
			
		||||
        Run Volume "default" "Master" ["-t", "<fn=1>\xf028</fn>  <volume>%"] 5,
 | 
			
		||||
 | 
			
		||||
        -- Get bitcoin price from a custom script
 | 
			
		||||
        Run Com "/home/itsdrike/.local/bin/scripts/bitcoin" [] "bitcoin" 300,
 | 
			
		||||
 | 
			
		||||
        -- Add dynamic invisible XPM icon that resizes to accomodate trayer
 | 
			
		||||
        -- this needs to be an absolute string path, env vars or relpaths aren't accepted
 | 
			
		||||
        -- this should only be on 1 monitor (single file), so ignore this comment on others
 | 
			
		||||
        Run Com "/home/itsdrike/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 10,
 | 
			
		||||
 | 
			
		||||
        -- This line tells xmobar to read input from stdin.
 | 
			
		||||
        -- That's how it gets information that xmonad is sending (such as
 | 
			
		||||
        -- workspaces) to be displayed. This will get placed onto xmobar
 | 
			
		||||
        -- template in the position where %UnsafeStdinReader%/%StdinReader% is
 | 
			
		||||
        -- By using UnsafeStdinReader, it will also allow for action strings
 | 
			
		||||
        -- to be used, which are activated upon clicking on the given element
 | 
			
		||||
        Run UnsafeStdinReader
 | 
			
		||||
],
 | 
			
		||||
 | 
			
		||||
-- Separator character used to wrap variables in the xmobar template string
 | 
			
		||||
sepChar = "%",
 | 
			
		||||
-- Alignment eparator character used in the xmobar template string.
 | 
			
		||||
-- Everything before this will be aligned left, everything after right.
 | 
			
		||||
alignSep = "}{",
 | 
			
		||||
 | 
			
		||||
-- Template string defining the xmobar contents and overall layout.
 | 
			
		||||
template = "\
 | 
			
		||||
    \<icon=haskell_20.xpm/>   \
 | 
			
		||||
    \<fc=#666666>|</fc>  %UnsafeStdinReader% }{ \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#b3afc2><fn=2></fn>  %uname% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#ff6c6b> %memory% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#51afef> %disku% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#78db32> %cpu% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#ecbe7b> %default:Master% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#98be65> %uptime% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#efcb10><fn=2></fn>  %bitcoin% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#46d9ff> %date% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  %trayerpad%\
 | 
			
		||||
    \ "
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Abandoned template strings
 | 
			
		||||
-- Network Wifi:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#98be65> %wlp4s0% </fc> \
 | 
			
		||||
-- Network Ethernet:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#98be65> %enp3s0% </fc> \
 | 
			
		||||
-- Battery:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#9ce996> %battery% </fc> \
 | 
			
		||||
| 
						 | 
				
			
			@ -1,122 +0,0 @@
 | 
			
		|||
-- xmobar main configuration file
 | 
			
		||||
--
 | 
			
		||||
-- This file serves as a shared template for the specific xmonad
 | 
			
		||||
-- configuration files that are generated from this file to accomodate
 | 
			
		||||
-- for multiple monitors.
 | 
			
		||||
--
 | 
			
		||||
-- For more details, run 'man xmobar', or visit the project website
 | 
			
		||||
-- http://projects.haskell.org/xmobar/
 | 
			
		||||
 | 
			
		||||
Config {
 | 
			
		||||
-- Set font for default dg/bg colors. xmobar height will
 | 
			
		||||
-- be controlled by this font (it'll adjust itself to accomodate it)
 | 
			
		||||
-- Additional fonts can be defined for emoji support
 | 
			
		||||
font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true",
 | 
			
		||||
additionalFonts = [
 | 
			
		||||
        "xft:Font Awesome 6 Free Solid:pixelsize=12",
 | 
			
		||||
        "xft:Font Awesome 6 Brands:pixelsize=12"
 | 
			
		||||
        --"xft:Mononoki Nerd Font:pixelsize=11:antialias=true:hinting=true"
 | 
			
		||||
],
 | 
			
		||||
bgColor = "#282c34",
 | 
			
		||||
fgColor = "#ff6c6b",
 | 
			
		||||
 | 
			
		||||
-- Define static position that will be adjusted by the deploy script
 | 
			
		||||
-- which will tweak the starting positions for multiple monitors, this
 | 
			
		||||
-- configuration will work fine for single monitor systems out of the box.
 | 
			
		||||
position = Static { xpos = 0, ypos = 0, width = 1920, height = 24 },
 | 
			
		||||
-- Define the place where all used XPM images will be stored in
 | 
			
		||||
-- Apparently there's is no way to use env var or relpaths here.
 | 
			
		||||
iconRoot = "/home/itsdrike/.config/xmobar/xpm",
 | 
			
		||||
-- list of commands which gather information about the system
 | 
			
		||||
-- which can then be referrenced in the final template string
 | 
			
		||||
commands = [
 | 
			
		||||
        -- Gather and format CPU usage information
 | 
			
		||||
        -- if it's above 50%, we consider it high and make it red
 | 
			
		||||
        Run Cpu [
 | 
			
		||||
        "-t", "<fn=1>\xf2db</fn>  <total>%",
 | 
			
		||||
        "-H","50",
 | 
			
		||||
        "--high","red"
 | 
			
		||||
        ] 20,
 | 
			
		||||
 | 
			
		||||
        -- Ram used number and percent
 | 
			
		||||
        Run Memory ["-t", "<fn=1>\xf538</fn>  <used>M (<usedratio>%)"] 20,
 | 
			
		||||
 | 
			
		||||
        -- Battery information. This is likely to require some customization
 | 
			
		||||
        -- based upon your specific hardware. Or, for a desktop you may want
 | 
			
		||||
        -- to just remove this section entirely.
 | 
			
		||||
        --Run Battery [
 | 
			
		||||
        --"-t", "<fn=1>\xf240</fn> <acstatus> <left>% - <timeleft>",
 | 
			
		||||
        --"--",
 | 
			
		||||
        --"-i", "<fc=#75c44c>AC</fc>",
 | 
			
		||||
        --"-O", "<fc=#75c44c>AC</fc>",
 | 
			
		||||
        --"-o", "<fc=#ff0000>AUX</fc>",
 | 
			
		||||
        --"-L", "12",
 | 
			
		||||
        --"-h", "green",
 | 
			
		||||
        --"-l", "red"
 | 
			
		||||
        --] 10,
 | 
			
		||||
 | 
			
		||||
        -- Time and date
 | 
			
		||||
        Run Date "<fn=1>\xf017</fn>  %H:%M %b %d %Y" "date" 50,
 | 
			
		||||
 | 
			
		||||
        -- Network up and down
 | 
			
		||||
        --Run Network "wlp4s0" ["-t", "<fn=1>\xf0ab</fn>  <rx>kb  <fn=1>\xf0aa</fn>  <tx>kb"] 20,
 | 
			
		||||
        --Run Network "enp3s0" ["-t", "<fn=1>\xf0ab</fn>  <rx>kb  <fn=1>\xf0aa</fn>  <tx>kb"] 20,
 | 
			
		||||
 | 
			
		||||
        -- Uptime
 | 
			
		||||
        Run Uptime ["-t", "<fn=1>\xf011</fn>  <days>d <hours>h"] 360,
 | 
			
		||||
 | 
			
		||||
        -- Show free disk space on /
 | 
			
		||||
        Run DiskU [("/", "<fn=1>\xf0c7</fn>  <free>")] [] 60,
 | 
			
		||||
 | 
			
		||||
        -- Get kernel version from uname -r
 | 
			
		||||
        Run Com "uname" ["-r"] "" 3600,
 | 
			
		||||
 | 
			
		||||
        -- Volume info
 | 
			
		||||
        Run Volume "default" "Master" ["-t", "<fn=1>\xf028</fn>  <volume>%"] 5,
 | 
			
		||||
 | 
			
		||||
        -- Get bitcoin price from a custom script
 | 
			
		||||
        Run Com "/home/itsdrike/.local/bin/scripts/bitcoin" [] "bitcoin" 300,
 | 
			
		||||
 | 
			
		||||
        -- Add dynamic invisible XPM icon that resizes to accomodate trayer
 | 
			
		||||
        -- this needs to be an absolute string path, env vars or relpaths aren't accepted
 | 
			
		||||
        -- this should only be on 1 monitor (single file), so ignore this comment on others
 | 
			
		||||
        Run Com "/home/itsdrike/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 10,
 | 
			
		||||
 | 
			
		||||
        -- This line tells xmobar to read input from stdin.
 | 
			
		||||
        -- That's how it gets information that xmonad is sending (such as
 | 
			
		||||
        -- workspaces) to be displayed. This will get placed onto xmobar
 | 
			
		||||
        -- template in the position where %UnsafeStdinReader%/%StdinReader% is
 | 
			
		||||
        -- By using UnsafeStdinReader, it will also allow for action strings
 | 
			
		||||
        -- to be used, which are activated upon clicking on the given element
 | 
			
		||||
        Run UnsafeStdinReader
 | 
			
		||||
],
 | 
			
		||||
 | 
			
		||||
-- Separator character used to wrap variables in the xmobar template string
 | 
			
		||||
sepChar = "%",
 | 
			
		||||
-- Alignment eparator character used in the xmobar template string.
 | 
			
		||||
-- Everything before this will be aligned left, everything after right.
 | 
			
		||||
alignSep = "}{",
 | 
			
		||||
 | 
			
		||||
-- Template string defining the xmobar contents and overall layout.
 | 
			
		||||
template = "\
 | 
			
		||||
    \<icon=haskell_20.xpm/>   \
 | 
			
		||||
    \<fc=#666666>|</fc>  %UnsafeStdinReader% }{ \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#b3afc2><fn=2></fn>  %uname% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#ff6c6b> %memory% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#51afef> %disku% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#78db32> %cpu% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#ecbe7b> %default:Master% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#98be65> %uptime% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#efcb10><fn=2></fn>  %bitcoin% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#46d9ff> %date% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  %trayerpad%\
 | 
			
		||||
    \ "
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Abandoned template strings
 | 
			
		||||
-- Network Wifi:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#98be65> %wlp4s0% </fc> \
 | 
			
		||||
-- Network Ethernet:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#98be65> %enp3s0% </fc> \
 | 
			
		||||
-- Battery:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#9ce996> %battery% </fc> \
 | 
			
		||||
| 
						 | 
				
			
			@ -1,120 +0,0 @@
 | 
			
		|||
-- xmobar main configuration file
 | 
			
		||||
--
 | 
			
		||||
-- This file serves as a shared template for the specific xmonad
 | 
			
		||||
-- configuration files that are generated from this file to accomodate
 | 
			
		||||
-- for multiple monitors.
 | 
			
		||||
--
 | 
			
		||||
-- For more details, run 'man xmobar', or visit the project website
 | 
			
		||||
-- http://projects.haskell.org/xmobar/
 | 
			
		||||
 | 
			
		||||
Config {
 | 
			
		||||
-- Set font for default dg/bg colors. xmobar height will
 | 
			
		||||
-- be controlled by this font (it'll adjust itself to accomodate it)
 | 
			
		||||
-- Additional fonts can be defined for emoji support
 | 
			
		||||
font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true",
 | 
			
		||||
additionalFonts = [
 | 
			
		||||
        "xft:Font Awesome 6 Free Solid:pixelsize=12",
 | 
			
		||||
        "xft:Font Awesome 6 Brands:pixelsize=12"
 | 
			
		||||
        --"xft:Mononoki Nerd Font:pixelsize=11:antialias=true:hinting=true"
 | 
			
		||||
],
 | 
			
		||||
bgColor = "#282c34",
 | 
			
		||||
fgColor = "#ff6c6b",
 | 
			
		||||
 | 
			
		||||
-- Define static position that will be adjusted by the deploy script
 | 
			
		||||
-- which will tweak the starting positions for multiple monitors, this
 | 
			
		||||
-- configuration will work fine for single monitor systems out of the box.
 | 
			
		||||
position = Static { xpos = 1920, ypos = 0, width = 1920, height = 24 },
 | 
			
		||||
-- Define the place where all used XPM images will be stored in
 | 
			
		||||
-- Apparently there's is no way to use env var or relpaths here.
 | 
			
		||||
iconRoot = "/home/itsdrike/.config/xmobar/xpm",
 | 
			
		||||
-- list of commands which gather information about the system
 | 
			
		||||
-- which can then be referrenced in the final template string
 | 
			
		||||
commands = [
 | 
			
		||||
        -- Gather and format CPU usage information
 | 
			
		||||
        -- if it's above 50%, we consider it high and make it red
 | 
			
		||||
        Run Cpu [
 | 
			
		||||
        "-t", "<fn=1>\xf2db</fn>  <total>%",
 | 
			
		||||
        "-H","50",
 | 
			
		||||
        "--high","red"
 | 
			
		||||
        ] 20,
 | 
			
		||||
 | 
			
		||||
        -- Ram used number and percent
 | 
			
		||||
        Run Memory ["-t", "<fn=1>\xf538</fn>  <used>M (<usedratio>%)"] 20,
 | 
			
		||||
 | 
			
		||||
        -- Battery information. This is likely to require some customization
 | 
			
		||||
        -- based upon your specific hardware. Or, for a desktop you may want
 | 
			
		||||
        -- to just remove this section entirely.
 | 
			
		||||
        --Run Battery [
 | 
			
		||||
        --"-t", "<fn=1>\xf240</fn> <acstatus> <left>% - <timeleft>",
 | 
			
		||||
        --"--",
 | 
			
		||||
        --"-i", "<fc=#75c44c>AC</fc>",
 | 
			
		||||
        --"-O", "<fc=#75c44c>AC</fc>",
 | 
			
		||||
        --"-o", "<fc=#ff0000>AUX</fc>",
 | 
			
		||||
        --"-L", "12",
 | 
			
		||||
        --"-h", "green",
 | 
			
		||||
        --"-l", "red"
 | 
			
		||||
        --] 10,
 | 
			
		||||
 | 
			
		||||
        -- Time and date
 | 
			
		||||
        Run Date "<fn=1>\xf017</fn>  %H:%M %b %d %Y" "date" 50,
 | 
			
		||||
 | 
			
		||||
        -- Network up and down
 | 
			
		||||
        --Run Network "wlp4s0" ["-t", "<fn=1>\xf0ab</fn>  <rx>kb  <fn=1>\xf0aa</fn>  <tx>kb"] 20,
 | 
			
		||||
        --Run Network "enp3s0" ["-t", "<fn=1>\xf0ab</fn>  <rx>kb  <fn=1>\xf0aa</fn>  <tx>kb"] 20,
 | 
			
		||||
 | 
			
		||||
        -- Uptime
 | 
			
		||||
        Run Uptime ["-t", "<fn=1>\xf011</fn>  <days>d <hours>h"] 360,
 | 
			
		||||
 | 
			
		||||
        -- Show free disk space on /
 | 
			
		||||
        Run DiskU [("/", "<fn=1>\xf0c7</fn>  <free>")] [] 60,
 | 
			
		||||
 | 
			
		||||
        -- Get kernel version from uname -r
 | 
			
		||||
        Run Com "uname" ["-r"] "" 3600,
 | 
			
		||||
 | 
			
		||||
        -- Volume info
 | 
			
		||||
        Run Volume "default" "Master" ["-t", "<fn=1>\xf028</fn>  <volume>%"] 5,
 | 
			
		||||
 | 
			
		||||
        -- Get bitcoin price from a custom script
 | 
			
		||||
        Run Com "/home/itsdrike/.local/bin/scripts/bitcoin" [] "bitcoin" 300,
 | 
			
		||||
 | 
			
		||||
        -- Add dynamic invisible XPM icon that resizes to accomodate trayer
 | 
			
		||||
        -- this needs to be an absolute string path, env vars or relpaths aren't accepted
 | 
			
		||||
        -- this should only be on 1 monitor (single file), so ignore this comment on others
 | 
			
		||||
 | 
			
		||||
        -- This line tells xmobar to read input from stdin.
 | 
			
		||||
        -- That's how it gets information that xmonad is sending (such as
 | 
			
		||||
        -- workspaces) to be displayed. This will get placed onto xmobar
 | 
			
		||||
        -- template in the position where %UnsafeStdinReader%/%StdinReader% is
 | 
			
		||||
        -- By using UnsafeStdinReader, it will also allow for action strings
 | 
			
		||||
        -- to be used, which are activated upon clicking on the given element
 | 
			
		||||
        Run UnsafeStdinReader
 | 
			
		||||
],
 | 
			
		||||
 | 
			
		||||
-- Separator character used to wrap variables in the xmobar template string
 | 
			
		||||
sepChar = "%",
 | 
			
		||||
-- Alignment eparator character used in the xmobar template string.
 | 
			
		||||
-- Everything before this will be aligned left, everything after right.
 | 
			
		||||
alignSep = "}{",
 | 
			
		||||
 | 
			
		||||
-- Template string defining the xmobar contents and overall layout.
 | 
			
		||||
template = "\
 | 
			
		||||
    \<icon=haskell_20.xpm/>   \
 | 
			
		||||
    \<fc=#666666>|</fc>  %UnsafeStdinReader% }{ \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#b3afc2><fn=2></fn>  %uname% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#ff6c6b> %memory% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#51afef> %disku% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#78db32> %cpu% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#ecbe7b> %default:Master% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#98be65> %uptime% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#efcb10><fn=2></fn>  %bitcoin% </fc> \
 | 
			
		||||
    \<fc=#666666>|</fc>  <fc=#46d9ff> %date% </fc> \
 | 
			
		||||
    \ "
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Abandoned template strings
 | 
			
		||||
-- Network Wifi:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#98be65> %wlp4s0% </fc> \
 | 
			
		||||
-- Network Ethernet:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#98be65> %enp3s0% </fc> \
 | 
			
		||||
-- Battery:
 | 
			
		||||
-- \<fc=#666666>|</fc>  <fc=#9ce996> %battery% </fc> \
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +0,0 @@
 | 
			
		|||
/* XPM */
 | 
			
		||||
static char * haskell_20_xpm[] = {
 | 
			
		||||
"20 20 2 1",
 | 
			
		||||
" 	c None",
 | 
			
		||||
".	c #FFFFFF",
 | 
			
		||||
"                    ",
 | 
			
		||||
"                    ",
 | 
			
		||||
"                    ",
 | 
			
		||||
".... ....           ",
 | 
			
		||||
" .... ...           ",
 | 
			
		||||
"  ... ....          ",
 | 
			
		||||
"  .... ....         ",
 | 
			
		||||
"   .... ... ........",
 | 
			
		||||
"    ... .... .......",
 | 
			
		||||
"    .... ....       ",
 | 
			
		||||
"    .... ....       ",
 | 
			
		||||
"    ... ...... .....",
 | 
			
		||||
"   .... ....... ....",
 | 
			
		||||
"  .... .... ...     ",
 | 
			
		||||
"  ... ....  ....    ",
 | 
			
		||||
" .... ...    ....   ",
 | 
			
		||||
".... ....     ...   ",
 | 
			
		||||
"                    ",
 | 
			
		||||
"                    ",
 | 
			
		||||
"                    "};
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Automatically start the applications in $HOME/.config/autostart
 | 
			
		||||
 | 
			
		||||
AUTOSTART_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/autostart"
 | 
			
		||||
 | 
			
		||||
find $AUTOSTART_DIR -name "*.desktop" | xargs -I {} sh -c "~/.local/bin/scripts/deskopen {} &"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,389 +0,0 @@
 | 
			
		|||
-- Base
 | 
			
		||||
import XMonad
 | 
			
		||||
import System.Exit (exitSuccess)
 | 
			
		||||
import System.IO (hPutStrLn, Handle)
 | 
			
		||||
import qualified XMonad.StackSet as W
 | 
			
		||||
 | 
			
		||||
-- Actions
 | 
			
		||||
import XMonad.Actions.CopyWindow (kill1)
 | 
			
		||||
import XMonad.Actions.CycleWS (Direction1D(..), moveTo, shiftTo, WSType(..), nextScreen, prevScreen)
 | 
			
		||||
import XMonad.Actions.MouseResize
 | 
			
		||||
import XMonad.Actions.Promote
 | 
			
		||||
import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown)
 | 
			
		||||
import XMonad.Actions.WithAll (sinkAll, killAll)
 | 
			
		||||
 | 
			
		||||
-- Data
 | 
			
		||||
import Data.Maybe (isJust, fromJust)
 | 
			
		||||
import Data.Monoid
 | 
			
		||||
import qualified Data.Map as M
 | 
			
		||||
 | 
			
		||||
-- Hooks
 | 
			
		||||
import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..))
 | 
			
		||||
import XMonad.Hooks.ManageDocks (avoidStruts, docks, manageDocks, ToggleStruts(..))
 | 
			
		||||
import XMonad.Hooks.EwmhDesktops
 | 
			
		||||
import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat)
 | 
			
		||||
 | 
			
		||||
-- Layouts
 | 
			
		||||
import XMonad.Layout.GridVariants (Grid(Grid))
 | 
			
		||||
import XMonad.Layout.SimplestFloat
 | 
			
		||||
import XMonad.Layout.Spiral
 | 
			
		||||
import XMonad.Layout.Tabbed
 | 
			
		||||
import XMonad.Layout.ResizableTile
 | 
			
		||||
 | 
			
		||||
-- Layouts modifiers
 | 
			
		||||
import XMonad.Layout.LayoutModifier
 | 
			
		||||
import XMonad.Layout.LimitWindows (limitWindows, increaseLimit, decreaseLimit)
 | 
			
		||||
import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??))
 | 
			
		||||
import XMonad.Layout.MultiToggle.Instances (StdTransformers(NBFULL, MIRROR, NOBORDERS))
 | 
			
		||||
import XMonad.Layout.NoBorders
 | 
			
		||||
import XMonad.Layout.Renamed
 | 
			
		||||
import XMonad.Layout.ShowWName
 | 
			
		||||
import XMonad.Layout.Simplest
 | 
			
		||||
import XMonad.Layout.Spacing
 | 
			
		||||
import XMonad.Layout.SubLayouts
 | 
			
		||||
import XMonad.Layout.WindowArranger (windowArrange)
 | 
			
		||||
import XMonad.Layout.WindowNavigation
 | 
			
		||||
import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle))
 | 
			
		||||
import qualified XMonad.Layout.MultiToggle as MT (Toggle(..))
 | 
			
		||||
 | 
			
		||||
-- Utilities
 | 
			
		||||
import XMonad.Util.Dmenu
 | 
			
		||||
import XMonad.Util.EZConfig (additionalKeysP)
 | 
			
		||||
import XMonad.Util.Run (spawnPipe)
 | 
			
		||||
import XMonad.Util.SpawnOnce
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
-- Basic settings:
 | 
			
		||||
 | 
			
		||||
-- Set the modkey
 | 
			
		||||
-- mod1Mask: left alt, mod4Mask: super key.
 | 
			
		||||
myModMask :: KeyMask
 | 
			
		||||
myModMask = mod4Mask
 | 
			
		||||
 | 
			
		||||
-- Preferred programs
 | 
			
		||||
myTerminal = "alacritty"
 | 
			
		||||
myBrowser = "firefox"
 | 
			
		||||
myFileManager = "pcmanfm"
 | 
			
		||||
myCliFileManager = "lf"
 | 
			
		||||
 | 
			
		||||
-- Preferred font
 | 
			
		||||
myFont :: String
 | 
			
		||||
myFont = "xft:SauceCodePro Nerd Font Mono:regular:size=9:antialias=true:hinting=true"
 | 
			
		||||
 | 
			
		||||
-- Width of the window border in pixels
 | 
			
		||||
myBorderWidth :: Dimension
 | 
			
		||||
myBorderWidth = 2
 | 
			
		||||
 | 
			
		||||
-- Border color of normal windows
 | 
			
		||||
myNormalBorderColor :: String
 | 
			
		||||
myNormalBorderColor = "#3b4252"
 | 
			
		||||
 | 
			
		||||
-- Border color of focused windows
 | 
			
		||||
myFocusedBorderColor :: String
 | 
			
		||||
myFocusedBorderColor = "#bc96da"
 | 
			
		||||
 | 
			
		||||
-- Default workspaces. Number of workspaces is determined by the list length.
 | 
			
		||||
myWorkspaces = [" dev ", " www ", " sys ", " chat ", " mus ", " vid ", " doc ", " virt ", " etc "]
 | 
			
		||||
myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y)
 | 
			
		||||
 | 
			
		||||
-- Make the workspaces clickable
 | 
			
		||||
clickable ws = "<action=xdotool key super+"++show i++">"++ws++"</action>"
 | 
			
		||||
    where i = fromJust $ M.lookup ws myWorkspaceIndices
 | 
			
		||||
 | 
			
		||||
-- Keep track of the number of windows in current workspace
 | 
			
		||||
windowCount :: X (Maybe String)
 | 
			
		||||
windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-- Key bindings with EZConfig:
 | 
			
		||||
-- C: Ctrl, S: Shift, M: Mod, M1: Alt
 | 
			
		||||
 | 
			
		||||
myKeys :: [(String, X ())]
 | 
			
		||||
myKeys =
 | 
			
		||||
    -- XMonad
 | 
			
		||||
    [ ("M-S-r", spawn "xmonad --recompile; xmonad --restart")   -- Recompiles xmonad
 | 
			
		||||
    , ("M-S-q", io exitSuccess)                                 -- Quits xmonad
 | 
			
		||||
 | 
			
		||||
    -- Programs
 | 
			
		||||
    , ("M-<Return>",    spawn (myTerminal))
 | 
			
		||||
    , ("M-b",           spawn (myBrowser))
 | 
			
		||||
    , ("M-x",           spawn (myFileManager))
 | 
			
		||||
    , ("M-M1-v",        spawn (myTerminal ++ " -e " ++ myCliFileManager))
 | 
			
		||||
    , ("M-M1-h",        spawn (myTerminal ++ " -e htop"))
 | 
			
		||||
    , ("M-M1-b",        spawn (myTerminal ++ " -e bpytop"))
 | 
			
		||||
    , ("M-M1-p",        spawn (myTerminal ++ " -e ipython"))
 | 
			
		||||
 | 
			
		||||
    -- Dmenu
 | 
			
		||||
    , ("M-S-<Return>",  spawn "dmenu_run -i -p \"Run: \"")      -- Launch dmenu to execute command
 | 
			
		||||
    , ("M-v",           spawn "clipmenu")                       -- Clipboard manager with dmenu
 | 
			
		||||
 | 
			
		||||
    -- Screenshots
 | 
			
		||||
    , ("<Print>",       spawn "flameshot gui")
 | 
			
		||||
    , ("M-<Print>",     spawn "flameshot screen -p ~/Pictures/Screenshots")
 | 
			
		||||
    , ("M-S-<Print>",   spawn "flameshot screen -c")
 | 
			
		||||
    , ("C-<Print>",     spawn "flameshot full -p ~/Pictures/Screenshots")
 | 
			
		||||
    , ("C-S-<Print>",   spawn "flameshot full -c")
 | 
			
		||||
    , ("C-M-<Print>",   spawn "flameshot launcher")
 | 
			
		||||
 | 
			
		||||
    -- Script shortcuts
 | 
			
		||||
    , ("M-S-p",         spawn "setbg ~/Pictures/Wallpapers/Active")  -- Set random background
 | 
			
		||||
    , ("M-S-d",         spawn "displayselect")      -- Set display configurations
 | 
			
		||||
    , ("M-C-l",         spawn "lockscreen lock")    -- Lock the screen
 | 
			
		||||
    , ("M-C-S-l",       spawn "lockscreen toggle")  -- Toggle automatic locking
 | 
			
		||||
    , ("M-S-l",         spawn "swap-kblayout")      -- Swap keyboard layout
 | 
			
		||||
 | 
			
		||||
    -- Kill windows
 | 
			
		||||
    , ("M-w", kill1)        -- Kill the currently focused client
 | 
			
		||||
    , ("M-S-w", killAll)    -- Kill all windows on current workspace
 | 
			
		||||
 | 
			
		||||
    -- Compositor
 | 
			
		||||
    , ("M-C-x",     spawn "picom -b --experimental-backends")   -- Run picom compositor
 | 
			
		||||
    , ("M-S-x",     spawn "killall picom")                      -- Kill picom compositor
 | 
			
		||||
 | 
			
		||||
    -- Dunst notifications
 | 
			
		||||
    , ("C-,",       spawn "dunstctl close")         -- Close topmost notification
 | 
			
		||||
    , ("C-S-,",     spawn "dunstctl close-all")     -- Close all notifications
 | 
			
		||||
    , ("C-.",       spawn "dunstctl history-pop")   -- Show last notification
 | 
			
		||||
    , ("C-S-.",     spawn "dunstctl context")       -- Show context menu with multiple actions
 | 
			
		||||
 | 
			
		||||
    -- Workspaces
 | 
			
		||||
    , ("M-.", nextScreen)   -- Switch focus to next monitor
 | 
			
		||||
    , ("M-,", prevScreen)   -- Switch focus to prev monitor
 | 
			
		||||
    , ("M-S-<KP_Add>", shiftTo Next nonNSP >> moveTo Next nonNSP)       -- Shifts focused window to next ws
 | 
			
		||||
    , ("M-S-<KP_Subtract>", shiftTo Prev nonNSP >> moveTo Prev nonNSP)  -- Shifts focused window to prev ws
 | 
			
		||||
 | 
			
		||||
    -- Floating windows
 | 
			
		||||
    , ("M-f",   withFocused $ float)                -- Make window float
 | 
			
		||||
    , ("M-t",   withFocused $ windows . W.sink)     -- Push floating window back to tile
 | 
			
		||||
    , ("M-S-t", sinkAll)                            -- Push all floating windows to tile
 | 
			
		||||
    , ("M-S-f", sendMessage (T.Toggle "floats"))    -- Toggles 'floats' layout
 | 
			
		||||
 | 
			
		||||
    -- Increase/decrease spacing (gaps)
 | 
			
		||||
    , ("C-M1-j", decWindowSpacing 4)    -- Decrease window spacing
 | 
			
		||||
    , ("C-M1-k", incWindowSpacing 4)    -- Increase window spacing
 | 
			
		||||
    , ("C-M1-h", decScreenSpacing 4)    -- Decrease screen spacing
 | 
			
		||||
    , ("C-M1-l", incScreenSpacing 4)    -- Increase screen spacing
 | 
			
		||||
 | 
			
		||||
    -- Windows navigation
 | 
			
		||||
    , ("M-m",       windows W.focusMaster)  -- Move focus to the master window
 | 
			
		||||
    , ("M-j",       windows W.focusDown)    -- Move focus to the next window
 | 
			
		||||
    , ("M-k",       windows W.focusUp)      -- Move focus to the prev window
 | 
			
		||||
    , ("M-S-m",     windows W.swapMaster)   -- Swap the focused window and the master window
 | 
			
		||||
    , ("M-S-j",     windows W.swapDown)     -- Swap focused window with next window
 | 
			
		||||
    , ("M-S-k",     windows W.swapUp)       -- Swap focused window with prev window
 | 
			
		||||
    , ("M-S-<Tab>", rotSlavesDown)          -- Rotate all windows except master and keep focus in place
 | 
			
		||||
    , ("M-C-<Tab>", rotAllDown)             -- Rotate all windows in the current stack
 | 
			
		||||
    , ("M-<Backspace>", promote)            -- Moves focused window to master, others maintain order
 | 
			
		||||
 | 
			
		||||
    -- Layouts
 | 
			
		||||
    , ("M-<Tab>",   sendMessage NextLayout)   -- Switch to next layout
 | 
			
		||||
    , ("M-<Space>", sendMessage (MT.Toggle NBFULL) >> sendMessage ToggleStruts) -- Toggles noborder/full
 | 
			
		||||
 | 
			
		||||
    -- Increase/decrease windows in the master pane or the stack
 | 
			
		||||
    , ("M-S-<Up>",      sendMessage (IncMasterN 1))     -- Increase # of clients master pane
 | 
			
		||||
    , ("M-S-<Down>",    sendMessage (IncMasterN (-1)))  -- Decrease # of clients master pane
 | 
			
		||||
    , ("M-C-<Up>",      increaseLimit)                  -- Increase # of windows
 | 
			
		||||
    , ("M-C-<Down>",    decreaseLimit)                  -- Decrease # of windows
 | 
			
		||||
 | 
			
		||||
    -- Window resizing
 | 
			
		||||
    , ("M-h",       sendMessage Shrink)         -- Shrink horiz window width
 | 
			
		||||
    , ("M-l",       sendMessage Expand)         -- Expand horiz window width
 | 
			
		||||
    , ("M-M1-j",    sendMessage MirrorShrink)   -- Shrink vert window width
 | 
			
		||||
    , ("M-M1-k",    sendMessage MirrorExpand)   -- Expand vert window width
 | 
			
		||||
 | 
			
		||||
    -- Multimedia keys
 | 
			
		||||
    , ("<XF86AudioMute>",           spawn "pulsemixer --toggle-mute")
 | 
			
		||||
    , ("<XF86AudioLowerVolume>",    spawn "pulsemixer --change-volume -5")
 | 
			
		||||
    , ("<XF86AudioRaiseVolume>",    spawn "pulsemixer --change-volume +5")
 | 
			
		||||
    , ("<XF86MonBrightnessUp>",     spawn "brightness -i 5% -n")
 | 
			
		||||
    , ("<XF86MonBrightnessDown>",   spawn "brightness -d 5% -n")
 | 
			
		||||
    -- Map media keys to meta + arrows for keyboards without special keys
 | 
			
		||||
    , ("M-<Down>",                  spawn "pulsemixer --change-volume -5")
 | 
			
		||||
    , ("M-<Up>",                    spawn "pulsemixer --change-volume +5")
 | 
			
		||||
    , ("M-<Right>",                 spawn "brightness -i 5% -n")
 | 
			
		||||
    , ("M-<Left>",                  spawn "brightness -d 5% -n")
 | 
			
		||||
    ]
 | 
			
		||||
        where nonNSP            = WSIs (return (\ws -> W.tag ws /= "NSP"))
 | 
			
		||||
              nonEmptyNonNSP    = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "NSP"))
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-- Layout vars:
 | 
			
		||||
 | 
			
		||||
--Makes setting the spacingRaw simpler to write.
 | 
			
		||||
--The spacingRaw module adds a configurable amount of space around windows.
 | 
			
		||||
mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
 | 
			
		||||
mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
 | 
			
		||||
 | 
			
		||||
-- Below is a variation of the above except no borders are applied
 | 
			
		||||
-- if fewer than two windows. So a single window has no gaps.
 | 
			
		||||
mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
 | 
			
		||||
mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True
 | 
			
		||||
 | 
			
		||||
-- Colors for tabs layout and tabs sublayout.
 | 
			
		||||
myTabTheme = def { fontName            = myFont
 | 
			
		||||
                 , activeColor         = "#46d9ff"
 | 
			
		||||
                 , inactiveColor       = "#313846"
 | 
			
		||||
                 , activeBorderColor   = "#46d9ff"
 | 
			
		||||
                 , inactiveBorderColor = "#282c34"
 | 
			
		||||
                 , activeTextColor     = "#282c34"
 | 
			
		||||
                 , inactiveTextColor   = "#d0d0d0"
 | 
			
		||||
                 }
 | 
			
		||||
 | 
			
		||||
-- Theme for showWName which prints current workspace when you change workspaces.
 | 
			
		||||
myShowWNameTheme :: SWNConfig
 | 
			
		||||
myShowWNameTheme = def
 | 
			
		||||
    { swn_font              = "xft:Ubuntu:bold:size=60"
 | 
			
		||||
    , swn_fade              = 1.0
 | 
			
		||||
    , swn_bgcolor           = "#1c1f24"
 | 
			
		||||
    , swn_color             = "#ffffff"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-- Layouts:
 | 
			
		||||
-- All of these layouts have to be defined in myLayoutHook, otherwise
 | 
			
		||||
-- type errors will occur
 | 
			
		||||
 | 
			
		||||
tall     = renamed [Replace "tall"]
 | 
			
		||||
           $ smartBorders
 | 
			
		||||
           $ windowNavigation
 | 
			
		||||
           $ addTabs shrinkText myTabTheme
 | 
			
		||||
           $ subLayout [] (smartBorders Simplest)
 | 
			
		||||
           $ limitWindows 12
 | 
			
		||||
           $ mySpacing 8
 | 
			
		||||
           $ ResizableTall 1 (3/100) (1/2) []
 | 
			
		||||
floats   = renamed [Replace "floats"]
 | 
			
		||||
           $ smartBorders
 | 
			
		||||
           $ limitWindows 20 simplestFloat
 | 
			
		||||
grid     = renamed [Replace "grid"]
 | 
			
		||||
           $ smartBorders
 | 
			
		||||
           $ windowNavigation
 | 
			
		||||
           $ addTabs shrinkText myTabTheme
 | 
			
		||||
           $ subLayout [] (smartBorders Simplest)
 | 
			
		||||
           $ limitWindows 12
 | 
			
		||||
           $ mySpacing 8
 | 
			
		||||
           $ mkToggle (single MIRROR)
 | 
			
		||||
           $ Grid (16/10)
 | 
			
		||||
spirals  = renamed [Replace "spirals"]
 | 
			
		||||
           $ smartBorders
 | 
			
		||||
           $ windowNavigation
 | 
			
		||||
           $ addTabs shrinkText myTabTheme
 | 
			
		||||
           $ subLayout [] (smartBorders Simplest)
 | 
			
		||||
           $ mySpacing' 8
 | 
			
		||||
           $ spiral (6/7)
 | 
			
		||||
tabs     = renamed [Replace "tabs"]
 | 
			
		||||
           -- I cannot add spacing to this layout because it will
 | 
			
		||||
           -- add spacing between window and tabs which looks bad.
 | 
			
		||||
           $ tabbed shrinkText myTabTheme
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
myLayoutHook = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts floats
 | 
			
		||||
               $ mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout
 | 
			
		||||
             where
 | 
			
		||||
               myDefaultLayout =     withBorder myBorderWidth tall
 | 
			
		||||
                                 ||| floats
 | 
			
		||||
                                 ||| grid
 | 
			
		||||
                                 ||| spirals
 | 
			
		||||
                                 ||| tabs
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-- Window rules:
 | 
			
		||||
 | 
			
		||||
-- Execute arbitrary actions and WindowSet manipulations when managing
 | 
			
		||||
-- a new window. You can use this to, for example, always float a
 | 
			
		||||
-- particular program, or have a client always appear on a particular
 | 
			
		||||
-- workspace.
 | 
			
		||||
--
 | 
			
		||||
-- To find the property name associated with a program, use
 | 
			
		||||
-- > xprop | grep WM_CLASS
 | 
			
		||||
-- and click on the client you're interested in.
 | 
			
		||||
--
 | 
			
		||||
-- To match on the WM_NAME, you can use 'title' in the same way that
 | 
			
		||||
-- 'className' and 'resource' are used below.
 | 
			
		||||
--
 | 
			
		||||
-- `doFloat` forces a window to float, useful for dialog boxes and such.
 | 
			
		||||
-- `doShift (myWorkspaces !! 7)` sends program to workspace 8
 | 
			
		||||
 | 
			
		||||
myManageHook :: XMonad.Query (Data.Monoid.Endo WindowSet)
 | 
			
		||||
myManageHook = composeAll
 | 
			
		||||
    -- Make dialog boxes floating, don't tile them
 | 
			
		||||
    [ className =? "notification"       --> doFloat
 | 
			
		||||
    , className =? "confirm"            --> doFloat
 | 
			
		||||
    , className =? "dialog"             --> doFloat
 | 
			
		||||
    , className =? "error"              --> doFloat
 | 
			
		||||
    , className =? "download"           --> doFloat
 | 
			
		||||
    , className =? "file_progress"      --> doFloat
 | 
			
		||||
    , className =? "splash"             --> doFloat
 | 
			
		||||
    , className =? "toolbar"            --> doFloat
 | 
			
		||||
    , className =? "Qalculate-gtk"      --> doFloat
 | 
			
		||||
    , className =? "udiskie"            --> doFloat
 | 
			
		||||
    , isFullscreen                      --> doFullFloat
 | 
			
		||||
    -- auto-shift applications to their respecitve workspaces
 | 
			
		||||
    , className =? "discord"            --> doShift ( myWorkspaces !! 3 )
 | 
			
		||||
    , className =? "Element"            --> doShift ( myWorkspaces !! 3 )
 | 
			
		||||
    , className =? "Code"               --> doShift ( myWorkspaces !! 0 )
 | 
			
		||||
    , className =? "Stremio"		--> doShift ( myWorkspaces !! 5 )
 | 
			
		||||
    , title     =? "Mozilla Firefox"    --> doShift ( myWorkspaces !! 1 )
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
-- Startup hook
 | 
			
		||||
 | 
			
		||||
-- Perform an arbitrary action each time xmonad starts or is restarted
 | 
			
		||||
-- with mod-q.  Used by, e.g., XMonad.Layout.PerWorkspace to initialize
 | 
			
		||||
-- per-workspace layout choices.
 | 
			
		||||
--
 | 
			
		||||
-- I don't really use this because I define these applications
 | 
			
		||||
-- in ~/.config/x11/xprofile instead, that way it will apply for
 | 
			
		||||
-- all WMs, not just for XMonad
 | 
			
		||||
 | 
			
		||||
myStartupHook :: X ()
 | 
			
		||||
myStartupHook = do
 | 
			
		||||
    -- Automatically run autostart.sh script which will start
 | 
			
		||||
    -- .desktop applications defined in ~/.config/autostart
 | 
			
		||||
    spawnOnce "$HOME/.config/xmonad/scripts/autostart.sh &"
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-- Log hook: this sends info to xmobar process(es)
 | 
			
		||||
 | 
			
		||||
myLogHook :: Handle -> Handle -> X ()
 | 
			
		||||
myLogHook xmproc0 xmproc1 = dynamicLogWithPP $ xmobarPP
 | 
			
		||||
    { ppOutput = \x -> hPutStrLn xmproc0 x      -- xmobar on monitor 1
 | 
			
		||||
                    >> hPutStrLn xmproc1 x      -- xmobar on monitor 2
 | 
			
		||||
 | 
			
		||||
    , ppCurrent = xmobarColor "#98be65" ""                      -- Current workspace
 | 
			
		||||
        . wrap "<box type=Bottom width=2 mb=2 color=#98be65>" "</box>" . clickable
 | 
			
		||||
    , ppVisible = xmobarColor "#98be65" "" .clickable           -- Visible but not current workspace
 | 
			
		||||
    , ppHidden  = xmobarColor "#82aaff" "" . clickable          -- Hidden workspaces
 | 
			
		||||
    , ppHiddenNoWindows = xmobarColor "#c792ea" "" . clickable  -- Hidden workspaces (no windows)
 | 
			
		||||
 | 
			
		||||
    , ppTitle  = xmobarColor "#b3afc2" "" . shorten 60          -- Title of active window
 | 
			
		||||
    , ppSep    = "<fc=#666666> | </fc>"                         -- Separator character
 | 
			
		||||
    , ppUrgent = xmobarColor "#c45500" "" . wrap "!" "!"      -- Urgent workspace
 | 
			
		||||
    , ppExtras = [windowCount]                                  -- # of windows current workspace
 | 
			
		||||
    , ppOrder  = \(ws:l:t:ex) -> [ws,l]++ex++[t]                -- order of things in xmobar
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-- Run xmonad with all the defaults we set up.
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = do
 | 
			
		||||
    -- Launching 2 instances of xmobar on their respective monitors.
 | 
			
		||||
    xmproc0 <- spawnPipe "xmobar -x 0 $HOME/.config/xmobar/xmobarrc0"
 | 
			
		||||
    xmproc1 <- spawnPipe "xmobar -x 1 $HOME/.config/xmobar/xmobarrc1"
 | 
			
		||||
    -- Xmonad config definitions
 | 
			
		||||
    xmonad $ ewmh $ docks $ def
 | 
			
		||||
        { modMask               = myModMask
 | 
			
		||||
        , terminal              = myTerminal
 | 
			
		||||
        , workspaces            = myWorkspaces
 | 
			
		||||
        , startupHook           = myStartupHook
 | 
			
		||||
        , manageHook            = myManageHook <+> manageDocks
 | 
			
		||||
        --, layoutHook            = showWName' myShowWNameTheme $ myLayoutHook
 | 
			
		||||
        , layoutHook            = myLayoutHook
 | 
			
		||||
        , borderWidth           = myBorderWidth
 | 
			
		||||
        , normalBorderColor     = myNormalBorderColor
 | 
			
		||||
        , focusedBorderColor    = myFocusedBorderColor
 | 
			
		||||
        , logHook               = myLogHook xmproc0 xmproc1
 | 
			
		||||
        } `additionalKeysP` myKeys
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
../shell/profile
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
../shell/environment
 | 
			
		||||
| 
						 | 
				
			
			@ -1,75 +0,0 @@
 | 
			
		|||
#!/usr/bin/zsh
 | 
			
		||||
 | 
			
		||||
# ZSH Options
 | 
			
		||||
setopt auto_cd              # cd by typing directory name if it's not a command
 | 
			
		||||
setopt auto_list            # automatically list choices on ambiguous completion
 | 
			
		||||
setopt auto_menu            # automatically use menu completion
 | 
			
		||||
setopt always_to_end        # move cursor to end if word had one match
 | 
			
		||||
setopt interactivecomments  # allow comments in interactive mode
 | 
			
		||||
setopt magicequalsubst      # enable filename expansion for arguments of form `x=expression`
 | 
			
		||||
setopt notify               # report the status of background jobs immediately
 | 
			
		||||
setopt numericglobsort      # sort filenames numerically when it makes sense
 | 
			
		||||
setopt auto_pushd           # Make cd act as pushd
 | 
			
		||||
#setopt correct_all         # autocorrect commands
 | 
			
		||||
 | 
			
		||||
# oh-my-zsh configuration (DISABLED by default, if you want oh-my-zsh, uncomment these)
 | 
			
		||||
#export ZSH="/usr/share/oh-my-zsh"
 | 
			
		||||
#ZSH_THEME="af-magic"
 | 
			
		||||
#UPDATE_ZSH_DAYS=8
 | 
			
		||||
#ENABLE_CORRECTION="false"
 | 
			
		||||
#source $ZSH/oh-my-zsh.sh # Run oh-my-zsh
 | 
			
		||||
 | 
			
		||||
# ZSH files setup (don't clutter home)
 | 
			
		||||
export ZSH_CACHE="$HOME/.cache/zsh"
 | 
			
		||||
export HISTFILE="$ZSH_CACHE/history"
 | 
			
		||||
export ZSH_COMPDUMP="$ZSH_CACHE/zcompdump-$ZSH_VERSION"
 | 
			
		||||
mkdir -p "$ZSH_CACHE"
 | 
			
		||||
 | 
			
		||||
# Auto-remove home clutter
 | 
			
		||||
[ -f ~/.zsh-update ] && mv ~/.zsh-update $ZSH_CACHE/.zsh-update
 | 
			
		||||
[ -f ~/.sudo_as_admin_sucessful ] && rm ~/.sudo_as_admin_successful
 | 
			
		||||
[ -f ~/.bash_history ] && rm ~/.bash_history
 | 
			
		||||
 | 
			
		||||
# History configuration
 | 
			
		||||
export HISTSIZE=10000
 | 
			
		||||
export SAVEHIST=10000
 | 
			
		||||
setopt appendhistory            # save history entries as soon as they are entered
 | 
			
		||||
setopt hist_ignore_space        # ignore commands that start with space
 | 
			
		||||
setopt hist_verify              # show commands with history expansion to user before running it
 | 
			
		||||
setopt extended_history         # record command start time
 | 
			
		||||
#setopt hist_ignore_dups        # ignore duplicated commands history list
 | 
			
		||||
#setopt hist_expire_dups_first  # delete duplicates first when HISTFILE size exceeds HISTFILE
 | 
			
		||||
#setopt share_history           # share command history data between terminals
 | 
			
		||||
 | 
			
		||||
# Completion features (tab)
 | 
			
		||||
autoload -Uz compinit
 | 
			
		||||
zmodload -i zsh/complist                # load completion list
 | 
			
		||||
compinit -d $ZSH_COMPDUMP               # Specify compdump file
 | 
			
		||||
comp_options+=(globdots)                # Enable completion on hidden files.
 | 
			
		||||
zstyle ':completion:*' menu select      # select completions with arrow keys
 | 
			
		||||
zstyle ':completion:*' group-name ''    # group results by category
 | 
			
		||||
zstyle ':completion:::::' completer _expand _complete _ignored _approximate #enable approximate matches for completion
 | 
			
		||||
 | 
			
		||||
# Color support
 | 
			
		||||
#autoload -U colors && colors
 | 
			
		||||
 | 
			
		||||
# Setup aliases
 | 
			
		||||
[ -f ~/.config/shell/aliases ] && source ~/.config/shell/aliases
 | 
			
		||||
# Load handlers
 | 
			
		||||
[ -f ~/.config/shell/handlers ] && source ~/.config/shell/handlers
 | 
			
		||||
# Load key bindings
 | 
			
		||||
[ -f ~/.config/shell/keybinds ] && source ~/.config/shell/keybinds
 | 
			
		||||
# Load prompt
 | 
			
		||||
[ -f ~/.config/shell/prompt ] && source ~/.config/shell/prompt
 | 
			
		||||
 | 
			
		||||
# Define TMOUT timeout for TTY and root
 | 
			
		||||
[ -z "$DISPLAY" ] && export TMOUT=800
 | 
			
		||||
[ $UID -eq 0 ] && export TMOUT=600
 | 
			
		||||
 | 
			
		||||
# Load extensions (should be last)
 | 
			
		||||
. /usr/share/zsh/site-functions/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
 | 
			
		||||
. /usr/share/zsh/site-functions/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null
 | 
			
		||||
eval "$(lua /usr/local/src/z.lua/z.lua --init zsh enhanced)"
 | 
			
		||||
if command -v pyenv >/dev/null 2>&1; then
 | 
			
		||||
    eval "$(pyenv init -)"
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
BTC_DATA=$(curl https://api.coindesk.com/v1/bpi/currentprice.json 2>/dev/null || echo 'ERR')
 | 
			
		||||
 | 
			
		||||
if [ "$BTC_DATA" != "ERR" ]; then
 | 
			
		||||
    BTC_PRICE=$(echo $BTC_DATA | jq -r ".bpi.USD.rate_float")
 | 
			
		||||
    BTC_PRICE=$(printf "%.2f" "$BTC_PRICE")
 | 
			
		||||
    echo \$"$BTC_PRICE"
 | 
			
		||||
else
 | 
			
		||||
    echo "N/A"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,153 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Parse arguments
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
BRIGHTNESS_DIR="/sys/class/backlight/*"
 | 
			
		||||
SEND_NOTIFICATION=0
 | 
			
		||||
URGENCY="normal"
 | 
			
		||||
INCREASE=0
 | 
			
		||||
DECREASE=0
 | 
			
		||||
SET=0
 | 
			
		||||
BRIGHTNESS=0
 | 
			
		||||
 | 
			
		||||
while [ "$1" ]; do
 | 
			
		||||
    case "$1" in
 | 
			
		||||
        -h | --help)
 | 
			
		||||
            cat << EOF
 | 
			
		||||
brightness is a cli tool that for displaying or modifying screen brightness.
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
-h | --help: Display this message
 | 
			
		||||
-n | --notification: Produce a desktop notification with brightness info
 | 
			
		||||
-N | --no-notification: Don't produce a desktop notification with brightness info
 | 
			
		||||
-u | --urgency [URGENCY]: Pass over notify-send urgency attribute (default: normal)
 | 
			
		||||
-i | --increase [BRIGHTNESS]: Increase the brightness by given amount
 | 
			
		||||
-d | --decrease [BRIGHTNESS]: Decrease the brightness by given amount
 | 
			
		||||
-s | --set [BRIGHTNESS]: Set new brightness level
 | 
			
		||||
-p | --path [DIR_PATH]: Path to brightness directory (default: /sys/class/backlight/*)
 | 
			
		||||
 | 
			
		||||
Valid values:
 | 
			
		||||
    URGENCY: low, normal, critical
 | 
			
		||||
    DIR_PATH: Valid path to a directory
 | 
			
		||||
    BRIGHTNESS:
 | 
			
		||||
        specific value - Example: 10
 | 
			
		||||
        percentage value - Example: 10%
 | 
			
		||||
EOF
 | 
			
		||||
            exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
        -n | --notification)
 | 
			
		||||
            SEND_NOTIFICATION=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -N | --no-notification)
 | 
			
		||||
            SEND_NOTIFICATION=0
 | 
			
		||||
            ;;
 | 
			
		||||
        -u | --urgency)
 | 
			
		||||
            URGENCY="$2"
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -i | --increase)
 | 
			
		||||
            INCREASE=1
 | 
			
		||||
            BRIGHTNESS="$2"
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -d | --decrease)
 | 
			
		||||
            DECREASE=1
 | 
			
		||||
            BRIGHTNESS="$2"
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -s | --set)
 | 
			
		||||
            SET=1
 | 
			
		||||
            BRIGHTNESS="$2"
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -p | --path)
 | 
			
		||||
            BRIGHTNESS_DIR="$2"
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        * ) 
 | 
			
		||||
            echo "Unknown argument '$1', use -h or --help for help" 
 | 
			
		||||
            exit 1
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
    shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Define constants based on parsed arguments
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
BRIGHTNESS_FILE="$BRIGHTNESS_DIR/brightness"
 | 
			
		||||
BRIGHTNESS_MAX="$(cat $BRIGHTNESS_DIR/max_brightness)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Helper functins
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Send brightness level desktop notification, showing the given brightness level
 | 
			
		||||
# as progress bar, along with given message.
 | 
			
		||||
# $1 - brightness level (number 0-100)
 | 
			
		||||
# $2 - message (notification body)
 | 
			
		||||
send_brightness_notify() {
 | 
			
		||||
    percent_brightness="$1"
 | 
			
		||||
    msg="$2"
 | 
			
		||||
 | 
			
		||||
    notify-send \
 | 
			
		||||
        --app-name=brightness \
 | 
			
		||||
        --urgency="$URGENCY" \
 | 
			
		||||
        -h int:value:$percent_brightness \
 | 
			
		||||
        -h string:synchronous:brightness \
 | 
			
		||||
        "brightness" "$msg"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Set brightness to given absolute value
 | 
			
		||||
# $1 - brightness absolute value
 | 
			
		||||
set_brightness() {
 | 
			
		||||
    # there should be sudo config allowing this command without password
 | 
			
		||||
    echo "$1" | sudo tee $BRIGHTNESS_FILE >/dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Main Logic
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Determine the absolute new brightness level
 | 
			
		||||
if [ $INCREASE -eq 1 ] || [ $DECREASE -eq 1 ] || [ $SET -eq 1 ]; then
 | 
			
		||||
    # If we're dealing with percentages, change to absolutes
 | 
			
		||||
    if echo "$BRIGHTNESS" | grep -qE '%$'; then
 | 
			
		||||
        numeric=$(echo "$BRIGHTNESS" | sed 's/.$//')
 | 
			
		||||
        absolute=$(echo "($BRIGHTNESS_MAX / 100) * $numeric" | bc -l)
 | 
			
		||||
        BRIGHTNESS=$(printf "%.0f" $absolute)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Get the new requested absolute brightness
 | 
			
		||||
    if [ $SET -eq 1 ]; then
 | 
			
		||||
        new_brightness=$BRIGHTNESS
 | 
			
		||||
    elif [ $DECREASE -eq 1 ]; then
 | 
			
		||||
        cur_brightness=$(cat $BRIGHTNESS_FILE)
 | 
			
		||||
        new_brightness=$(($cur_brightness - $BRIGHTNESS))
 | 
			
		||||
    else
 | 
			
		||||
        cur_brightness=$(cat $BRIGHTNESS_FILE)
 | 
			
		||||
        new_brightness=$(($cur_brightness + $BRIGHTNESS))
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Ensure we respect max/min boundaries
 | 
			
		||||
    if [ $new_brightness -lt 0 ]; then
 | 
			
		||||
        new_brightness=0
 | 
			
		||||
    elif [ $new_brightness -gt $BRIGHTNESS_MAX ]; then
 | 
			
		||||
        new_brightness=$BRIGHTNESS_MAX
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Update the brightness
 | 
			
		||||
    set_brightness $new_brightness
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cur_brightness=$(cat $BRIGHTNESS_FILE)
 | 
			
		||||
percent_brightness=$(echo "($cur_brightness / $BRIGHTNESS_MAX) * 100" | bc -l)
 | 
			
		||||
percent_brightness_2f=$(printf "%.2f" $percent_brightness)
 | 
			
		||||
percent_brightness_rounded=$(printf "%.0f" $percent_brightness)
 | 
			
		||||
 | 
			
		||||
if [ $SEND_NOTIFICATION -eq 1 ]; then
 | 
			
		||||
    send_brightness_notify "$percent_brightness_rounded" "Level: $percent_brightness_rounded"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Brightness: ${percent_brightness_2f}% (absolute: $cur_brightness)"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,111 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# rm_trailing_slashes(string)
 | 
			
		||||
#
 | 
			
		||||
# Prints a string without any trailing slashes.
 | 
			
		||||
# This is used because cheat.sh doesn't play nicely with multiple slashes in
 | 
			
		||||
# URLs.
 | 
			
		||||
rm_trailing_slashes() {
 | 
			
		||||
    string="$1"
 | 
			
		||||
    last_char="$(printf "$string" | tail -c 1)"
 | 
			
		||||
    if [ "$last_char" = "/" ]; then
 | 
			
		||||
        echo "$(rm_trailing_slashes "${string%?}")"
 | 
			
		||||
    else
 | 
			
		||||
        echo "$string"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# pick_category(must_match, query, argument, recurse)
 | 
			
		||||
#
 | 
			
		||||
# Pick cheat.sh category.
 | 
			
		||||
# if must_match is 1, only allow listed options to be picked.
 | 
			
		||||
# if query is specified, pick sub-category of it, else pick global categories.
 | 
			
		||||
# if argument is specified, optionally perform must_match check and print it.
 | 
			
		||||
# if recurse is 1, if the selected option ends with /, run the function again.
 | 
			
		||||
#
 | 
			
		||||
# Prints the chosen category
 | 
			
		||||
pick_category() {
 | 
			
		||||
    must_match="$1"
 | 
			
		||||
    query="$(rm_trailing_slashes "$2")"
 | 
			
		||||
    argument="$3"
 | 
			
		||||
    recurse="$4"
 | 
			
		||||
 | 
			
		||||
    # Query all possible options
 | 
			
		||||
    if [ -n "$query" ]; then
 | 
			
		||||
        url="cheat.sh/$query/:list"
 | 
			
		||||
    else
 | 
			
		||||
        url="cheat.sh/:list"
 | 
			
		||||
    fi
 | 
			
		||||
    selectable="$(curl -s "$url")"
 | 
			
		||||
 | 
			
		||||
    # If argument is specified, print it, optionally perform must_match check.
 | 
			
		||||
    if [ -n "$argument" ]; then
 | 
			
		||||
        if [ "$must_match" -ne 1 ] || echo "$selectable" | grep -qe "\b$1\b"; then
 | 
			
		||||
            selected="$argument"
 | 
			
		||||
        else
 | 
			
		||||
            echo "Invalid selection: '$argument'"
 | 
			
		||||
            echo "For all selections, query $url"
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    # Select the option with fzf, optionally allow other matches if must_match isn't set.
 | 
			
		||||
    else
 | 
			
		||||
        if [ "$must_match" -ne 1 ]; then
 | 
			
		||||
            if [ -z "$selectable" ]; then
 | 
			
		||||
                header="No selections found, you can use empty query to show category help, or type a custom query."
 | 
			
		||||
            else
 | 
			
		||||
                header="Use alt-enter to enter non-listed query. You can use empty queries to show category help."
 | 
			
		||||
            fi
 | 
			
		||||
            selected="$(printf "\n$selectable" | \
 | 
			
		||||
                fzf --bind=alt-enter:print-query \
 | 
			
		||||
                --print-query \
 | 
			
		||||
                --prompt="cheat.sh/$query query>" \
 | 
			
		||||
                --header="$header"\
 | 
			
		||||
                )"
 | 
			
		||||
        else
 | 
			
		||||
            selected=$(printf "$selectable" | fzf --prompt="cheat.sh/$query category>")
 | 
			
		||||
            if [ $? -ne 0 ]; then
 | 
			
		||||
                echo "Invalid selection: '$selected'"
 | 
			
		||||
                echo "For all selections, query $url"
 | 
			
		||||
                exit 1
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        selected=$(printf "$selected" | tail -1)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Replace spaces with '+' (cheat.sh resolves those as spaces)
 | 
			
		||||
    selected="$(echo "$selected" | tr ' ' '+')"
 | 
			
		||||
 | 
			
		||||
    # Prepend the original query, if we have one
 | 
			
		||||
    # Print the selected category, or subcategory with the category
 | 
			
		||||
    if [ -n "$query" ]; then
 | 
			
		||||
        result="$query/$selected"
 | 
			
		||||
    else
 | 
			
		||||
        result="$selected"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Recurse, if specified and the result ended with /
 | 
			
		||||
    if [ "$recurse" -eq 1 ]; then
 | 
			
		||||
        if [ "$(printf "$selected" | tail -c 1)" = "/" ]; then
 | 
			
		||||
            result="$(pick_category "$must_match" "$result" "$argument" 1)"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Print the result
 | 
			
		||||
    printf "$result"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Select the cheatsheat category (language/core-util/...)
 | 
			
		||||
query=$(pick_category 1 "" "$1" 0)
 | 
			
		||||
 | 
			
		||||
# If the query isn't already complete, select a sub-category
 | 
			
		||||
if ! echo "$query" | grep -qe ":"; then
 | 
			
		||||
    query="$(pick_category 0 "$query" "$2" 1)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Construct the URL from given query and print it
 | 
			
		||||
url="cheat.sh/$query"
 | 
			
		||||
echo "$url"
 | 
			
		||||
 | 
			
		||||
# Show the output of cheat.sh request
 | 
			
		||||
curl -s "$url"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,102 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# # Print out 256 colors, with each number printed in its corresponding colour
 | 
			
		||||
#
 | 
			
		||||
# This file is uploaded on <https://gist.githubusercontent.com/HaleTom/89ffe32783f89f403bba96bd7bcd1263/raw/>
 | 
			
		||||
# It was originally intended to be used as an alias that curled this URL and piped it into bash, however
 | 
			
		||||
# this is very unsafe as the owner can change the content of this gist at his convenience, meaning it was
 | 
			
		||||
# a potential security vulnerability. This is a script version of this alias to avoid this issue.
 | 
			
		||||
#
 | 
			
		||||
# The copyright for this file belongs to the original author: Tom Hale, 2016
 | 
			
		||||
# This file was released under MIT license
 | 
			
		||||
 | 
			
		||||
set -eu # Fail on errors or undeclared variables
 | 
			
		||||
 | 
			
		||||
printable_colours=256
 | 
			
		||||
 | 
			
		||||
# Return a colour that contrasts with the given colour
 | 
			
		||||
# Bash only does integer division, so keep it integral
 | 
			
		||||
function contrast_colour {
 | 
			
		||||
    local r g b luminance
 | 
			
		||||
    colour="$1"
 | 
			
		||||
 | 
			
		||||
    if (( colour < 16 )); then # Initial 16 ANSI colours
 | 
			
		||||
        (( colour == 0 )) && printf "15" || printf "0"
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Greyscale # rgb_R = rgb_G = rgb_B = (number - 232) * 10 + 8
 | 
			
		||||
    if (( colour > 231 )); then # Greyscale ramp
 | 
			
		||||
        (( colour < 244 )) && printf "15" || printf "0"
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # All other colours:
 | 
			
		||||
    # 6x6x6 colour cube = 16 + 36*R + 6*G + B  # Where RGB are [0..5]
 | 
			
		||||
    # See http://stackoverflow.com/a/27165165/5353461
 | 
			
		||||
 | 
			
		||||
    # r=$(( (colour-16) / 36 ))
 | 
			
		||||
    g=$(( ((colour-16) % 36) / 6 ))
 | 
			
		||||
    # b=$(( (colour-16) % 6 ))
 | 
			
		||||
 | 
			
		||||
    # If luminance is bright, print number in black, white otherwise.
 | 
			
		||||
    # Green contributes 587/1000 to human perceived luminance - ITU R-REC-BT.601
 | 
			
		||||
    (( g > 2)) && printf "0" || printf "15"
 | 
			
		||||
    return
 | 
			
		||||
 | 
			
		||||
    # Uncomment the below for more precise luminance calculations
 | 
			
		||||
 | 
			
		||||
    # # Calculate percieved brightness
 | 
			
		||||
    # # See https://www.w3.org/TR/AERT#color-contrast
 | 
			
		||||
    # # and http://www.itu.int/rec/R-REC-BT.601
 | 
			
		||||
    # # Luminance is in range 0..5000 as each value is 0..5
 | 
			
		||||
    # luminance=$(( (r * 299) + (g * 587) + (b * 114) ))
 | 
			
		||||
    # (( $luminance > 2500 )) && printf "0" || printf "15"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Print a coloured block with the number of that colour
 | 
			
		||||
function print_colour {
 | 
			
		||||
    local colour="$1" contrast
 | 
			
		||||
    contrast=$(contrast_colour "$1")
 | 
			
		||||
    printf "\e[48;5;%sm" "$colour"                # Start block of colour
 | 
			
		||||
    printf "\e[38;5;%sm%3d" "$contrast" "$colour" # In contrast, print number
 | 
			
		||||
    printf "\e[0m "                               # Reset colour
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Starting at $1, print a run of $2 colours
 | 
			
		||||
function print_run {
 | 
			
		||||
    local i
 | 
			
		||||
    for (( i = "$1"; i < "$1" + "$2" && i < printable_colours; i++ )) do
 | 
			
		||||
        print_colour "$i"
 | 
			
		||||
    done
 | 
			
		||||
    printf "  "
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Print blocks of colours
 | 
			
		||||
function print_blocks {
 | 
			
		||||
    local start="$1" i
 | 
			
		||||
    local end="$2" # inclusive
 | 
			
		||||
    local block_cols="$3"
 | 
			
		||||
    local block_rows="$4"
 | 
			
		||||
    local blocks_per_line="$5"
 | 
			
		||||
    local block_length=$((block_cols * block_rows))
 | 
			
		||||
 | 
			
		||||
    # Print sets of blocks
 | 
			
		||||
    for (( i = start; i <= end; i += (blocks_per_line-1) * block_length )) do
 | 
			
		||||
        printf "\n" # Space before each set of blocks
 | 
			
		||||
        # For each block row
 | 
			
		||||
        for (( row = 0; row < block_rows; row++ )) do
 | 
			
		||||
            # Print block columns for all blocks on the line
 | 
			
		||||
            for (( block = 0; block < blocks_per_line; block++ )) do
 | 
			
		||||
                print_run $(( i + (block * block_length) )) "$block_cols"
 | 
			
		||||
            done
 | 
			
		||||
            (( i += block_cols )) # Prepare to print the next row
 | 
			
		||||
            printf "\n"
 | 
			
		||||
        done
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_run 0 16 # The first 16 colours are spread over the whole spectrum
 | 
			
		||||
printf "\n"
 | 
			
		||||
print_blocks 16 231 6 6 3 # 6x6x6 colour cube between 16 and 231 inclusive
 | 
			
		||||
print_blocks 232 255 12 2 1 # Not 50, but 24 Shades of Grey
 | 
			
		||||
| 
						 | 
				
			
			@ -1,13 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# Compile given file
 | 
			
		||||
 | 
			
		||||
file=$(readlink -f "$1")
 | 
			
		||||
base="$(dirname "$file")/$(basename "$file" | sed 's/\..*//')"
 | 
			
		||||
 | 
			
		||||
case "$file" in
 | 
			
		||||
    *.md) pandoc --filter pandoc-crossref "$file" -o "$base".pdf ;;
 | 
			
		||||
    *.asm) nasm -f elf64 "$file" -o "$base".o && ld "$base".o -o "$base" ;;
 | 
			
		||||
    *.c) gcc "$file" -o "$base" ;;
 | 
			
		||||
    *.cpp) g++ "$file" -o "$base" ;;
 | 
			
		||||
    *) echo "Can't compile!" && exit 1 ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Find the line with exec, if there's multiple lines
 | 
			
		||||
# use the last one
 | 
			
		||||
exec_line=$(grep '^Exec' "$1" | tail -1)
 | 
			
		||||
# Remove 'Exec' and arguments (%u, %f, ...)
 | 
			
		||||
cmd=$(echo $exec_line | sed 's/^Exec=//' | sed 's/%.//')
 | 
			
		||||
# Remove "" around command (if present)
 | 
			
		||||
cmd=$(echo $cmd | sed 's/^"//g' | sed 's/" *$//g')
 | 
			
		||||
# Run the exec line of the application using /bin/sh
 | 
			
		||||
/bin/sh -c "$cmd"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,82 +0,0 @@
 | 
			
		|||
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# A UI for detecting and selecting all displays. Probes xrandr for connected
 | 
			
		||||
# displays and lets user select one to use. User may also select "manual
 | 
			
		||||
# selection" which opens arandr.
 | 
			
		||||
 | 
			
		||||
twoscreen() { # If multi-monitor is selected and there are two screens.
 | 
			
		||||
 | 
			
		||||
    mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
 | 
			
		||||
    # Mirror displays using native resolution of external display and a scaled
 | 
			
		||||
    # version for the internal display
 | 
			
		||||
    if [ "$mirror" = "yes" ]; then
 | 
			
		||||
        external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:")
 | 
			
		||||
        internal=$(echo "$screens" | grep -v "$external")
 | 
			
		||||
 | 
			
		||||
        res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
 | 
			
		||||
            tail -n 1 | awk '{print $1}')
 | 
			
		||||
        res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
 | 
			
		||||
            tail -n 1 | awk '{print $1}')
 | 
			
		||||
 | 
			
		||||
        res_ext_x=$(echo "$res_external" | sed 's/x.*//')
 | 
			
		||||
        res_ext_y=$(echo "$res_external" | sed 's/.*x//')
 | 
			
		||||
        res_int_x=$(echo "$res_internal" | sed 's/x.*//')
 | 
			
		||||
        res_int_y=$(echo "$res_internal" | sed 's/.*x//')
 | 
			
		||||
 | 
			
		||||
        scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
 | 
			
		||||
        scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
 | 
			
		||||
 | 
			
		||||
        xrandr --output "$external" --auto --scale 1.0x1.0 \
 | 
			
		||||
            --output "$internal" --auto --same-as "$external" \
 | 
			
		||||
            --scale "$scale_x"x"$scale_y"
 | 
			
		||||
    else
 | 
			
		||||
 | 
			
		||||
        primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
 | 
			
		||||
        secondary=$(echo "$screens" | grep -v "$primary")
 | 
			
		||||
        direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
 | 
			
		||||
        xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0
 | 
			
		||||
    fi
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
morescreen() { # If multi-monitor is selected and there are more than two screens.
 | 
			
		||||
	primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
 | 
			
		||||
	secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
 | 
			
		||||
	direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
 | 
			
		||||
	tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
 | 
			
		||||
	xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
multimon() { # Multi-monitor handler.
 | 
			
		||||
	case "$(echo "$screens" | wc -l)" in
 | 
			
		||||
		2) twoscreen ;;
 | 
			
		||||
		*) morescreen ;;
 | 
			
		||||
	esac ;}
 | 
			
		||||
 | 
			
		||||
onescreen() { # If only one output available or chosen.
 | 
			
		||||
	xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
postrun() { # Stuff to run to clean up.
 | 
			
		||||
	command -v setbg >/dev/null && setbg        # Fix background if screen size/arangement has changed.
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# Get all possible displays
 | 
			
		||||
allposs=$(xrandr -q | grep "connected")
 | 
			
		||||
 | 
			
		||||
# Get all connected screens.
 | 
			
		||||
screens=$(echo "$allposs" | awk '/ connected/ {print $1}')
 | 
			
		||||
 | 
			
		||||
# If there's only one screen
 | 
			
		||||
[ "$(echo "$screens" | wc -l)" -lt 2 ] &&
 | 
			
		||||
	{ onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings...";  exit ;}
 | 
			
		||||
 | 
			
		||||
# Get user choice including multi-monitor and manual selection:
 | 
			
		||||
chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
 | 
			
		||||
case "$chosen" in
 | 
			
		||||
	"manual selection") arandr ; exit ;;
 | 
			
		||||
	"multi-monitor") multimon ;;
 | 
			
		||||
	*) onescreen "$chosen" ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
postrun
 | 
			
		||||
| 
						 | 
				
			
			@ -1,68 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Gives dmenu prompt to mount unmounted drives and Android phones.
 | 
			
		||||
# If they're in /etc/fstab they'll be mounted automatically.
 | 
			
		||||
# Otherwise, you'll be prompted to give a mountpoint from already
 | 
			
		||||
# existing directories. If you input a novel directory, it will
 | 
			
		||||
# prompt you to create that directory.
 | 
			
		||||
 | 
			
		||||
getmount() { \
 | 
			
		||||
	[ -z "$chosen" ] && exit 1
 | 
			
		||||
        # shellcheck disable=SC2086
 | 
			
		||||
	mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1
 | 
			
		||||
	test -z "$mp" && exit 1
 | 
			
		||||
	if [ ! -d "$mp" ]; then
 | 
			
		||||
		mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1
 | 
			
		||||
		[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
 | 
			
		||||
	fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
mountusb() { \
 | 
			
		||||
	chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1
 | 
			
		||||
	chosen="$(echo "$chosen" | awk '{print $1}')"
 | 
			
		||||
	sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0
 | 
			
		||||
	alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
 | 
			
		||||
	getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted"
 | 
			
		||||
	partitiontype="$(lsblk -no "fstype" "$chosen")"
 | 
			
		||||
	case "$partitiontype" in
 | 
			
		||||
		"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
 | 
			
		||||
		"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
 | 
			
		||||
		*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
 | 
			
		||||
	esac
 | 
			
		||||
	notify-send "💻 USB mounting" "$chosen mounted to $mp."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
mountandroid() { \
 | 
			
		||||
	chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
 | 
			
		||||
	chosen="$(echo "$chosen" | cut -d : -f 1)"
 | 
			
		||||
	getmount "$HOME -maxdepth 3 -type d"
 | 
			
		||||
        simple-mtpfs --device "$chosen" "$mp"
 | 
			
		||||
	echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
 | 
			
		||||
	simple-mtpfs --device "$chosen" "$mp"
 | 
			
		||||
	notify-send "🤖 Android Mounting" "Android device mounted to $mp."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
asktype() { \
 | 
			
		||||
	choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1
 | 
			
		||||
	case $choice in
 | 
			
		||||
		USB) mountusb ;;
 | 
			
		||||
		Android) mountandroid ;;
 | 
			
		||||
	esac
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
anddrives=$(simple-mtpfs -l 2>/dev/null)
 | 
			
		||||
usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | grep 'part\|rom' | awk '$4==""{printf "%s (%s)\n",$1,$3}')"
 | 
			
		||||
 | 
			
		||||
if [ -z "$usbdrives" ]; then
 | 
			
		||||
	[ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit
 | 
			
		||||
	echo "Android device(s) detected."
 | 
			
		||||
	mountandroid
 | 
			
		||||
else
 | 
			
		||||
	if [ -z "$anddrives" ]; then
 | 
			
		||||
		echo "USB drive(s) detected."
 | 
			
		||||
		mountusb
 | 
			
		||||
	else
 | 
			
		||||
		echo "Mountable USB drive(s) and Android device(s) detected."
 | 
			
		||||
		asktype
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# This script is the value for SUDO_ASKPASS variable,
 | 
			
		||||
# meaning that it will be used as a password prompt if needed.
 | 
			
		||||
 | 
			
		||||
dmenu -P -p "$1"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,121 +0,0 @@
 | 
			
		|||
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Usage:
 | 
			
		||||
# `$0`: Ask for recording type via dmenu
 | 
			
		||||
# `$0 screencast`: Record both audio and screen
 | 
			
		||||
# `$0 video`: Record only screen
 | 
			
		||||
# `$0 audio`: Record only audio
 | 
			
		||||
# `$0 kill`: Kill existing recording
 | 
			
		||||
#
 | 
			
		||||
# If there is already a running instance, user will be prompted to end it.
 | 
			
		||||
 | 
			
		||||
screencast() {
 | 
			
		||||
	ffmpeg -y \
 | 
			
		||||
	-f x11grab \
 | 
			
		||||
	-framerate 60 \
 | 
			
		||||
	-s "$(xdpyinfo | grep dimensions | awk '{print $2;}')" \
 | 
			
		||||
	-i "$DISPLAY" \
 | 
			
		||||
	-f alsa -i default \
 | 
			
		||||
	-r 30 \
 | 
			
		||||
 	-c:v h264 -crf 0 -preset ultrafast -c:a aac \
 | 
			
		||||
	"$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
 | 
			
		||||
	echo $! > /tmp/recordingpid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
video() {
 | 
			
		||||
    ffmpeg \
 | 
			
		||||
	-f x11grab \
 | 
			
		||||
	-s "$(xdpyinfo | grep dimensions | awk '{print $2;}')" \
 | 
			
		||||
	-i "$DISPLAY" \
 | 
			
		||||
 	-c:v libx264 -qp 0 -r 30 \
 | 
			
		||||
	"$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
 | 
			
		||||
	echo $! > /tmp/recordingpid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
webcamhidef() {
 | 
			
		||||
    ffmpeg \
 | 
			
		||||
	-f v4l2 \
 | 
			
		||||
	-i /dev/video0 \
 | 
			
		||||
	-video_size 1920x1080 \
 | 
			
		||||
	"$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
 | 
			
		||||
	echo $! > /tmp/recordingpid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
webcam() {
 | 
			
		||||
    ffmpeg \
 | 
			
		||||
	-f v4l2 \
 | 
			
		||||
	-i /dev/video0 \
 | 
			
		||||
	-video_size 640x480 \
 | 
			
		||||
	"$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
 | 
			
		||||
	echo $! > /tmp/recordingpid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
audio() {
 | 
			
		||||
	ffmpeg \
 | 
			
		||||
	-f alsa -i default \
 | 
			
		||||
	"$HOME/audio-$(date '+%y%m%d-%H%M-%S').mp3" &
 | 
			
		||||
	echo $! > /tmp/recordingpid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
asktoend() {
 | 
			
		||||
	response=$(printf "No\\nYes" | dmenu -i -p "Recording still active. End recording?") &&
 | 
			
		||||
	[ "$response" = "Yes" ] &&  killrecording
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
videoselected()
 | 
			
		||||
{
 | 
			
		||||
	slop -f "%x %y %w %h" > /tmp/slop
 | 
			
		||||
	read -r X Y W H < /tmp/slop
 | 
			
		||||
	rm /tmp/slop
 | 
			
		||||
 | 
			
		||||
	ffmpeg \
 | 
			
		||||
	-f x11grab \
 | 
			
		||||
	-framerate 60 \
 | 
			
		||||
	-video_size "$W"x"$H" \
 | 
			
		||||
	-i :0.0+"$X,$Y" \
 | 
			
		||||
	-c:v libx264 -qp 0 -r 30 \
 | 
			
		||||
	"$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" &
 | 
			
		||||
	echo $! > /tmp/recordingpid
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
killrecording() {
 | 
			
		||||
	recpid="$(cat /tmp/recordingpid)"
 | 
			
		||||
	# kill with SIGTERM, allowing finishing touches.
 | 
			
		||||
	kill -15 "$recpid" 2>/dev/null
 | 
			
		||||
	rm -f /tmp/recordingpid
 | 
			
		||||
	# even after SIGTERM, ffmpeg may still run, so SIGKILL it.
 | 
			
		||||
	sleep 3
 | 
			
		||||
	kill -9 "$recpid" 2>/dev/null
 | 
			
		||||
	exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
askrecording() { \
 | 
			
		||||
	choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:")
 | 
			
		||||
	case "$choice" in
 | 
			
		||||
		screencast) screencast;;
 | 
			
		||||
		audio) audio;;
 | 
			
		||||
		video) video;;
 | 
			
		||||
		*selected) videoselected;;
 | 
			
		||||
		webcam) webcam;;
 | 
			
		||||
		"webcam (hi-def)") webcamhidef;;
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
case "$1" in
 | 
			
		||||
	screencast) screencast;;
 | 
			
		||||
	audio) audio;;
 | 
			
		||||
	video) video;;
 | 
			
		||||
	*selected) videoselected;;
 | 
			
		||||
	kill) killrecording;;
 | 
			
		||||
	*)
 | 
			
		||||
        if [ -f /tmp/recordingpid ]; then
 | 
			
		||||
	        recpid="$(cat /tmp/recordingpid)"
 | 
			
		||||
            if ps -p $recpid > /dev/null; then
 | 
			
		||||
                asktoend
 | 
			
		||||
                exit
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        askrecording;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# A dmenu prompt to unmount drives.
 | 
			
		||||
# Provides you with mounted partitions, select one to unmount.
 | 
			
		||||
# Drives mounted at /, /boot and /home will not be options to unmount.
 | 
			
		||||
 | 
			
		||||
unmountusb() {
 | 
			
		||||
	[ -z "$drives" ] && exit
 | 
			
		||||
	chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
 | 
			
		||||
	chosen="$(echo "$chosen" | awk '{print $1}')"
 | 
			
		||||
	[ -z "$chosen" ] && exit
 | 
			
		||||
	sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
unmountandroid() { \
 | 
			
		||||
	chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1
 | 
			
		||||
	[ -z "$chosen" ] && exit
 | 
			
		||||
	sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
asktype() { \
 | 
			
		||||
	choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1
 | 
			
		||||
	case "$choice" in
 | 
			
		||||
		USB) unmountusb ;;
 | 
			
		||||
		Android) unmountandroid ;;
 | 
			
		||||
	esac
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')
 | 
			
		||||
 | 
			
		||||
if ! grep simple-mtpfs /etc/mtab; then
 | 
			
		||||
	[ -z "$drives" ] && echo "No drives to unmount." &&  exit
 | 
			
		||||
	echo "Unmountable USB drive detected."
 | 
			
		||||
	unmountusb
 | 
			
		||||
else
 | 
			
		||||
	if [ -z "$drives" ]
 | 
			
		||||
	then
 | 
			
		||||
		echo "Unmountable Android device detected."
 | 
			
		||||
	       	unmountandroid
 | 
			
		||||
	else
 | 
			
		||||
		echo "Unmountable USB drive(s) and Android device(s) detected."
 | 
			
		||||
		asktype
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# This is inspired by dmenu's todo script made by suckless
 | 
			
		||||
#
 | 
			
		||||
# Manage TODO tasks in dmenu by writing them, remove by selecting
 | 
			
		||||
# an existing entry
 | 
			
		||||
#
 | 
			
		||||
# Configurable variables
 | 
			
		||||
# ---------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
FILE="${XDG_DATA_HOME:-$HOME/.local/share}/todos"
 | 
			
		||||
PROMPT="Add/delete a task: "
 | 
			
		||||
 | 
			
		||||
# Logic
 | 
			
		||||
# ---------------------------------------------------------------------
 | 
			
		||||
mkdir -p "$(dirname $FILE)"
 | 
			
		||||
touch "$FILE"
 | 
			
		||||
 | 
			
		||||
height=$(wc -l "$FILE" | awk '{print $1}')
 | 
			
		||||
 | 
			
		||||
# Run dmenu and keep restarting it until it returns an empty output
 | 
			
		||||
cmd=$(dmenu -l "$height" -p "$PROMPT" "$@" < "$FILE")
 | 
			
		||||
while [ -n "$cmd" ]; do
 | 
			
		||||
    # If the output matched an existing TODO, remove it
 | 
			
		||||
    if grep -q "^$cmd\$" "$FILE"; then
 | 
			
		||||
        grep -v "^$cmd\$" "$FILE" > "$FILE.$$"
 | 
			
		||||
        mv "$FILE.$$" "$FILE"
 | 
			
		||||
        height=$(( height - 1 ))
 | 
			
		||||
    # If the output didn't match an existing TODO, it's a new one, add it
 | 
			
		||||
    else
 | 
			
		||||
        echo "$cmd" >> "$FILE"
 | 
			
		||||
        height=$(( height + 1 ))
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Keep restarting until empty output
 | 
			
		||||
    cmd=$(dmenu -l "$height" -p "$PROMPT" "$@" < "$FILE")
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -1,23 +0,0 @@
 | 
			
		|||
#!/usr/bin/env python
 | 
			
		||||
import feedparser
 | 
			
		||||
import subprocess
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
URL = "https://itsdrike.com/posts/index.xml"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    feed = feedparser.parse(URL)
 | 
			
		||||
    titles = {entry['title']: entry['link'] for entry in feed['entries']}
 | 
			
		||||
 | 
			
		||||
    selected_page = subprocess.check_output(
 | 
			
		||||
        ["dmenu", "-i", "-p", "Post"],
 | 
			
		||||
        input="\n".join(titles.keys()), universal_newlines=True
 | 
			
		||||
    )
 | 
			
		||||
    link = titles[selected_page.strip()]
 | 
			
		||||
 | 
			
		||||
    subprocess.check_output(["xsel", "-bi"], input=link, universal_newlines=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
| 
						 | 
				
			
			@ -1,119 +0,0 @@
 | 
			
		|||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import subprocess
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from dataclasses import dataclass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class CompiledPackage:
 | 
			
		||||
    name: str
 | 
			
		||||
    date: datetime
 | 
			
		||||
    compile_time: int
 | 
			
		||||
 | 
			
		||||
    def __repr__(self) -> str:
 | 
			
		||||
        name = self.name
 | 
			
		||||
        date = self.date.strftime("%a %b %d %H:%M:%S %Y")
 | 
			
		||||
        compile_time = get_readable_duration(self.compile_time)
 | 
			
		||||
        return f"CompiledPackage({name=}, {date=}, {compile_time=})"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_time(time_line: str) -> int:
 | 
			
		||||
    """Parse a line that contains time info, return seconds"""
 | 
			
		||||
    time = 0
 | 
			
		||||
    words = time_line.split()
 | 
			
		||||
 | 
			
		||||
    if "hour" in words[1]:
 | 
			
		||||
        time += int(words[0]) * 60 * 60
 | 
			
		||||
    elif "minute" in words[1]:
 | 
			
		||||
        time += int(words[0]) * 60
 | 
			
		||||
    elif "second" in words[1]:
 | 
			
		||||
        time += int(words[0])
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        if "second" in words[3]:
 | 
			
		||||
            time += int(words[2])
 | 
			
		||||
        elif "minute" in words[3]:
 | 
			
		||||
            time += int(words[2]) * 60
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    return time
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_readable_duration(total_seconds: int) -> str:
 | 
			
		||||
    """Get readable time duration string from total seconds"""
 | 
			
		||||
    hours, rem = divmod(total_seconds, 3600)
 | 
			
		||||
    minutes, rem = divmod(rem, 60)
 | 
			
		||||
    seconds = rem
 | 
			
		||||
 | 
			
		||||
    output = []
 | 
			
		||||
    if hours > 0:
 | 
			
		||||
        output.append(f"{hours} hour{'s' if hours > 1 else ''}")
 | 
			
		||||
    if minutes > 0:
 | 
			
		||||
        output.append(f"{minutes} minute{'s' if minutes > 1 else ''}")
 | 
			
		||||
    if seconds > 0:
 | 
			
		||||
        output.append(f"{seconds} second{'s' if seconds > 1 else ''}")
 | 
			
		||||
 | 
			
		||||
    if len(output) > 1:
 | 
			
		||||
        output.insert(-1, "and")
 | 
			
		||||
 | 
			
		||||
    return " ".join(output)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_packages() -> list[CompiledPackage]:
 | 
			
		||||
    """Obtain compilation times for every compiled package"""
 | 
			
		||||
    x = subprocess.run(
 | 
			
		||||
        "sudo genlop -nlt",
 | 
			
		||||
        stdout=subprocess.PIPE,
 | 
			
		||||
        shell=True
 | 
			
		||||
    )
 | 
			
		||||
    txt = x.stdout.decode("utf-8")
 | 
			
		||||
 | 
			
		||||
    # Cleanup the output
 | 
			
		||||
    txt = txt.replace("* packages merged:\n\n", "")
 | 
			
		||||
    txt = txt.replace("merge time: ", "")
 | 
			
		||||
    txt = txt.replace("and ", "")
 | 
			
		||||
    txt = txt.replace(".", "")
 | 
			
		||||
 | 
			
		||||
    # Remove indents
 | 
			
		||||
    clean_lines = [line.lstrip() for line in txt.split("\n")]
 | 
			
		||||
    txt = "\n".join(clean_lines)
 | 
			
		||||
 | 
			
		||||
    # Store (package name, date, compile time) for each package
 | 
			
		||||
    packages = []
 | 
			
		||||
    for pkg_txt in txt.split("\n\n"):
 | 
			
		||||
        if len(pkg_txt) == 0:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        pkg_lines = pkg_txt.split("\n")
 | 
			
		||||
 | 
			
		||||
        date, name = pkg_lines[0].split(" >>> ")
 | 
			
		||||
        time = parse_time(pkg_lines[1])
 | 
			
		||||
        date = datetime.strptime(date, "%a %b %d %H:%M:%S %Y")
 | 
			
		||||
 | 
			
		||||
        pkg = CompiledPackage(name, date, time)
 | 
			
		||||
        packages.append(pkg)
 | 
			
		||||
 | 
			
		||||
    return packages
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_compile_time(package_amount: int) -> int:
 | 
			
		||||
    """Get compilation time of last n specified packages (seconds)"""
 | 
			
		||||
    packages = get_packages()
 | 
			
		||||
    last_packages = packages[-package_amount:]
 | 
			
		||||
    return sum(package.compile_time for package in last_packages)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    try:
 | 
			
		||||
        package_amt = int(sys.argv[1])
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        print("Missing required argument: package amount")
 | 
			
		||||
    except TypeError:
 | 
			
		||||
        print("Argument must be a number (package amount)")
 | 
			
		||||
    else:
 | 
			
		||||
        time = get_compile_time(package_amt)
 | 
			
		||||
        print(get_readable_duration(time))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,299 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# Parse arguments
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
ALL=0
 | 
			
		||||
VERBOSE=0
 | 
			
		||||
VERY_VERBOSE=0
 | 
			
		||||
VERY_VERY_VERBOSE=0
 | 
			
		||||
TEMP_SHOW=0
 | 
			
		||||
DRY_RUN=0
 | 
			
		||||
NO_CACHE=0
 | 
			
		||||
NO_DISPLAY=0
 | 
			
		||||
URGENCY="normal"
 | 
			
		||||
RESET=0
 | 
			
		||||
while [ "$1" ]; do
 | 
			
		||||
    case "$1" in
 | 
			
		||||
        -h | --help)
 | 
			
		||||
            cat << EOF
 | 
			
		||||
gh-notification is a tool that scrapes unread github notifications
 | 
			
		||||
It uses github-cli with meiji163/gh-notify addon to obtain the unread notifications
 | 
			
		||||
these are then parsed and sent as desktop notifications with notify-send
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
-a | --all: Also process already read notifications
 | 
			
		||||
-t | --temp-files: Show names of used temporary files for each notification
 | 
			
		||||
-v | --verbose: Shows info about what's happening.
 | 
			
		||||
-vv | --very-verbose: Implies --verbose, shows some more info about what's happening
 | 
			
		||||
-vvv | --very-very-verbose: Implies --very-verbose and --temp-files, shows even more details, usually just for debugging
 | 
			
		||||
-d | --dry-run: Run without sending any notificatinos, when ran with -r, this will also prevent any actual cache file removals
 | 
			
		||||
-nc | --no-cache: Ignore the cache and send all found notifications, even if they were already sent before.
 | 
			
		||||
-nd | --no-display: When the script is ran from headless mode (such as by crontab), this will still attempt to set the DISPLAY and send the desktop notification
 | 
			
		||||
-r | --reset: Resets notification cache (storing which notifications were already sent), skips notification sending, WARNING: removes the whole cache, regardless of '--all')
 | 
			
		||||
-u | --urgency [urgency-level]: pass over notify-send urgency attribute (low, normal, critical)
 | 
			
		||||
EOF
 | 
			
		||||
            exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
        -a | --all)
 | 
			
		||||
            ALL=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -t | --temp-files)
 | 
			
		||||
            TEMP_SHOW=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -v | --verbose)
 | 
			
		||||
            VERBOSE=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -vv | --very-verbose)
 | 
			
		||||
            VERBOSE=1
 | 
			
		||||
            VERY_VERBOSE=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -vvv | --very-very-verbose)
 | 
			
		||||
            VERBOSE=1
 | 
			
		||||
            TEMP_SHOW=1
 | 
			
		||||
            VERY_VERBOSE=1
 | 
			
		||||
            VERY_VERY_VERBOSE=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -d | --dry-run)
 | 
			
		||||
            DRY_RUN=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -nc | --no-cache)
 | 
			
		||||
            NO_CACHE=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -nd | --no-display)
 | 
			
		||||
            NO_DISPLAY=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -u | --urgency)
 | 
			
		||||
            URGENCY="$2"
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -r | --reset)
 | 
			
		||||
            RESET=1
 | 
			
		||||
            ;;
 | 
			
		||||
        * ) 
 | 
			
		||||
            echo "Unknown argument '$1', use -h or --help for help" 
 | 
			
		||||
            exit 1
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
    shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Perform cache resetting, if requested
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
if [ $RESET -eq 1 ]; then
 | 
			
		||||
    if [ $NO_CACHE -eq 1 ]; then
 | 
			
		||||
        echo "Can't ignore cache when resetting the cache..."
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    out="$(find /tmp -maxdepth 1 -name 'gh-notification-*' 2>/dev/null)"
 | 
			
		||||
    total="$(printf "%s\n" "$out" | wc -l)"
 | 
			
		||||
    # Since we always end with a newline (to count the last entry as a line), we always get
 | 
			
		||||
    # at least 1 as a total here, even if $out is empty. If we didn't use the \n, we'd always
 | 
			
		||||
    # get 0, even if there was a single line, since it wasn't ended with a newline. To figure
 | 
			
		||||
    # out whether there really is a line or not when we get a total of 1, we run character
 | 
			
		||||
    # amount check as well
 | 
			
		||||
    [ "$total" -eq 1 ] && [ "$(printf "%s" "$out" | wc -c)" -eq 0 ] && total=0
 | 
			
		||||
 | 
			
		||||
    if [ $total -gt 0 ]; then
 | 
			
		||||
        # Since the loop is running in a pipe, it can't modify variables, but we need to know
 | 
			
		||||
        # which files have failed to be removed, so to get that information, we store it in a
 | 
			
		||||
        # teporary file
 | 
			
		||||
        fail_files_file="$(mktemp)"
 | 
			
		||||
 | 
			
		||||
        printf "%s\n" "$out" | while read -r file_name; do
 | 
			
		||||
            # If desired, let user know about the found notification cache file
 | 
			
		||||
            if [ $VERY_VERBOSE -eq 1 ] || [ $TEMP_SHOW -eq 1 ]; then
 | 
			
		||||
                contents="$(cat "$file_name")"
 | 
			
		||||
                title="$(printf "%s" "$contents" | awk -F '~@~' '{ print $1 }')"
 | 
			
		||||
 | 
			
		||||
                echo "Found cache tempfile: '$file_name' - $title"
 | 
			
		||||
                if [ $VERY_VERY_VERBOSE -eq 1 ]; then 
 | 
			
		||||
                    description="$(printf "%s" "$contents" | awk -F '~@~' '{ print $2 }')"
 | 
			
		||||
                    echo "Notification description: $description"
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [ $DRY_RUN -ne 1 ]; then
 | 
			
		||||
                # In case `rm` fails, keep track of which files it failed on
 | 
			
		||||
                if ! rm "$file_name" 2>/dev/null; then
 | 
			
		||||
                    printf "%s\n" "$file_name" >> "$fail_files_file"
 | 
			
		||||
                fi
 | 
			
		||||
            else
 | 
			
		||||
                [ $VERY_VERY_VERBOSE -eq 1 ] && echo "Tempfile removal skipped (dry-run)"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            # Add a new-line separator on very very verbose to group prints from each iteration
 | 
			
		||||
            [ $VERY_VERY_VERBOSE -eq 1 ] && echo ""
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        # Recover failed files from the temporary file
 | 
			
		||||
        failed_files="$(cat "$fail_files_file")"
 | 
			
		||||
        failed="$(printf "%s" "$fail_files_file" | wc -l)"
 | 
			
		||||
        rm "$fail_files_file"
 | 
			
		||||
 | 
			
		||||
        if [ $VERBOSE -eq 1 ]; then
 | 
			
		||||
            echo "Notification cache was reset."
 | 
			
		||||
            removed_count="$(("$total"-"$failed"))"
 | 
			
		||||
            if [ $DRY_RUN -eq 1 ]; then
 | 
			
		||||
                echo "Removed $removed_count files (dry-run: no files were actually removed)"
 | 
			
		||||
            else
 | 
			
		||||
                echo "Removed $removed_count files"
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # If some cache files were'nt removed successfully, inform the user about it
 | 
			
		||||
        # regardless of verbosity, this shouldn't go silent, even though it may be fine
 | 
			
		||||
        if [ "$failed" -gt 0 ]; then
 | 
			
		||||
            echo "WARNING: Failed to remove $failed files."
 | 
			
		||||
            echo "You probably don't have permission to remove these."
 | 
			
		||||
            echo "Perhaps these were made by someone else? If so, you can ignore this warning."
 | 
			
		||||
            if [ $VERBOSE -eq 0 ]; then
 | 
			
		||||
                echo "Run with --verbose to show exactly which files weren't removed."
 | 
			
		||||
            else
 | 
			
		||||
                echo "These are:"
 | 
			
		||||
                echo "$failed_files"
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        [ $VERBOSE -eq 1 ] && echo "No cache files found, nothing to reset"
 | 
			
		||||
    fi
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Helper functins
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
# This runs notify-send, and if NO_DISPLAY is set and we're running in headless
 | 
			
		||||
# mode, this will still try to send the notification by manually setting DISPLAY
 | 
			
		||||
# This also has a special handle that checks if dunst is the notification daemon
 | 
			
		||||
# in which case instead of using notify-send, we use dunstify to send the 
 | 
			
		||||
# notification, with which we can also specify some more values.
 | 
			
		||||
send_notify() {
 | 
			
		||||
    if [ $NO_DISPLAY -eq 1 ]; then
 | 
			
		||||
        XDG_RUNTIME_DIR="/run/user/$(id -u)" \
 | 
			
		||||
        DISPLAY=:0 \
 | 
			
		||||
        notify-send --app-name=github-notification --urgency="$URGENCY" "$1" "$2"
 | 
			
		||||
    else
 | 
			
		||||
        notify-send --app-name=github-notification --urgency="$URGENCY" "$1" "$2"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Obtain notifications and show them, if they weren't showed (aren't in cache) already
 | 
			
		||||
# ------------------------------------------------------------------------------------
 | 
			
		||||
# Request unread notifications with gh-notify extension for github-cli
 | 
			
		||||
[ "$ALL" -eq 1 ] && out="$(gh notify -s -a)" || out="$(gh notify -s)"
 | 
			
		||||
total="$(printf "%s\n" "$out" | wc -l)"
 | 
			
		||||
# Since we always end with a newline (to count the last entry as a line), we always get
 | 
			
		||||
# at least 1 as a total here, even if $out is empty. If we didn't use the \n, we'd always
 | 
			
		||||
# get 0, even if there was a single line, since it wasn't ended with a newline. To figure
 | 
			
		||||
# out whether there really is a line or not when we get a total of 1, we run character
 | 
			
		||||
# amount check as well
 | 
			
		||||
[ "$total" -eq 1 ] && [ "$(printf "%s" "$out" | wc -c)" -eq 0 ] && total=0
 | 
			
		||||
 | 
			
		||||
# Only run if we actually found some notifications
 | 
			
		||||
if [ "$total" -gt 0 ]; then
 | 
			
		||||
    # Since the loop is running in a pipe, it can't modify variables, but we need to know
 | 
			
		||||
    # how many notifications were sent, so to ge that information, we store it in a
 | 
			
		||||
    # temporary file
 | 
			
		||||
    sent_count_file="$(mktemp)"
 | 
			
		||||
    printf "0" > "$sent_count_file"
 | 
			
		||||
 | 
			
		||||
    # Go through each notification, one by one
 | 
			
		||||
    printf "%s\n" "$out" | while read -r line; do
 | 
			
		||||
        # Parse out the data from given output lines
 | 
			
		||||
        issue_type="$(echo "$line" | awk '{print $4}' | sed 's/\x1b\[[0-9;]*m//g')"
 | 
			
		||||
        repo_id="$(echo "$line" | awk '{print $3}' | sed 's/\x1b\[[0-9;]*m//g')"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if [ "$issue_type" == "PullRequest" ]; then
 | 
			
		||||
            issue_id="$(echo "$line" | awk '{print $5}' | sed 's/\x1b\[[0-9;]*m//g' | cut -c2-)"
 | 
			
		||||
            description="$(echo "$line" | awk '{for (i=6; i<NF; i++) printf $i " "; print $NF}' | sed 's/\x1b\[[0-9;]*m//g')"
 | 
			
		||||
            name="$repo_id ($issue_type #$issue_id)"
 | 
			
		||||
 | 
			
		||||
            url="https://github.com/$repo_id/pull/$issue_id"
 | 
			
		||||
        elif [ "$issue_type" == "Issue" ]; then
 | 
			
		||||
            issue_id="$(echo "$line" | awk '{print $5}' | sed 's/\x1b\[[0-9;]*m//g' | cut -c2-)"
 | 
			
		||||
            description="$(echo "$line" | awk '{for (i=6; i<NF; i++) printf $i " "; print $NF}' | sed 's/\x1b\[[0-9;]*m//g')"
 | 
			
		||||
            name="$repo_id ($issue_type #$issue_id)"
 | 
			
		||||
 | 
			
		||||
            url="https://github.com/$repo_id/issues/$issue_id"
 | 
			
		||||
        elif [ "$issue_type" == "Release" ]; then
 | 
			
		||||
            # There's no issue ID with github releases, they just have a title
 | 
			
		||||
            # this means if the name is the same, they will be treated as the same release
 | 
			
		||||
            # and they could end up being ignored, this could be fixed by using github API and
 | 
			
		||||
            # searching for that release's commit, but that's too much work here for little benefit
 | 
			
		||||
            description="$(echo "$line" | awk '{for (i=5; i<NF; i++) printf $i " "; print $NF}' | sed 's/\x1b\[[0-9;]*m//g')"
 | 
			
		||||
            name="$repo_id ($issue_type)"
 | 
			
		||||
 | 
			
		||||
            # Because we don't know the tag or commit ID, best we can do is use the page for all releases
 | 
			
		||||
            # the new release will be the first one there anyway
 | 
			
		||||
            url="https://github.com/$repo_id/releases"
 | 
			
		||||
        else
 | 
			
		||||
            echo "Unknown issue type: '$issue_type'!"
 | 
			
		||||
            echo "Can't construct URL, falling back to just repository URL."
 | 
			
		||||
            echo "Please report this issue to ItsDrike/dotfiles repository."
 | 
			
		||||
            url="https://github.com/$repo_id"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        [ $VERY_VERBOSE -eq 1 ] && echo "Found notification $name"
 | 
			
		||||
        [ $VERY_VERY_VERBOSE -eq 1 ] && echo "Description: $description"
 | 
			
		||||
        [ $VERY_VERY_VERBOSE -eq 1 ] && echo "Constructed url: $url"
 | 
			
		||||
 | 
			
		||||
        # Create hash from the name and description and use it to construct
 | 
			
		||||
        # a path to a temporary file
 | 
			
		||||
        # To keep this POSIX compliant, we can't use <<< to feed a string to the
 | 
			
		||||
        # sum function, so we're using another temporary file which is then removed
 | 
			
		||||
        temp_file="$(mktemp)"
 | 
			
		||||
        printf "$name$description" > "$temp_file"
 | 
			
		||||
        hashsum="$(sum < "$temp_file" | cut -f 1 -d ' ')"
 | 
			
		||||
        rm "$temp_file"
 | 
			
		||||
 | 
			
		||||
        tmpname="/tmp/gh-notification-$hashsum"
 | 
			
		||||
        [ $TEMP_SHOW -eq 1 ] && echo "Tempfile: $tmpname"
 | 
			
		||||
 | 
			
		||||
        # If the temporary file is already present, this notification was already
 | 
			
		||||
        # send and we don't want to re-send it
 | 
			
		||||
 | 
			
		||||
        # Only sent the notification if it wasn't already cached (doesn't have temp file)
 | 
			
		||||
        # this avoids resending the same notifications
 | 
			
		||||
        if [ ! -e "$tmpname" ] || [ $NO_CACHE -eq 1 ]; then
 | 
			
		||||
            if [ $DRY_RUN -eq 1 ]; then
 | 
			
		||||
                [ $VERY_VERBOSE -eq 1 ] && echo "Sending notification (dry-run, no actual notification was sent)"
 | 
			
		||||
            else
 | 
			
		||||
                [ $VERY_VERBOSE -eq 1 ] && echo "Sending notification"
 | 
			
		||||
                send_notify "$name" "$description <$url>"
 | 
			
		||||
                # Create the tempfile so that in the next run, we won't resend this notification again
 | 
			
		||||
                # NOTE: We're storing the name and description into this file to make it easier
 | 
			
		||||
                # to figure out what notification the tempfile belongs to, with ~@~ separator
 | 
			
		||||
                printf "%s~@~%s" "$name" "$description" > "$tmpname"
 | 
			
		||||
            fi
 | 
			
		||||
            # Keep track of how many notifications were sent (didn't have a cache file)
 | 
			
		||||
            sent="$(cat "$sent_count_file")"
 | 
			
		||||
            sent="$(("$sent"+1))"
 | 
			
		||||
            printf "%s" "$sent" > "$sent_count_file"
 | 
			
		||||
        else
 | 
			
		||||
            [ $VERY_VERBOSE -eq 1 ] && echo "Skipping (cached) - notification already sent"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # Add a new-line separator on very verbose to group prints from each iteration
 | 
			
		||||
        [ $VERY_VERBOSE -eq 1 ] && echo ""
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # Recover amount of sent notifications from the temporary file
 | 
			
		||||
    sent="$(cat "$sent_count_file")"
 | 
			
		||||
    rm "$sent_count_file"
 | 
			
		||||
 | 
			
		||||
    if [ $VERBOSE -eq 1 ]; then
 | 
			
		||||
        unsent="$(("$total"-"$sent"))"
 | 
			
		||||
        if [ "$sent" -eq "$total" ]; then
 | 
			
		||||
            echo "Found and sent $total new notifications"
 | 
			
		||||
        elif [ "$unsent" -eq "$total" ]; then
 | 
			
		||||
            echo "Found $total notifications, all of which were already sent (no new notifications to send)"
 | 
			
		||||
        else
 | 
			
		||||
            echo "Found $total notifications, of which $sent were new and sent ($unsent were skipped - cached/already sent)"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    [ $VERBOSE -eq 1 ] && echo "No new notifications"
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
if [ -n "$DISPLAY" ]; then
 | 
			
		||||
  export FIFO_UEBERZUG="${TMPDIR:-/tmp}/lf-ueberzug-$$"
 | 
			
		||||
 | 
			
		||||
  cleanup() {
 | 
			
		||||
    exec 3>&-
 | 
			
		||||
    rm "$FIFO_UEBERZUG"
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  mkfifo "$FIFO_UEBERZUG"
 | 
			
		||||
  ueberzug layer -s <"$FIFO_UEBERZUG" &
 | 
			
		||||
  exec 3>"$FIFO_UEBERZUG"
 | 
			
		||||
  trap cleanup EXIT
 | 
			
		||||
 | 
			
		||||
  if ! [ -d "$HOME/.cache/lf" ]; then
 | 
			
		||||
    mkdir -p "$HOME/.cache/lf"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  lf "$@" 3>&-
 | 
			
		||||
else
 | 
			
		||||
  exec lf "$@"
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
if [ "$1" = "start" ]; then
 | 
			
		||||
    MODE="start"
 | 
			
		||||
elif [ "$1" = "stop" ]; then
 | 
			
		||||
    MODE="stop"
 | 
			
		||||
elif [ "$1" = "toggle" ]; then
 | 
			
		||||
    if pidof -s xss-lock > /dev/null 2>&1; then
 | 
			
		||||
        MODE="stop"
 | 
			
		||||
    else
 | 
			
		||||
        MODE="start"
 | 
			
		||||
    fi
 | 
			
		||||
elif [ "$1" = "lock" ]; then
 | 
			
		||||
    MODE="lock"
 | 
			
		||||
else
 | 
			
		||||
    echo "Invalid command usage, use: lockscreen [start/stop/toggle/lock]"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$MODE" = "start" ]; then
 | 
			
		||||
    echo "Starting xss-lock"
 | 
			
		||||
    # Set X11 lockscreen delays (DPMS)
 | 
			
		||||
    xset s on
 | 
			
		||||
    xset s 600 10 # Dim screen after 10 minutes, lock 10s later
 | 
			
		||||
 | 
			
		||||
    # XSS lock with xsecurelock
 | 
			
		||||
    xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsecurelock &
 | 
			
		||||
elif [ "$MODE" = "stop" ]; then
 | 
			
		||||
    echo "Stopping xss-lock"
 | 
			
		||||
    # Remove X11 lockscreen delays (DPMS)
 | 
			
		||||
    xset s off
 | 
			
		||||
    # Stop XSS lock
 | 
			
		||||
    killall xss-lock
 | 
			
		||||
elif [ "$MODE" = "lock" ]; then
 | 
			
		||||
    # Send a DPMS trigger if xss-lock is running to inform it
 | 
			
		||||
    # about the lockstate, if it's not running, run xsecurelock directly
 | 
			
		||||
    if pidof -s xss-lock > /dev/null 2>&1; then
 | 
			
		||||
        echo "Locking screen - using DPMS (xss-lock active)"
 | 
			
		||||
        xset s activate
 | 
			
		||||
    else
 | 
			
		||||
        echo "Locking screen - running xsecurelock directly (xss-lock isn't running)"
 | 
			
		||||
        xsecurelock
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,30 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# This script does the following:
 | 
			
		||||
#   Run by itself, set the wallpaper
 | 
			
		||||
#   If given a file, set that as the new wallpaper
 | 
			
		||||
#   If given a directory, recursively choose a random file in it.
 | 
			
		||||
 | 
			
		||||
# Location of the symlink to wallpaper image
 | 
			
		||||
bgloc="${XDG_DATA_HOME:-$HOME/.local/share}/background"
 | 
			
		||||
 | 
			
		||||
trueloc="$(readlink -f "$1")" &&
 | 
			
		||||
case "$(file --mime-type -b "$trueloc")" in
 | 
			
		||||
	image/* )
 | 
			
		||||
        ln -sf "$(readlink -f "$1")" "$bgloc"
 | 
			
		||||
        notify-send -i "$bgloc" "Changing wallpaper..."
 | 
			
		||||
        ;;
 | 
			
		||||
	inode/directory )
 | 
			
		||||
        randimg="$(find -L $trueloc -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)"
 | 
			
		||||
        echo $randimg
 | 
			
		||||
        ln -sf "$randimg" "$bgloc"
 | 
			
		||||
        notify-send -i "$bgloc" "Random Wallpaper chosen."
 | 
			
		||||
        ;;
 | 
			
		||||
	*)
 | 
			
		||||
        notify-send "Error" "Not a valid image."
 | 
			
		||||
        exit 1
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Use xwallpaper to set the background
 | 
			
		||||
xwallpaper --zoom "$bgloc"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
#original artwork by http://www.sanderfocus.nl/#/portfolio/tech-heroes
 | 
			
		||||
#converted to shell by #nixers @ irc.unix.chat
 | 
			
		||||
 | 
			
		||||
cat << 'eof'
 | 
			
		||||
                     [38;5;255m,_ ,_==▄▂[0m
 | 
			
		||||
                  [38;5;255m,  ▂▃▄▄▅▅[48;5;240m▅[48;5;20m▂[48;5;240m▅¾[0m.            [38;5;199m/    [38;5;20m/[0m
 | 
			
		||||
                   [38;5;255m[48;5;20m▄[0m[38;5;255m[48;5;199m▆[38;5;16m[48;5;255m<´  [38;5;32m"[38;5;34m»[38;5;255m▓▓[48;5;32m▓[48;5;240m%[0m\       [38;5;199m/ [38;5;20m/   [38;5;45m/ [38;5;118m/[0m
 | 
			
		||||
                 [38;5;255m,[38;5;255m[48;5;240m▅[38;5;16m[48;5;255m7"     [38;5;160m´[38;5;34m>[38;5;255m[48;5;39m▓▓[38;5;199m[48;5;255m▓[0m[38;5;255m%   [38;5;20m/  [38;5;118m/ [38;5;199m> [38;5;118m/ [38;5;199m>[38;5;255m/[38;5;45m%[0m
 | 
			
		||||
                 [38;5;255m▐[48;5;240m[38;5;255m¶[48;5;240m[38;5;255m▓[48;5;255m       [38;5;196m,[38;5;34m»[48;5;201m[38;5;255m▓▓[0m[38;5;255m¾´[0m  [38;5;199m/[38;5;255m> %[38;5;199m/[38;5;118m%[38;5;255m/[38;5;199m/ [38;5;45m/  [38;5;199m/[0m
 | 
			
		||||
                  [38;5;255m[48;5;240m▓[48;5;255m[38;5;16m▃[48;5;16m[38;5;255m▅▅[38;5;16m[48;5;255m▅▃,,[38;5;32m▄[38;5;16m▅[38;5;255m[48;5;16m▅▅[38;5;255m[48;5;20mÆ[0m[38;5;255m\[0m[38;5;20m/[38;5;118m/[38;5;255m /[38;5;118m/[38;5;199m/[38;5;255m>[38;5;45m// [38;5;255m/[38;5;118m>[38;5;199m/   [38;5;20m/[0m
 | 
			
		||||
                 [48;5;20m[38;5;255mV[48;5;255m[38;5;16m║[48;5;20m[38;5;255m«[0m[38;5;255m¼.;[48;5;240m[38;5;255m→[48;5;255m[38;5;16m ║[0m[38;5;255m<«.,[48;5;25m[38;5;255m`[48;5;240m=[0m[38;5;20m/[38;5;199m/ [38;5;255m/>[38;5;45m/[38;5;118m/[38;5;255m%/[38;5;199m% / [38;5;20m/[0m
 | 
			
		||||
               [38;5;20m//[48;5;255m[38;5;16m╠<´ -²,)[48;5;16m[38;5;255m(▓[48;5;255m[38;5;16m~"-[38;5;199m╝/[0m[38;5;255m¾[0m[38;5;199m/ [38;5;118m%[38;5;255m/[38;5;118m>[38;5;45m/ [38;5;118m/[38;5;199m>[0m
 | 
			
		||||
           [38;5;20m/ / [38;5;118m/ [48;5;20m[38;5;255m▐[48;5;240m[38;5;16m%[48;5;255m -./▄▃▄[48;5;16m[38;5;255m▅[48;5;255m[38;5;16m▐[48;5;255m[38;5;16m, [38;5;199m/[48;5;199m[38;5;255m7[0m[38;5;20m/[38;5;199m/[38;5;255m;/[38;5;199m/[38;5;118m% [38;5;20m/ /[0m
 | 
			
		||||
           [38;5;20m/ [38;5;199m/[38;5;255m/[38;5;45m/[38;5;118m/[38;5;255m[48;5;240m`[48;5;20m[38;5;255m▌[48;5;20m[38;5;255m▐[48;5;255m[38;5;16m %z[0m[38;5;255mWv xX[48;5;20m[38;5;255m▓[48;5;34m[38;5;255m▇[48;5;199m[38;255m▌[0m[38;5;20m/[38;5;199m/[38;5;255m&;[38;5;20m% [38;5;199m/ [38;5;20m/[0m
 | 
			
		||||
       [38;5;20m/ / [38;5;255m/ [38;5;118m%[38;5;199m/[38;5;255m/%/[48;5;240m[38;5;255m¾[48;5;255m[38;5;16m½´[38;5;255m[48;5;16m▌[0m[38;5;246m▃▄[38;5;255m▄▄[38;5;246m▄▃▃[0m[48;5;16m[38;5;255m▐[38;5;255m[48;5;199m¶[48;5;20m[38;5;255m\[0m[38;5;20m/[0m[48;5;255m[38;5;240m&[0m [38;5;20m/[0m
 | 
			
		||||
         [38;5;199m<[38;5;118m/ [38;5;45m/[38;5;255m</[38;5;118m%[38;5;255m/[38;5;45m/[38;5;255m`[48;5;16m▓[48;5;255m[38;5;16m![48;5;240m[38;5;255m%[48;5;16m[38;5;255m▓[0m[38;5;255m%[48;5;240m[38;5;255m╣[48;5;240m[38;5;255;╣[0m[38;5;255mW[0m[38;5;250mY<Y)[48;5;255m[38;5;16my&[0m[38;5;255m/`[48;5;240m\[0m
 | 
			
		||||
     [38;5;20m/ [38;5;199m/ [38;5;199m%[38;5;255m/%[38;5;118m/[38;5;45m/[38;5;255m<[38;5;118m/[38;5;199m%[38;5;45m/[38;5;20m/[48;5;240m[38;5;255m\[38;5;16m[48;5;255mi7; ╠N[0m[38;5;246m>[38;5;255m)VY>[48;5;240m[38;5;255m7[0m[38;5;255m;  [38;5;255m[48;5;240m\[0m[38;5;255m_[0m    [38;5;255mUNIX IS VERY SIMPLE [38;5;45mIT JUST NEEDS A[0m
 | 
			
		||||
  [38;5;20m/   [38;5;255m/[38;5;118m<[38;5;255m/ [38;5;45m/[38;5;255m/<[38;5;199m/[38;5;20m/[38;5;199m/[38;5;20m<[38;5;255m_/%\[38;5;255m[48;5;16m▓[48;5;255m[38;5;16m  V[0m[38;5;255m%[48;5;255m[38;5;16mW[0m[38;5;255m%£)XY[0m  [38;5;240m_/%[38;5;255m‾\_,[0m   [38;5;45mGENIUS TO UNDERSTAND ITS SIMPLICITY[38;5;255m[0m
 | 
			
		||||
   [38;5;199m/ [38;5;255m/ [38;5;199m/[38;5;255m/[38;5;118m%[38;5;199m/[48;5;240m[38;5;255m_,=-[48;5;20m-^[0m[38;5;255m/%/%%[48;5;255m[38;5;16m\¾%[0m[38;5;255m¶[0m[48;5;255m[38;5;16m%[0m[38;5;255m%}[0m    [38;5;240m/%%%[38;5;20m%%[38;5;240m%;\,[0m
 | 
			
		||||
    [38;5;45m%[38;5;20m/[38;5;199m< [38;5;20m/[48;5;20m[38;5;255m_/[48;5;240m [0m[38;5;255m%%%[38;5;240m%%[38;5;20m;[38;5;255mX[38;5;240m%[38;5;20m%[38;5;255m\%[38;5;240m%;,     _/%%%;[38;5;20m,[38;5;240m     \[0m
 | 
			
		||||
   [38;5;118m/ [38;5;20m/ [38;5;240m%[38;5;20m%%%%[38;5;240m%;,    [38;5;255m\[38;5;240m%[38;5;20m%[38;5;255ml[38;5;240m%%;// _/[38;5;20m%;,[0m [38;5;234mdmr[0m
 | 
			
		||||
 [38;5;20m/    [38;5;240m%[38;5;20m%%;,[0m         [38;5;255m<[38;5;20m;[38;5;240m\-=-/ /[0m
 | 
			
		||||
     [38;5;20m;,[0m                [38;5;240ml[0m
 | 
			
		||||
eof
 | 
			
		||||
| 
						 | 
				
			
			@ -1,54 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
set -e
 | 
			
		||||
if [[ $(id -u) -ne 0 ]] ; then echo "Please run as root" ; exit 1 ; fi
 | 
			
		||||
 | 
			
		||||
echo "Setting up Noto Emoji font..."
 | 
			
		||||
# Install  noto-fonts-emoji repository as the basic emoji font
 | 
			
		||||
pacman -S noto-fonts-emoji --needed
 | 
			
		||||
# Install powerline-fonts for powerline statusline
 | 
			
		||||
pacman -S powerline-fonts --needed
 | 
			
		||||
echo "Font packages installed, setting up font-config"
 | 
			
		||||
# Make sure noto emojis are preferred font /etc/fonts/local.conf
 | 
			
		||||
# another way to do this would be to manually figure out the number and use /etc/fonts/conf.d/01-notosans.conf
 | 
			
		||||
# note that the `01` might be too agressive and override other fonts, it is therefore easier to just use `local.conf`
 | 
			
		||||
# if you still want to use the manual numbered representation, make sure to store the file into /etc/fonts/conf.avail/XX-notosans.conf
 | 
			
		||||
# from which you will then make a symlink pointing to /etc/fonts/conf.d (same name)
 | 
			
		||||
echo '<?xml version="1.0"?>
 | 
			
		||||
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 | 
			
		||||
<fontconfig>
 | 
			
		||||
 <alias>
 | 
			
		||||
   <family>sans-serif</family>
 | 
			
		||||
   <prefer>
 | 
			
		||||
     <family>Noto Sans</family>
 | 
			
		||||
     <family>Noto Color Emoji</family>
 | 
			
		||||
     <family>Noto Emoji</family>
 | 
			
		||||
     <family>DejaVu Sans</family>
 | 
			
		||||
   </prefer>
 | 
			
		||||
 </alias>
 | 
			
		||||
 | 
			
		||||
 <alias>
 | 
			
		||||
   <family>serif</family>
 | 
			
		||||
   <prefer>
 | 
			
		||||
     <family>Noto Serif</family>
 | 
			
		||||
     <family>Noto Color Emoji</family>
 | 
			
		||||
     <family>Noto Emoji</family>
 | 
			
		||||
     <family>DejaVu Serif</family>
 | 
			
		||||
   </prefer>
 | 
			
		||||
 </alias>
 | 
			
		||||
 | 
			
		||||
 <alias>
 | 
			
		||||
  <family>monospace</family>
 | 
			
		||||
  <prefer>
 | 
			
		||||
    <family>Noto Mono</family>
 | 
			
		||||
    <family>Noto Color Emoji</family>
 | 
			
		||||
    <family>Noto Emoji</family>
 | 
			
		||||
    <family>DejaVu Sans Mono</family>
 | 
			
		||||
   </prefer>
 | 
			
		||||
 </alias>
 | 
			
		||||
</fontconfig>
 | 
			
		||||
 | 
			
		||||
' > /etc/fonts/local.conf
 | 
			
		||||
# Update font cache
 | 
			
		||||
fc-cache -f
 | 
			
		||||
echo "Noto Emoji Font installed! You will need to restart application to see changes."
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Fix camera autofocus and exposure
 | 
			
		||||
v4l2-ctl -d /dev/video0 --set-ctrl=focus_auto=0
 | 
			
		||||
v4l2-ctl -d /dev/video0 --set-ctrl=exposure_auto=3
 | 
			
		||||
v4l2-ctl -d /dev/video0 --set-ctrl=sharpness=150
 | 
			
		||||
v4l2-ctl -d /dev/video0 --set-ctrl=exposure_auto_priority=0
 | 
			
		||||
| 
						 | 
				
			
			@ -1,21 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# This script will create a virtual microphone for PulseAudio to use and set it as the default device.
 | 
			
		||||
 | 
			
		||||
# Load the "module-pipe-source" module to read audio data from a FIFO special file.
 | 
			
		||||
echo "Creating virtual microphone."
 | 
			
		||||
pactl load-module module-pipe-source source_name=virtmic file=$HOME/.config/pulse/audioFiles/virtmic format=s16le rate=16000 channels=1
 | 
			
		||||
 | 
			
		||||
# Set the virtmic as the default source device.
 | 
			
		||||
echo "Set the virtual microphone as the default device."
 | 
			
		||||
pactl set-default-source virtmic
 | 
			
		||||
 | 
			
		||||
# Create a file that will set the default source device to virtmic for all
 | 
			
		||||
PulseAudio client applications.
 | 
			
		||||
echo "default-source = virtmic" > $HOME/.config/pulse/client.conf
 | 
			
		||||
 | 
			
		||||
# Write the audio file to the named pipe virtmic. This will block until the named pipe is read.
 | 
			
		||||
echo "Writing audio file to virtual microphone."
 | 
			
		||||
while true; do
 | 
			
		||||
    ffmpeg -re -i input.wav -f s16le -ar 16000 -ac 1 - > $HOME/.config/pulse/audioFiles/virtmic
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Uninstall the virtual microphone.
 | 
			
		||||
 | 
			
		||||
pactl unload-module module-pipe-source
 | 
			
		||||
rm $HOME/.config/pulse/client.conf
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,40 +0,0 @@
 | 
			
		|||
/* usbreset -- send a USB port reset to a USB device */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/usbdevice_fs.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    const char *filename;
 | 
			
		||||
    int fd;
 | 
			
		||||
    int rc;
 | 
			
		||||
 | 
			
		||||
    if (argc != 2) {
 | 
			
		||||
        fprintf(stderr, "Usage: usbreset device-filename\n");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    filename = argv[1];
 | 
			
		||||
 | 
			
		||||
    fd = open(filename, O_WRONLY);
 | 
			
		||||
    if (fd < 0) {
 | 
			
		||||
        perror("Error opening output file");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("Resetting USB device %s\n", filename);
 | 
			
		||||
    rc = ioctl(fd, USBDEVFS_RESET, 0);
 | 
			
		||||
    if (rc < 0) {
 | 
			
		||||
        perror("Error in ioctl");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    printf("Reset successful\n");
 | 
			
		||||
 | 
			
		||||
    close(fd);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
# Enter passsword via terminal, instead of using a graphical window
 | 
			
		||||
pinentry-mode loopback
 | 
			
		||||
# Specify my default key that will be used for signing
 | 
			
		||||
default-key 7583ABA897FC6728DCAF823FB014E761034AF742
 | 
			
		||||
# Specify my preferred default keyserver
 | 
			
		||||
keyserver keys.openpgp.org
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
.config/mozilla
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
.config/pki
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
.config/x11/xprofile
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
.config/zsh/.zshenv
 | 
			
		||||
							
								
								
									
										187
									
								
								packages.yaml
									
										
									
									
									
								
							
							
						
						
									
										187
									
								
								packages.yaml
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,187 +0,0 @@
 | 
			
		|||
pacman:
 | 
			
		||||
    # Common
 | 
			
		||||
    - base-devel        # A set of tools needed for building pkgs
 | 
			
		||||
    - git               # Version control system
 | 
			
		||||
    - neovim            # Text editor (modern version of VIM)
 | 
			
		||||
    - sudo              # Execute commands as root from unprivilledged user
 | 
			
		||||
    - networkmanager    # Easy way to manage network connections, especially for WiFi
 | 
			
		||||
    - man-db            # A utility for reading manpages
 | 
			
		||||
    - rsync             # Fast tool for copying/syncing files
 | 
			
		||||
    - cronie            # Run programs at specified time
 | 
			
		||||
    - zsh               # Modern system shell
 | 
			
		||||
 | 
			
		||||
    # System
 | 
			
		||||
    #- kexec-tools       # Kexec allows directly booting into a new kernel
 | 
			
		||||
 | 
			
		||||
    # CLI
 | 
			
		||||
    - exa             # Colored LS
 | 
			
		||||
    - bat             # Colored cat with tons of cool options
 | 
			
		||||
    - dust            # User readable du to find biggest dirs/files
 | 
			
		||||
    - tldr            # Shorter help pages, if man is too long
 | 
			
		||||
    - hyperfine       # Command benchmark (times command executions)
 | 
			
		||||
    - abduco          # Terminal session manager
 | 
			
		||||
    - mlocate         # System indexing and quick file searching
 | 
			
		||||
    - pkgfile         # Pacman metadata explorer
 | 
			
		||||
    - pacman-contrib  # Includes multiple additional tools related to pacman
 | 
			
		||||
    - reflector       # Tool to manage pacman mirror list
 | 
			
		||||
    - lshw            # List hardware components and their attributes
 | 
			
		||||
    - lsof            # List open files for running Unix process
 | 
			
		||||
    - trash-cli       # Trash interraction (rather than permanent removal)
 | 
			
		||||
    #- libfaketime     # Simulate different time for single command
 | 
			
		||||
    #- figlet          # generate ascii text banners in terminal
 | 
			
		||||
    #- neofetch        # Show information about system in a terminal
 | 
			
		||||
    #- onefetch        # Show information about git repo in a terminal
 | 
			
		||||
    #- asciinema       # Record terminal with copy-able playback
 | 
			
		||||
 | 
			
		||||
    # TUI
 | 
			
		||||
    - ncdu      # Find largest folders (size)
 | 
			
		||||
    - calcurse  # Terminal calendar with todo
 | 
			
		||||
    - bpytop    # Modern system resource monitor
 | 
			
		||||
    - w3m       # Terminal text-only web browser
 | 
			
		||||
    - newsboat  # Terminal RSS feed reader
 | 
			
		||||
 | 
			
		||||
    # Networking/Internet
 | 
			
		||||
    - httpie          # Obtaining http info from webpages
 | 
			
		||||
    - dnsutils        # Tools for managing DNS
 | 
			
		||||
    - net-tools       # Configuration tools for linux networking
 | 
			
		||||
    - whois           # CLI for the WHOIS directory service (RFC 3912) protocol
 | 
			
		||||
    #- sshuttle        # Transparent proxy server that forwards all TCP packets over SSH
 | 
			
		||||
    #- vnstat          # Tool for monitoring network traffic (speed and total data transfered)
 | 
			
		||||
 | 
			
		||||
    # Media
 | 
			
		||||
    - imagemagick       # Terminal image manipulation
 | 
			
		||||
    - mediainfo         # Show info about media files (videos/photos)
 | 
			
		||||
    - youtube-dl        # Tool for easy downloading of youtube videos
 | 
			
		||||
    - ffmpegthumbs      # FFmpeg based thumbnail creator for videos
 | 
			
		||||
    - ffmpegthumbnailer # Ffmpeg based thumbnail creator for file mgrs
 | 
			
		||||
 | 
			
		||||
    # Security
 | 
			
		||||
    - arch-audit    # Find installed packgaes with vulnerabilities (Similar to pkg-audit)
 | 
			
		||||
    - firejail      # Sandboxing isolation tool
 | 
			
		||||
    - lynis         # Security and System auditing tool
 | 
			
		||||
    - rkhunter      # Check for the presence of rootkits and other unwanted tools.
 | 
			
		||||
    - apparmor      # Mandantoy Access Control using Linux Security Module
 | 
			
		||||
    - audit         # Collect system info about given events (requires audit=1 boot param)
 | 
			
		||||
    #- ufw          # Uncomplicated firewall (I prefer application level FW like opensnitch)
 | 
			
		||||
    #- clamav       # Anti-virus for Linux (usually only needed for servers)
 | 
			
		||||
 | 
			
		||||
    # WM/Xorg
 | 
			
		||||
    - xorg-server         # Xorg server implementation
 | 
			
		||||
    - xorg-xinit          # Simple way to start X
 | 
			
		||||
    - xorg-xrandr         # Manage multiple monitors in X
 | 
			
		||||
    - xorg-xsetroot       # Customize appearance of X root
 | 
			
		||||
    - xorg-xev            # Debug tool for printing contents of X events
 | 
			
		||||
    - xmonad              # Window Manager written in haskell
 | 
			
		||||
    - xmonad-contrib      # Additional tools for xmonad
 | 
			
		||||
    - xmobar              # Panel built for xmonad
 | 
			
		||||
    - xdotool             # X11 automation tool
 | 
			
		||||
    - trayer              # System tray standalone panel
 | 
			
		||||
    - xsel                # X11 clipboard manager (alternatively there's xclip)
 | 
			
		||||
    - clipmenu            # A simple clipboard manager using dmenu and xsel
 | 
			
		||||
    - xsecurelock         # Secure lockscreen
 | 
			
		||||
    - xss-lock            # Using external locker as X screensaver
 | 
			
		||||
    - xwallpaper          # Setting wallpaper in X
 | 
			
		||||
    - numlockx            # Enabling numlock from terminal (used in xprofile)
 | 
			
		||||
    - dunst               # Notification daemon
 | 
			
		||||
    - papirus-icon-theme  # Breeze inspired icon theme
 | 
			
		||||
    - gnome-themes-extra  # Gnome GTK themes (mainly Adwaita)
 | 
			
		||||
    #- redshift           # Adjust the color temperature of your system based on location
 | 
			
		||||
 | 
			
		||||
    # Audio
 | 
			
		||||
    - alsa-lib          # Implementation of Linux sound support
 | 
			
		||||
    - alsa-utils        # Utilities for alsa audio
 | 
			
		||||
    - pulseaudio        # General purpose sound server
 | 
			
		||||
    - pulseaudio-alsa   # ALSA configuration for PulseAudio
 | 
			
		||||
    - pulsemixer        # CLI and curses mixer for PulseAudio
 | 
			
		||||
 | 
			
		||||
    # GUI
 | 
			
		||||
    - alacritty         # Terminal Emulator
 | 
			
		||||
    - mpv               # Video player
 | 
			
		||||
    - nomacs            # Photo viewer
 | 
			
		||||
    - pcmanfm           # File manager
 | 
			
		||||
    - firefox           # Browser
 | 
			
		||||
    - flameshot         # Screenshot taking tool
 | 
			
		||||
    - obs-studio        # Advanced video recording tool
 | 
			
		||||
    - lxappearance      # GTK configuration
 | 
			
		||||
    - file-roller       # Archive manipulator (allows opening .zip/.rar/.tar/... easily)
 | 
			
		||||
    - ueberzug          # Embed images within a terminal
 | 
			
		||||
    - krita             # Image editor (gimp alternative)
 | 
			
		||||
    - discord           # Popular chat app
 | 
			
		||||
    - network-manager-applet  # NetworkManager trayer icon
 | 
			
		||||
 | 
			
		||||
    # Device mounting
 | 
			
		||||
    - udisks2       # Allows users to mount devices without root
 | 
			
		||||
    - udiskie       # Auto-mounter using udisks2
 | 
			
		||||
    - gvfs          # Allows using sftp:// in file managers like PcManFM
 | 
			
		||||
 | 
			
		||||
    # Fonts
 | 
			
		||||
    - libxft
 | 
			
		||||
    - ttf-hack
 | 
			
		||||
    - ttf-joypixels
 | 
			
		||||
    - noto-fonts
 | 
			
		||||
    - noto-fonts-cjk
 | 
			
		||||
    - noto-fonts-emoji
 | 
			
		||||
    - ttf-font-awesome
 | 
			
		||||
    - ttf-jetbrains-mono
 | 
			
		||||
 | 
			
		||||
    # Printer
 | 
			
		||||
    - cups          # Daemon for printing
 | 
			
		||||
    - hplip         # Tool to set-up HP printers
 | 
			
		||||
    - xsane         # Scanning
 | 
			
		||||
 | 
			
		||||
    # Bluetooth
 | 
			
		||||
    - bluez                 # Daemon for bluetooth protocol
 | 
			
		||||
    - bluz-utils            # CLI utility for managing bluetooth connections
 | 
			
		||||
    - blueman               # Graphical utility for managing bluetooth connections
 | 
			
		||||
    - pulseaudio-bluetooth  # Bluetooth speaker/headphone support for PulseAudio
 | 
			
		||||
 | 
			
		||||
    # Development
 | 
			
		||||
    - git-delta         # Neat tool for showing git diffs and resolving merges
 | 
			
		||||
    - codespell         # Spell checker for code files
 | 
			
		||||
    - github-cli        # Manage multiple GitHub features from terminal
 | 
			
		||||
    - pyenv             # Tool for easily managing python environments
 | 
			
		||||
    #- code              # Open sourced version of vscode (doesn't have good extensions support)
 | 
			
		||||
 | 
			
		||||
aur:
 | 
			
		||||
    # System
 | 
			
		||||
    - mkinitcpio-numlock  # Enable numlock in initramfs (before asking for encryption key)
 | 
			
		||||
    - topgrade            # A tool to update entire system (pacman, yay, pip, npm, git, neovim, ...)
 | 
			
		||||
 | 
			
		||||
    # CLI
 | 
			
		||||
    - pixterm     # Convert images to ANSI colored blocks
 | 
			
		||||
 | 
			
		||||
    # TUI
 | 
			
		||||
    - lf          # Terminal file manager (ranger-like)
 | 
			
		||||
 | 
			
		||||
    # Networking/Internet
 | 
			
		||||
    - ngrok       # Forward your localhost without ip recovery
 | 
			
		||||
    - ipinfo-cli  # Official cli tool for ipinfo (provides geolocation and other info about given IP)
 | 
			
		||||
 | 
			
		||||
    # Security
 | 
			
		||||
    - opensnitch  # Application level firewall with traffic monitoring (Alternatively, there's portmaster)
 | 
			
		||||
 | 
			
		||||
    # WM/Xorg
 | 
			
		||||
    #- picom-git                   # Git version of picom compositor
 | 
			
		||||
    - picom-ibhagwan-git          # Forked picom version with support for both rounded corner and dual_kawase blur
 | 
			
		||||
    - devour                      # WM agnostic window swallowing for terminals
 | 
			
		||||
    - xcursor-simp1e-breeze-snow  # Breeze cursor theme
 | 
			
		||||
 | 
			
		||||
    # GUI
 | 
			
		||||
    - spotify                 # Online music player
 | 
			
		||||
    - exodus                  # Software cryptocurrency wallet
 | 
			
		||||
    - qalculate-gtk-nognome   # Calculator with thousands of features, there's also less powerful kde default's kcalc
 | 
			
		||||
    #- mailspring-libre        # Beautiful and fast mail client without tracking
 | 
			
		||||
 | 
			
		||||
    # Misc
 | 
			
		||||
    #- scrcpy                  # A way of seeing and controlling phone through a pc
 | 
			
		||||
 | 
			
		||||
    # Fonts
 | 
			
		||||
    - nerd-fonts-complete
 | 
			
		||||
 | 
			
		||||
    # Development
 | 
			
		||||
    - visual-studio-code-bin  # Official vVsual Studio Code text editor for programmers
 | 
			
		||||
    #- code-marketplace        # Enable the offical MS vscode marketplace for 'code' (code-oss)
 | 
			
		||||
git:
 | 
			
		||||
    - https://aur.archlinux.org/yay-git.git # Pacman wrapper and AUR helper
 | 
			
		||||
github-cli:
 | 
			
		||||
  - meiji163/gh-notify
 | 
			
		||||
| 
						 | 
				
			
			@ -1,22 +0,0 @@
 | 
			
		|||
# Filter file for rsync based backups
 | 
			
		||||
# rsync needs to be ran with --filter 'dir-merge /.rsync-filter'
 | 
			
		||||
# argument to look through this filter file
 | 
			
		||||
- /dev/*
 | 
			
		||||
- /proc/*
 | 
			
		||||
- /sys/*
 | 
			
		||||
- /media/*
 | 
			
		||||
- /mnt/*
 | 
			
		||||
- /tmp/*
 | 
			
		||||
- /run/*
 | 
			
		||||
- /var/run/*
 | 
			
		||||
- /var/lock/*
 | 
			
		||||
- /var/lib/docker/*
 | 
			
		||||
- /var/lib/schroot/*
 | 
			
		||||
- /lost+found
 | 
			
		||||
- /data/*
 | 
			
		||||
- /DATA/*
 | 
			
		||||
- /cdrom/*
 | 
			
		||||
- /sdcard/*
 | 
			
		||||
- /swapfile
 | 
			
		||||
- /swap/*
 | 
			
		||||
- /home/*/.cache/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
[device-mac-randomization]
 | 
			
		||||
# "yes" is already the default for scanning
 | 
			
		||||
wifi.scan-rand-mac-address=yes
 | 
			
		||||
 | 
			
		||||
[connection-mac-randomization]
 | 
			
		||||
# Randomize MAC for every ethernet connection
 | 
			
		||||
ethernet.cloned-mac-address=random
 | 
			
		||||
# Generate a random MAC for each WiFi and associate the two permanently
 | 
			
		||||
wifi.cloned-mac-address=stable
 | 
			
		||||
 | 
			
		||||
# Opions:
 | 
			
		||||
# permanent: Use HardWare address
 | 
			
		||||
# preserve: Don’t change the MAC address of the device upon activation
 | 
			
		||||
# stable: Randomize once and associate it permanently with that network
 | 
			
		||||
# random: Randomize MAC for every connection
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue