diff --git a/.config/discord/settings.json b/.config/discord/settings.json deleted file mode 100644 index 82331d1..0000000 --- a/.config/discord/settings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "chromiumSwitches": {}, - "IS_MAXIMIZED": false, - "IS_MINIMIZED": false, - "WINDOW_BOUNDS": { - "x": 110, - "y": 68, - "width": 1283, - "height": 726 - }, - "SKIP_HOST_UPDATE": true -} \ No newline at end of file diff --git a/.config/hyfetch.json b/.config/hyfetch.json deleted file mode 100644 index 49251dd..0000000 --- a/.config/hyfetch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "preset": "rainbow", - "mode": "rgb", - "light_dark": "dark", - "lightness": 0.65, - "color_align": { - "mode": "horizontal", - "custom_colors": [], - "fore_back": null - }, - "backend": "fastfetch", - "args": null, - "distro": null, - "pride_month_shown": [], - "pride_month_disable": false -} \ No newline at end of file diff --git a/.config/keepmenu/config.ini b/.config/keepmenu/config.ini deleted file mode 100644 index d698c26..0000000 --- a/.config/keepmenu/config.ini +++ /dev/null @@ -1,13 +0,0 @@ -[dmenu] -dmenu_command = rofi -theme Arc-Dark -font 'hack 18' - -[dmenu_passphrase] -obscure = True -obscure_color = #222222 - -[database] -database_1 = /home/vylpes/Nextcloud/Passwords.kdbx -keyfile_1 = /home/vylpes/Documents/KeePass.keyx -pw_cache_period_min = 360 -autotype_default = {USERNAME}{TAB}{PASSWORD}{ENTER} - diff --git a/.config/mimeapps.list b/.config/mimeapps.list deleted file mode 100644 index f268490..0000000 --- a/.config/mimeapps.list +++ /dev/null @@ -1,10 +0,0 @@ -[Added Associations] - -[Removed Associations] - -[Default Applications] -application/pdf=firefox.desktop -image/jpeg=sxiv.desktop -image/png=sxiv.desktop -text/plain=nvim.desktop -video/mp4=mpv.desktop diff --git a/.config/nitrogen/bg-saved.cfg b/.config/nitrogen/bg-saved.cfg deleted file mode 100644 index a5da337..0000000 --- a/.config/nitrogen/bg-saved.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[xin_0] -file=/home/vylpes/Pictures/wallpaper.jpg -mode=0 -bgcolor=#000000 - -[xin_1] -file=/home/vylpes/Pictures/wallpaper.jpg -mode=0 -bgcolor=#000000 diff --git a/.config/nitrogen/nitrogen.cfg b/.config/nitrogen/nitrogen.cfg deleted file mode 100644 index 5e111ea..0000000 --- a/.config/nitrogen/nitrogen.cfg +++ /dev/null @@ -1,12 +0,0 @@ -[geometry] -posx=1930 -posy=47 -sizex=1898 -sizey=1021 - -[nitrogen] -view=icon -recurse=true -sort=alpha -icon_caps=false -dirs=/home/vylpes/Nextcloud/Pictures/Wallpapers; diff --git a/.config/todo/config b/.config/todo/config deleted file mode 100644 index 3801364..0000000 --- a/.config/todo/config +++ /dev/null @@ -1,98 +0,0 @@ -# === EDIT FILE LOCATIONS BELOW === - -# Your todo.txt directory (this should be an absolute path) -#export TODO_DIR="/Users/gina/Documents/todo" -export TODO_DIR=~/Nextcloud/Tasks - -# Your todo/done/report.txt locations -export TODO_FILE="$TODO_DIR/todo.txt" -export DONE_FILE="$TODO_DIR/done.txt" -export REPORT_FILE="$TODO_DIR/report.txt" - -# You can customize your actions directory location -#export TODO_ACTIONS_DIR="$HOME/.todo.actions.d" - -# == EDIT FILE LOCATIONS ABOVE === - -# === COLOR MAP === - -## Text coloring and formatting is done by inserting ANSI escape codes. -## If you have re-mapped your color codes, or use the todo.txt -## output in another output system (like Conky), you may need to -## over-ride by uncommenting and editing these defaults. -## If you change any of these here, you also need to uncomment -## the defaults in the COLORS section below. Otherwise, todo.txt -## will still use the defaults! - -# export BLACK='\\033[0;30m' -# export RED='\\033[0;31m' -# export GREEN='\\033[0;32m' -# export BROWN='\\033[0;33m' -# export BLUE='\\033[0;34m' -# export PURPLE='\\033[0;35m' -# export CYAN='\\033[0;36m' -# export LIGHT_GREY='\\033[0;37m' -# export DARK_GREY='\\033[1;30m' -# export LIGHT_RED='\\033[1;31m' -# export LIGHT_GREEN='\\033[1;32m' -# export YELLOW='\\033[1;33m' -# export LIGHT_BLUE='\\033[1;34m' -# export LIGHT_PURPLE='\\033[1;35m' -# export LIGHT_CYAN='\\033[1;36m' -# export WHITE='\\033[1;37m' -# export DEFAULT='\\033[0m' - -# === COLORS === - -## Uncomment and edit to override these defaults. -## Reference the constants from the color map above, -## or use $NONE to disable highlighting. -# -# Priorities can be any upper-case letter. -# A,B,C are highlighted; you can add coloring for more. -# -# export PRI_A=$YELLOW # color for A priority -# export PRI_B=$GREEN # color for B priority -# export PRI_C=$LIGHT_BLUE # color for C priority -# export PRI_D=... # define your own -# export PRI_X=$WHITE # color unless explicitly defined - -# There is highlighting for tasks that have been done, -# but haven't been archived yet. -# -# export COLOR_DONE=$LIGHT_GREY - -# There is highlighting for projects, contexts, dates, and item numbers. -# -# export COLOR_PROJECT=$RED -# export COLOR_CONTEXT=$RED -# export COLOR_DATE=$BLUE -# export COLOR_NUMBER=$LIGHT_GREY - -# There is highlighting for metadata key:value pairs e.g. -# DUE:2006-08-01 or note:MYNOTE -# -# export COLOR_META=$CYAN - -# === BEHAVIOR === - -## verbosity -# -# By default, additional information and confirmation of actions (like -# "TODO: 1 added") are printed. You can suppress this via 0 or add extra -# verbosity via 2. -# export TODOTXT_VERBOSE=1 - -## customize list output -# -# TODOTXT_SORT_COMMAND will filter after line numbers are -# inserted, but before colorization, and before hiding of -# priority, context, and project. -# -# export TODOTXT_SORT_COMMAND='env LC_COLLATE=C sort -f -k2' - -# TODOTXT_FINAL_FILTER will filter list output after colorization, -# priority hiding, context hiding, and project hiding. That is, -# just before the list output is displayed. -# -# export TODOTXT_FINAL_FILTER='cat' diff --git a/.config/yadm/bootstrap b/.config/yadm/bootstrap deleted file mode 100755 index 1b8e473..0000000 --- a/.config/yadm/bootstrap +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# Save this file as ~/.config/yadm/bootstrap and make it executable. It will -# execute all executable files (excluding templates and editor backups) in the -# ~/.config/yadm/bootstrap.d directory when run. - -set -eu - -# Directory to look for bootstrap executables in -BOOTSTRAP_D="${BASH_SOURCE[0]}.d" - -if [[ ! -d "$BOOTSTRAP_D" ]]; then - echo "Error: bootstrap directory '$BOOTSTRAP_D' not found" >&2 - exit 1 -fi - -declare -a bootstraps -while IFS= read -r bootstrap; do - if [[ -x "$bootstrap" && ! "$bootstrap" =~ "##" && ! "$bootstrap" =~ ~$ ]]; then - bootstraps+=("$bootstrap") - fi -done < <(find -L "$BOOTSTRAP_D" -type f | sort) - -for bootstrap in "${bootstraps[@]}"; do - if ! "$bootstrap"; then - echo "Error: bootstrap '$bootstrap' failed" >&2 - exit 1 - fi -done - diff --git a/.config/yadm/bootstrap.d/01-paru b/.config/yadm/bootstrap.d/01-paru deleted file mode 100755 index c0c5010..0000000 --- a/.config/yadm/bootstrap.d/01-paru +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -if pacman -Q paru; then - exit 0 -fi - -sudo pacman -S --needed base-devel -git clone https://aur.archlinux.org/paru.git /tmp/paru -cd /tmp/paru -makepkg -si -cd -rm -rf /tmp/paru diff --git a/.config/yadm/bootstrap.d/02-packages b/.config/yadm/bootstrap.d/02-packages deleted file mode 100755 index b4278ce..0000000 --- a/.config/yadm/bootstrap.d/02-packages +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -while read -r line; do - if paru -Q $line; then - echo "$line installed" - else - paru -S --noconfirm $line - fi -done <$HOME/.config/yadm/files/packages.txt diff --git a/.config/yadm/bootstrap.d/03-shell b/.config/yadm/bootstrap.d/03-shell deleted file mode 100755 index 268ae70..0000000 --- a/.config/yadm/bootstrap.d/03-shell +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [ $SHELL = '/bin/zsh' ]; then - exit 0 -else - chsh --shell /bin/zsh - - git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k -fi diff --git a/.config/yadm/bootstrap.d/04-docker b/.config/yadm/bootstrap.d/04-docker deleted file mode 100755 index 41d3ac9..0000000 --- a/.config/yadm/bootstrap.d/04-docker +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -if pacman -Q docker; then - exit 0 -else - sudo pacman -S --noconfirm docker docker-compose - - sudo usermod -aG docker vylpes - sudo systemctl enable --now docker -fi diff --git a/.config/yadm/bootstrap.d/05-gnome-keyring b/.config/yadm/bootstrap.d/05-gnome-keyring deleted file mode 100755 index de3c062..0000000 --- a/.config/yadm/bootstrap.d/05-gnome-keyring +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ $(cat /etc/pam.d/login | grep pam_gnome_keyring.so | wc -l) = "0" ]; then - sudo cp $HOME/.config/yadm/files/login /etc/pam.d/login -else - exit 0 -fi diff --git a/.config/yadm/bootstrap.d/06-files b/.config/yadm/bootstrap.d/06-files deleted file mode 100755 index 87ba33f..0000000 --- a/.config/yadm/bootstrap.d/06-files +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -mkdir -p $HOME/Documents -mkdir -p $HOME/Downloads -mkdir -p $HOME/Desktop -mkdir -p $HOME/Pictures/captures - -sudo mkdir -p /mnt/usb0 -sudo mkdir -p /mnt/nfs0 diff --git a/.config/yadm/bootstrap.d/07-qemu b/.config/yadm/bootstrap.d/07-qemu deleted file mode 100755 index 48624f7..0000000 --- a/.config/yadm/bootstrap.d/07-qemu +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -if pacman -Q virt-manager; then - exit 0 -else - sudo pacman -S --noconfirm virt-manager - - sudo systemctl enable --now libvirtd.socket - sudo usermod -aG libvirt vylpes -fi diff --git a/.config/yadm/bootstrap.d/08-nvim b/.config/yadm/bootstrap.d/08-nvim deleted file mode 100755 index 52dc2c4..0000000 --- a/.config/yadm/bootstrap.d/08-nvim +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -if command -v nvim >/dev/null 2>&1; then - nvim '+PlugInstall' '+qall' -fi diff --git a/.config/yadm/bootstrap.d/09-node b/.config/yadm/bootstrap.d/09-node deleted file mode 100755 index 304b394..0000000 --- a/.config/yadm/bootstrap.d/09-node +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if command -v nvm >/dev/null 2>&1; then - exit 0 -else - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash -fi diff --git a/.config/yadm/bootstrap.d/10-xorg b/.config/yadm/bootstrap.d/10-xorg deleted file mode 100755 index e29e229..0000000 --- a/.config/yadm/bootstrap.d/10-xorg +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -sudo cp $HOME/.config/yadm/files/xorg/usr/40-libinput.conf /usr/share/X11/xorg.conf.d/ - -sudo cp $HOME/.config/yadm/files/xorg/etc/10-extensions.conf /etc/X11/xorg.conf.d/ -sudo cp $HOME/.config/yadm/files/xorg/etc/10-serverflags.conf /etc/X11/xorg.conf.d/ diff --git a/.config/yadm/bootstrap.d/11-ruby b/.config/yadm/bootstrap.d/11-ruby deleted file mode 100755 index 9400891..0000000 --- a/.config/yadm/bootstrap.d/11-ruby +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if command -v ruby >/dev/null 2>&1; then - exit 0 -else - sudo pacman -S ruby - gem install rainbow terminal-notifier -fi diff --git a/.config/yadm/bootstrap.d/99-yadm b/.config/yadm/bootstrap.d/99-yadm deleted file mode 100755 index 18600ff..0000000 --- a/.config/yadm/bootstrap.d/99-yadm +++ /dev/null @@ -1 +0,0 @@ -yadm remote set-url origin "ssh://git@ssh.git.vylpes.xyz:222/Vylpes/dotfiles.git" diff --git a/.config/yadm/files/login b/.config/yadm/files/login deleted file mode 100644 index 36e9ca2..0000000 --- a/.config/yadm/files/login +++ /dev/null @@ -1,9 +0,0 @@ -#%PAM-1.0 - -auth requisite pam_nologin.so -auth include system-local-login -auth optional pam_gnome_keyring.so -account include system-local-login -session include system-local-login -session optional pam_gnome_keyring.so auto_start -password include system-local-login diff --git a/.config/yadm/files/packages.txt b/.config/yadm/files/packages.txt deleted file mode 100644 index 8d46620..0000000 --- a/.config/yadm/files/packages.txt +++ /dev/null @@ -1,42 +0,0 @@ -alacritty -arandr -autorandr -cups -discord -dunst -fastfetch -firefox -flameshot -gnome-keyring -htop -hyfetch -i3-battery-popup -i3-wm -i3lock -keepassxc -keepmenu -less -mpv -neovim -nextcloud-client -nfs-utils -nitrogen -noto-fonts-emoji -pavucontrol -playerctl -plexamp-appimage -pulseaudio-control -picom -polybar -ranger -rsync -sxiv -rofi -tldr -ttf-font-awesome -ttf-hack -xborder-git -xclip -xorg-xinit -yt-dlp -zsh diff --git a/.config/yadm/files/xorg/etc/10-extensions.conf b/.config/yadm/files/xorg/etc/10-extensions.conf deleted file mode 100644 index acb3600..0000000 --- a/.config/yadm/files/xorg/etc/10-extensions.conf +++ /dev/null @@ -1,3 +0,0 @@ -Section "Extensions" - Option "DPMS" "false" -EndSection diff --git a/.config/yadm/files/xorg/etc/10-serverflags.conf b/.config/yadm/files/xorg/etc/10-serverflags.conf deleted file mode 100644 index 2a4283c..0000000 --- a/.config/yadm/files/xorg/etc/10-serverflags.conf +++ /dev/null @@ -1,4 +0,0 @@ -Section "ServerFlags" - Option "BlankTime" "0" -EndSection - diff --git a/.config/yadm/files/xorg/usr/40-libinput.conf b/.config/yadm/files/xorg/usr/40-libinput.conf deleted file mode 100644 index a762484..0000000 --- a/.config/yadm/files/xorg/usr/40-libinput.conf +++ /dev/null @@ -1,55 +0,0 @@ -# Match on all types of devices but joysticks -# -# If you want to configure your devices, do not copy this file. -# Instead, use a config snippet that contains something like this: -# -# Section "InputClass" -# Identifier "something or other" -# MatchDriver "libinput" -# -# MatchIsTouchpad "on" -# ... other Match directives ... -# Option "someoption" "value" -# EndSection -# -# This applies the option any libinput device also matched by the other -# directives. See the xorg.conf(5) man page for more info on -# matching devices. - -Section "InputClass" - Identifier "libinput pointer catchall" - MatchIsPointer "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection - -Section "InputClass" - Identifier "libinput keyboard catchall" - MatchIsKeyboard "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection - -Section "InputClass" - Identifier "libinput touchpad catchall" - MatchIsTouchpad "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" - Option "NaturalScrolling" "True" - Option "Tapping" "on" - Option "TappingButtonMap" "lrm" -EndSection - -Section "InputClass" - Identifier "libinput touchscreen catchall" - MatchIsTouchscreen "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection - -Section "InputClass" - Identifier "libinput tablet catchall" - MatchIsTablet "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection diff --git a/.todo.actions.d/birdseye/CHANGELOG.md b/.todo.actions.d/birdseye/CHANGELOG.md deleted file mode 100644 index fcfce57..0000000 --- a/.todo.actions.d/birdseye/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ - # Change Log -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/) -and this project adheres to [Semantic Versioning](http://semver.org/). - -## [1.3.0] - 2017.06.13 -### Changed -- Moved project into it's own repository. - -### Added -- README.md -- CHANGELOG.md - -## [1.2.0] - 2016.03.17 -### Changed -- Update for Python 3. Tx, @JonathanReeve! - -## [1.1.0] - 2006.07.29 -### Changed -- Now supports p:, p- and + project notation. Tx, Pedro! - -## 1.0.0 - 2015-10-06 -### Added -- Released by @ginatrapani - - -[Unreleased]: https://github.com/karbassi/todotxt-birdseye/compare/v1.3.0...HEAD -[1.3.0]: https://github.com/karbassi/todotxt-birdseye/compare/v1.2.0...v1.3.0 -[1.2.0]: https://github.com/karbassi/todotxt-birdseye/compare/v1.1.0...v1.2.0 -[1.1.0]: https://github.com/karbassi/todotxt-birdseye/compare/v1.0.0...v1.1.0 diff --git a/.todo.actions.d/birdseye/CODE_OF_CONDUCT.md b/.todo.actions.d/birdseye/CODE_OF_CONDUCT.md deleted file mode 100644 index deb4750..0000000 --- a/.todo.actions.d/birdseye/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ali@karbassi.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/.todo.actions.d/birdseye/LICENSE b/.todo.actions.d/birdseye/LICENSE deleted file mode 100644 index 9cecc1d..0000000 --- a/.todo.actions.d/birdseye/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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 . - -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: - - {project} Copyright (C) {year} {fullname} - 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 -. - - 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 -. diff --git a/.todo.actions.d/birdseye/README.md b/.todo.actions.d/birdseye/README.md deleted file mode 100644 index 22df04c..0000000 --- a/.todo.actions.d/birdseye/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# [TODO.TXT][todo] Bird's Eye View Reporter - -Generates a textual report of pending and completed tasks in all projects and contexts. - -## USAGE -```sh -todo.sh birdseye [todo.txt] [done.txt] -``` - -### USAGE NOTES - -Expects two text files as parameters, each of which formatted as follows: - -- One todo per line, ie, "`call Mom`" -- with an optional project association indicated as such: "`+projectname`" -- with the context in which the tasks should be completed, indicated as such: "`@context`" -- with the task priority optionally listed at the front of the line, in parens, ie, "`(A)`" - -For example, 4 lines of todo.txt might look like this: - - +garagesale @phone schedule Goodwill pickup - (A) @phone Tell Mom I love her - +writing draft Great American Novel - (B) smell the roses - -The done.txt file is a list of completed todos from todo.txt. - -## OUTPUT - -Displays a list of: -- working projects and their percentage complete -- contexts in which open todos exist -- contexts and projects with tasks that have been prioritized -- projects which are completely done (don't have any open todos) - -## [CHANGELOG] - -[todo]: http://todotxt.com -[CHANGELOG]: CHANGELOG.md - -## CONTRIBUTING - -The [contributing guide](CODE_OF_CONDUCT.md) is a good place to start. If you have questions, feel free to ask. - -## LICENSE - -GPLv3 © [Gina Trapani][ginatrapani] - -[ginatrapani]: https://github.com/ginatrapani diff --git a/.todo.actions.d/birdseye/birdseye b/.todo.actions.d/birdseye/birdseye deleted file mode 100755 index a007baf..0000000 --- a/.todo.actions.d/birdseye/birdseye +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -action=$1 -shift - -[ "$action" = "usage" ] && { - echo " Bird's eye report:" - echo " birdseye" - echo " generates a textual report of pending and completed tasks in all projects and contexts" - echo "" - exit -} - -[ "$action" = "birdseye" ] && { - python $(dirname $0)/birdseye.py "$TODO_FILE" "$DONE_FILE" -} diff --git a/.todo.actions.d/birdseye/birdseye.py b/.todo.actions.d/birdseye/birdseye.py deleted file mode 100644 index 89e7bbe..0000000 --- a/.todo.actions.d/birdseye/birdseye.py +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/python - -""" TODO.TXT Bird's Eye View Reporter -USAGE: - birdseye.py [todo.txt] [done.txt] - -USAGE NOTES: - Expects two text files as parameters, each of which formatted as follows: - - One todo per line, ie, "call Mom" - - with an optional project association indicated as such: "+projectname" - - with the context in which the tasks should be completed, indicated as such: "@context" - - with the task priority optionally listed at the front of the line, in parens, ie, "(A)" - - For example, 4 lines of todo.txt might look like this: - - +garagesale @phone schedule Goodwill pickup - (A) @phone Tell Mom I love her - +writing draft Great American Novel - (B) smell the roses - - The done.txt file is a list of completed todos from todo.txt. - - See more on todo.txt here: - http://todotxt.com - - -OUTPUT: - Displays a list of: - - working projects and their percentage complete - - contexts in which open todos exist - - contexts and projects with tasks that have been prioritized - - projects which are completely done (don't have any open todos) - -CHANGELOG: - 2016.03.17 - Update for Python 3. Tx, JonathanReeve! - 2006.07.29 - Now supports p:, p- and + project notation. Tx, Pedro! - 2006.05.02 - Released -""" - - -import sys - -__version__ = "1.2" -__date__ = "2006/05/02" -__updated__ = "2016/03/17" -__author__ = "Gina Trapani (ginatrapani@gmail.com)" -__copyright__ = "Copyright 2006 - 2016, Gina Trapani" -__license__ = "GPL" -__history__ = """ -1.2 - Update for Python 3. Tx, JonathanReeve! -1.1 - Now supports p:, p- and + project notation. Tx, Pedro! -1.0 - Released. -""" - -def usage(): - print("USAGE: %s [todo.txt] [done.txt]" % (sys.argv[0], )) - -def printTaskGroups(title, taskDict, priorityList, percentages): - print("") - print("%s"% (title,)) - separator("-") - if not taskDict: - print("No items to list.") - else: - # sort the dictionary by value - # http://python.fyxm.net/peps/pep-0265.html - items = [(v, k) for k, v in list(taskDict.items())] - items.sort() - items.reverse() # so largest is first - items = [(k, v) for v, k in items] - - for item in items: - if item[0] in priorityList: - if item[0] not in percentages: - printTaskGroup(item, -1, "*") - else: - printTaskGroup(item, percentages[item[0]], "*") - - for item in items: - if item[0] not in priorityList: - if item[0] not in percentages: - printTaskGroup(item, -1, " ") - else: - printTaskGroup(item, percentages[item[0]], " ") - -def printTaskGroup(p, pctage, star): - if pctage > -1: - progressBar = "" - numStars = int(pctage//10) - progressBar = "=" * numStars - numSpaces = 10 - numStars - for n in range(numSpaces): - progressBar += " " - - if pctage > 9: - displayTotal = " %d%%"% (pctage, ); - else: - displayTotal = " %d%%"% (pctage, ); - print("%s %s [%s] %s (%d todos)"% (star, displayTotal, progressBar, p[0], p[1],)) - else: - print("%s %s (%d todos)"% (star, p[0], p[1], )) - -def separator(c): - sep = "" - sep = c * 42 - print(sep) - - -def main(argv): - # make sure you have all your args - if len(argv) < 2: - usage() - sys.exit(2) - - # process todo.txt - try: - f = open (argv[0], "r") - projects = {} - contexts = {} - projectPriority = [] - contextPriority = [] - for line in f: - prioritized = False - words = line.split() - if words and words[0].startswith("("): - prioritized = True - for word in words: - if word[0:2] == "p:" or word[0:2] == "p-" or word[0:1] == "+": - if word not in projects: - projects[word] = 1 - else: - projects[word] = projects.setdefault(word,0) + 1 - if prioritized: - projectPriority.append(word) - if word[0:1] == "@": - if word not in contexts: - contexts[word] = 1 - else: - contexts[word] = contexts.setdefault(word, 0) + 1 - if prioritized: - contextPriority.append(word) - f.close() - except IOError: - print("ERROR: The file named %s could not be read."% (argv[0], )) - usage() - sys.exit(2) - - # process done.txt - try: - completedTasks = {} - f = open (argv[1], "r") - for line in f: - words = line.split() - for word in words: - if word[0:2] == "p:" or word[0:2] == "p-" or word[0:1] == "+": - if word not in completedTasks: - completedTasks[word] = 1 - else: - completedTasks[word] = completedTasks.setdefault(word, 0) + 1 - f.close() - except IOError: - print("ERROR: The file named %s could not be read."% (argv[1], )) - usage() - sys.exit(2) - - # calculate percentages - projectPercentages = {} - for project in projects: - openTasks = projects[project] - if project in completedTasks: - closedTasks = completedTasks[project] - else: - closedTasks = 0 - totalTasks = openTasks + closedTasks - projectPercentages[project] = (closedTasks*100) / totalTasks - - # get projects all done - projectsWithNoIncompletes = {} - for task in completedTasks: - if task not in projects: - projectsWithNoIncompletes[task] = 0 - - # print out useful info - #print "TODO.TXT Bird's Eye View Report %s"% ( datetime.date.today().isoformat(), ) - print("") - print("TODO.TXT Bird's Eye View Report") - - separator("=") - - printTaskGroups("Projects with Open TODOs", projects, projectPriority, projectPercentages) - printTaskGroups("Contexts with Open TODOs", contexts, contextPriority, projectPercentages) - printTaskGroups("Completed Projects (No open TODOs)", projectsWithNoIncompletes, projectPriority, projectPercentages) - print("") - print("* Projects and contexts with an asterisk next to them denote prioritized tasks.") - print("Project with prioritized tasks are listed first, then sorted by number of open todos.") - print("") - - - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/.todo.actions.d/edit b/.todo.actions.d/edit deleted file mode 100755 index 4fc23f0..0000000 --- a/.todo.actions.d/edit +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -case $1 in -"usage") - echo "$(basename $0) [BASENAME]" - echo " Open \$TODO_DIR/BASENAME.txt in \$EDITOR." - echo " If BASENAME is not given, defaults to 'todo'." - ;; -*) - if [[ -z $2 ]]; then - FILE=$TODO_FILE - else - FILE=$TODO_DIR/$2.txt - fi - if [ -n "$EDITOR" ]; then - $EDITOR "$FILE" - else - echo "Error: The EDITOR environment variable is not set" - fi - ;; -esac diff --git a/.todo.actions.d/graph/README.md b/.todo.actions.d/graph/README.md deleted file mode 100644 index 7bb09e5..0000000 --- a/.todo.actions.d/graph/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# todo.txt-graph - -*A visualization-plugin for [todo.txt](http://todotxt.com/) – a command line todo application.* - -![Graph Image](https://cloud.githubusercontent.com/assets/1055819/11110492/dd8527fe-88fc-11e5-9957-2e03db505fbd.png) - -**todo.txt-graph** displays bar charts showing the number of completed tasks per day. - -As in Jerry Seinfeld’s [don’t break the chain](http://dontbreakthechain.com/what) technique, active days will be colored green and therefore motivate you do be more productive. - -## Installation - -`cd` into your plugins folder (see [Installing Addons](https://github.com/ginatrapani/todo.txt-cli/wiki/Creating-and-Installing-Add-ons)), e.g.: - -``` -cd ~/.todo.actions.d -``` - -Then clone this repository into the folder *graph*: - -``` -git clone https://github.com/timpulver/todo.txt-graph.git graph -``` - -The directory structure should look like this now: - -``` -~/.todo.actions.d/ - graph/ - graph - graph.py -``` - -## Usage - -Visualize last 7 days: - -``` -todo.sh graph -``` - -Visualize last 123 days: - -``` -todo.sh graph 123 -``` - -## Threshold - -By default, days with less than 5 completed tasks will be considered inactive (and therefore colored grey). You can change the threshold by adding an entry to your config file (`~/.todo/config`): - -``` -# Threshold for Graph Addon -export TODOTXT_GRAPH_THRESHOLD=10 -``` - -In the todo.txt wiki you can find further information on the config file: [config troubleshooting](https://github.com/todotxt/todo.txt-cli/wiki/Troubleshooting) - -## Compatibility - -Tested with *todo.txt* 2.11.0 on macOS 10.14.2 - -## Contributors - -- [Bassmann](https://github.com/Bassmann) -- [timpulver](https://github.com/timpulver) -- [ninjapanzer](https://github.com/ninjapanzer) -- [gabrielsimoes](https://github.com/gabrielsimoes) -- [nareike](https://github.com/nareike) -- [jucor](https://github.com/jucor) -- [andycyca](https://github.com/andycyca) - -Code used from: - -- [termgraph](https://github.com/mkaz/termgraph/blob/master/termgraph.py) -- [lately](https://github.com/emilerl/emilerl/) diff --git a/.todo.actions.d/graph/graph b/.todo.actions.d/graph/graph deleted file mode 100755 index f670c95..0000000 --- a/.todo.actions.d/graph/graph +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -# v0.1.0 - -action=$1 -flag=$2 -shift - -[ "$action" = "usage" ] && { - echo "" - echo " Visualize done tasks:" - echo " graph" - echo " Draws bar graphs visualizing the number of completed task per day." - echo " Optional argument (integer): number of days to visualize (default: 7)" - echo "" - exit -} -[ "$action" = "graph" ] && { - # check if python2 is defined - if hash python2 2>/dev/null; then - python2 "$TODO_ACTIONS_DIR"/graph/graph.py "$TODO_FILE" "$DONE_FILE" $flag - else - # use default python - python3 "$TODO_ACTIONS_DIR"/graph/graph.py "$TODO_FILE" "$DONE_FILE" $flag - fi -} diff --git a/.todo.actions.d/graph/graph.py b/.todo.actions.d/graph/graph.py deleted file mode 100644 index 72c76d4..0000000 --- a/.todo.actions.d/graph/graph.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/sh -# encoding: utf-8 -from __future__ import print_function -''''which python2 >/dev/null 2>&1 && exec python2 "$0" "$@" # ''' -''''which python >/dev/null 2>&1 && exec python "$0" "$@" # ''' -''''exec echo "Error: I can't find python anywhere" # ''' -# Author: Tim Pulver -# Date: 2015 -# https://github.com/timpulver/todo.txt-graph -# -# Visualizes the completed tasks in todo.txt with horizontal bar graphs -# Items are coloured green when there are more than 5 completed tasks per day, -# grey otherwise to motivate completing stuff. -# Have a look at Jerry Seinfeld's "Don't break the chain" methodoligy: -# https://dontbreakthechain.com/what -# You can change the threshold by adding this line to your todo.cfg file: -# export TODOTXT_GRAPH_THRESHOLD=123 -# -# Params: -# - TODO_TXT_PATH: Where the todo.txt / done.txt file is located -# - NUMBER_OF_DAYS: How many days should be visualized (optional, default: 7) - -import datetime -import sys -import os -import re -import collections - -TICK_CHAR = '■' -DEFAULT_THRESHOLD = 5 # grey bar < DEFAULT_THRESHOLD >= green bar -WIDTH = 60 # Graph width -DONE = "done.txt" -TODO = "todo.txt" - -# try to use xrange, which is faster -try: - range = xrange -except NameError: - pass - - - -# Bash color codes and color helper class from: -# https://github.com/emilerl/emilerl/blob/master/pybash/bash/__init__.py -RESET = '\033[0m' -CCODES = { - 'black' :'\033[0;30m', - 'blue' :'\033[0;34m', - 'green' :'\033[0;32m', - 'cyan' :'\033[0;36m', - 'red' :'\033[0;31m', - 'purple' :'\033[0;35m', - 'brown' :'\033[0;33m', - 'light_gray' :'\033[0;37m', - 'dark_gray' :'\033[0;30m', - 'light_blue' :'\033[0;34m', - 'light_green' :'\033[0;32m', - 'light_cyan' :'\033[0;36m', - 'light_red' :'\033[0;31m', - 'light_purple' :'\033[0;35m', - 'yellow' :'\033[0;33m', - 'white' :'\033[0;37m', -} - -# A helper class to colorize strings -class Colors(object): - def __init__(self, state = False): - self.disabled = state - - def disable(self): - self.disabled = True - - def enable(self): - self.disabled = False - - def __getattr__(self,key): - if key not in CCODES.keys(): - raise AttributeError("Colors object has no attribute '%s'" % key) - else: - if self.disabled: - return lambda x: x - else: - return lambda x: RESET + CCODES[key] + x + RESET - - def __dir__(self): - return self.__class__.__dict__.keys() + CCODES.keys() - - - -# Graph based on: -# https://github.com/mkaz/termgraph/blob/master/termgraph.py -def print_blocks(label, count, step): - # when nothing has been done, step equals 0 so the number - # of blocks/ticks can't be computed but also doesn't - # matter, hence set blocks = 0 in that case. - blocks = int(count / step) if step > 0 else 0 - print("{}: ".format(label), end="") - threshold = int(os.getenv('TODOTXT_GRAPH_THRESHOLD', DEFAULT_THRESHOLD)) - - c = Colors() - - for i in range(blocks): - if count >= threshold: - sys.stdout.write(c.green(TICK_CHAR)) - else: - sys.stdout.write(c.light_gray(TICK_CHAR)) - - # format the text (number of tasks done) - if count < 10: - print("{:>2.0f}".format(count)) - elif count < 100: - print("{:>3.0f}".format(count)) - else: - print("{:>4.0f}".format(count)) - -# Initialize dictionary with all days to also display days -# where no tasks were completed -def initialize_dic(cutoffDays = 7): - base = datetime.datetime.today().date() - dic = {(base - datetime.timedelta(days=x)).isoformat() : 0 - for x in range(0, cutoffDays)} - return dic - -# Based on Lately Addon: -# https://github.com/emilerl/emilerl/tree/master/todo.actions.d -def main(todo_file, done_file, cutoffDays = 7): - lines = [] - files = [todo_file, done_file] - for filename in files: - with open(filename, 'r') as f: - lines.extend(f.readlines()) - today = datetime.datetime.today() - cutoff = today - datetime.timedelta(days=cutoffDays) - dic = initialize_dic(cutoffDays) - - for line in lines: - m = re.match("x ([\d]{4}-[\d]{2}-[\d]{2}).*", line) - if m is not None: - done = m.group(1) - year, month, day = m.group(1).split("-") - completed = datetime.datetime(int(year),int(month),int(day)) - if completed >= cutoff: - #print c.green(m.group(1)) + " " + c.blue(line.replace("x %s" % m.group(1), "").strip()) - if m.group(1) in dic: - oldVal = dic.get(m.group(1), 1) - dic.update({m.group(1): oldVal+1}) - else: - dic[m.group(1)] = 1 - - # find out max value - max = 0 - for key, value in dic.items(): - if value > max: - max = value - - maxf = float(max) - step = maxf / WIDTH - - orderedDic = collections.OrderedDict(sorted(dic.items())) - - # display graph - print() - for key, value in orderedDic.items(): - print_blocks(key, value, step) - print() - - -if __name__ == '__main__': - if len(sys.argv) < 3: - print("Usage: graph.py [TODO_FILE] [DONE_FILE] ") - sys.exit(1) - - if os.path.isfile(sys.argv[1]) and os.path.isfile(sys.argv[2]): - if len(sys.argv) == 4: - main(sys.argv[1], sys.argv[2], int(sys.argv[3])) - else: - main(sys.argv[1], sys.argv[2]) - else: - print("Error: %s or %s doesn't exist" % (sys.argv[1], sys.argv[2])) - sys.exit(1) diff --git a/.todo.actions.d/inbox b/.todo.actions.d/inbox deleted file mode 100755 index 0e62fe6..0000000 --- a/.todo.actions.d/inbox +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -## Inbox todos storage file ## -export INBOX_PATH="$TODO_DIR" -export INBOX_FILE="inbox.txt" -export INBOX_FULL_PATH="$INBOX_PATH/$INBOX_FILE" -#export INBOX_THRESHOLD="14d" - -## Display usage information ## -function usage { - cat <<-END - - inbox - Create and manage your inbox tasks - - Usage: - inbox ls - List todos in $INBOX_FILE - - inbox move ITEM# - Move specified todo out of $INBOX_FILE - - inbox add DESCRIPTION - Add new todo to $INBOX_FILE - - END - - exit 0 -} - -## Lists todos in stale.txt ## -function listInboxTodos { - $TODO_FULL_SH listfile "$INBOX_FULL_PATH" - - exit 0 -} - -## Moves todo from inbox.txt to todo.txt ## -function moveTodo { - itemnum="$1" - getTodo "$itemnum" "$INBOX_FULL_PATH" - cleanTodo=$(echo "$todo" | sed -E 's/x [0-9]{4}-[0-9]{2}-[0-9]{2} //') - $TODO_FULL_SH add "$cleanTodo" - if [ $TODOTXT_PRESERVE_LINE_NUMBERS = 0 ]; then - # delete line (changes line numbers) - sed -i.bak -e "${itemnum}s/^.*//" -e '/./!d' "$INBOX_FULL_PATH" - else - # leave blank line behind (preserves line numbers) - sed -i.bak -e "${itemnum}s/^.*//" "$INBOX_FULL_PATH" -fi - exit 0 -} - -## Add todo to inbox.txt ## -function addTodo { - description="$1" - $TODO_FULL_SH addto inbox.txt "$description" -} - - -action=$1 -shift - -if [ "$1" = "usage" ]; then - usage -fi - -if [ "$1" = "ls" ]; then - listInboxTodos -elif [ "$1" = "move" ] && [[ "$2" =~ [0-9]+ ]]; then - moveTodo "$2" -elif [ "$1" = "add" ] && [[ -n "$2" ]]; then - addTodo "$2" -else - cat <<-EndShortUsage - $TODO_SH inbox ls | List inbox tasks - $TODO_SH inbox move ITEM# | Move item from $INBOX_FILE to todo.txt - $TODO_SH inbox add DESCRIPTION | Add todo to $INBOX_FILE - EndShortUsage -fi diff --git a/.todo.actions.d/pom/README.md b/.todo.actions.d/pom/README.md deleted file mode 100644 index 330a648..0000000 --- a/.todo.actions.d/pom/README.md +++ /dev/null @@ -1,36 +0,0 @@ -## Pomodori-todo.txt - -A pomodoro counter implementation for [Todo.txt](http://todotxt.com/). - -## What it features - -* easily plan, run timers, and show current tasks status via the command line -* allows tmux integration to display the remaining pomodoro timer in your tmux statusbar -* logs the pomodori start time and end time to a log file for an easy history -* uses the terminal-notifier gem to notify you when your pomodoro starts and ends - -## Installation - -* Make sure you have ruby installed -* run `gem install rainbow terminal-notifier` -* Download this repo somewhere on your filesystem -* symlink the `pom` executable into your TODO_ACTIONS_DIR - -## Usage: - - todo.sh pom action [task_number] [args] - Actions: - ls - lists tasks with pomodori count and estimates - log - displays a log of your pomodori - start ITEM# - start a pomodoro timer for item ITEM# - add ITEM# - add one pomodoro to task on line ITEM# without running a timer - plan ITEM# PLANNED_POMODORI - estimate ITEM# will take PLANNED_POMODORI to complete - -## Example: - - diff --git a/.todo.actions.d/pom/lib/countdown.rb b/.todo.actions.d/pom/lib/countdown.rb deleted file mode 100644 index 570f3dc..0000000 --- a/.todo.actions.d/pom/lib/countdown.rb +++ /dev/null @@ -1,39 +0,0 @@ -class Countdown - - def run seconds, options={} - seconds.downto(0) do |current_seconds| - sleep 1 - write_tmux(current_seconds) if (options[:services] || []).include?(:tmux) - set_window_title(current_seconds) if (options[:services] || []).include?(:iterm2) - STDOUT.write "[RUNNING] #{to_minutes(current_seconds)}\r" - end - end - - private - - def write_tmux(current_seconds) - `echo #{to_minutes(current_seconds, :tmux)} > ~/.pomo.txt.tmux` - end - - def set_window_title(current_seconds) - title = to_minutes(current_seconds, :tmux) - `echo -ne "\e]1;#{title}\a"` - end - - def to_minutes seconds, format=:standard - minutes = seconds / 60 - mins = sprintf("%02d", minutes) - secs = sprintf("%02d", seconds % 60) - if format == :standard - "#{mins}:#{secs} [#{dots_for(minutes)}]" - else - "#{mins}:#{secs}" - end - end - - - def dots_for mins - "#{'.' * (25 - mins)}#{' ' * mins}" - end - -end diff --git a/.todo.actions.d/pom/lib/file_logger.rb b/.todo.actions.d/pom/lib/file_logger.rb deleted file mode 100644 index 09f9d0b..0000000 --- a/.todo.actions.d/pom/lib/file_logger.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'fileutils' - -class FileLogger - - attr_accessor :pomodoro_log_file - - def initialize log_file_path - @pomodoro_log_file = log_file_path - FileUtils.touch pomodoro_log_file - end - - def notify_start task - add_separator_if_new_day - File.open(pomodoro_log_file, "a") { |file| file.puts "#{Time.now.strftime('%Y/%m/%d %H:%M')} Pomodoro nr. #{sprintf("% 2d", task.pomodori + 1)} started: #{task.text}" } - end - - def notify_completed task - File.open(pomodoro_log_file, "a") { |file| file.puts "#{Time.now.strftime('%Y/%m/%d %H:%M')} Pomodoro nr. #{sprintf("% 2d", task.pomodori + 1)} completed: #{task.text}" } - end - - private - - def add_separator_if_new_day - return if File.zero?(pomodoro_log_file) - last_day = File.open(pomodoro_log_file, "r") { |file| file.readlines.last.split(" ")[0]} - today = Time.now.strftime('%Y/%m/%d') - File.open(pomodoro_log_file, "a") { |file| file.puts "\n-----------\n\n" } if last_day != today - end -end diff --git a/.todo.actions.d/pom/lib/pomo_logger.rb b/.todo.actions.d/pom/lib/pomo_logger.rb deleted file mode 100644 index ef869f1..0000000 --- a/.todo.actions.d/pom/lib/pomo_logger.rb +++ /dev/null @@ -1,19 +0,0 @@ -class PomoLogger - - attr_accessor :options - - def initialize opts - @options = opts - end - - def log_pomodoro_started task - TerminalNotifierLogger.new.notify_start(task) - FileLogger.new(options[:pomodoro_log_file]).notify_start(task) - end - - def log_pomodoro_completed task - TerminalNotifierLogger.new.notify_completed(task) - FileLogger.new(options[:pomodoro_log_file]).notify_completed(task) - end - -end diff --git a/.todo.actions.d/pom/lib/task.rb b/.todo.actions.d/pom/lib/task.rb deleted file mode 100644 index e356af5..0000000 --- a/.todo.actions.d/pom/lib/task.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'rainbow' - -class Task - - attr_accessor :text - attr_accessor :index - attr_accessor :pomodori - attr_accessor :planned - - POMO_REGEXP = / \(#pomo: (\d+)\/(\d+)\)$/ - PRIORITY_REGEXP = /^\([A-Z]+\) / - STATUS_COLORS = { - new: :white, - planned: :green, - in_progress: :yellow, - completed: :blue, - underestimated: :red - } - - def initialize index, text - @index = index.to_i - if text =~ POMO_REGEXP - @pomodori, @planned = text.match(POMO_REGEXP)[1].to_i, text.match(POMO_REGEXP)[2].to_i - else - @pomodori, @planned = 0, 0 - end - @text = text.gsub(POMO_REGEXP, '').gsub(PRIORITY_REGEXP, '') - end - - def to_s - "#{text} (#pomo: #{pomodori}/#{planned})" - end - - def add_pomo - @pomodori += 1 - end - - def plan planned - @planned = planned.to_i - end - - def puts_highlighted - return if blank?(text) - print "#{index} #{text} " - color = STATUS_COLORS[self.status] - puts Rainbow("(#pomo: #{pomodori}/#{planned})").send(color) - end - - def status - return :new if pomodori == 0 && planned == 0 - return :planned if pomodori == 0 && planned != 0 - return :completed if pomodori == planned - return :in_progress if pomodori != 0 && planned != 0 && pomodori < planned - return :underestimated if pomodori != 0 && pomodori > planned - end - - private - - def blank?(string) - string == nil || string == "" - end - -end diff --git a/.todo.actions.d/pom/lib/terminal_notifier_logger.rb b/.todo.actions.d/pom/lib/terminal_notifier_logger.rb deleted file mode 100644 index 7a28022..0000000 --- a/.todo.actions.d/pom/lib/terminal_notifier_logger.rb +++ /dev/null @@ -1,9 +0,0 @@ -class TerminalNotifierLogger - def notify_start task - TerminalNotifier.notify('Pomodoro started', title: 'Pomotxt', sound: 'Glass') - end - - def notify_completed task - TerminalNotifier.notify('Pomodoro completed!', title: 'Pomotxt', sound: 'Glass') - end -end diff --git a/.todo.actions.d/pom/pom b/.todo.actions.d/pom/pom deleted file mode 100755 index cfd939d..0000000 --- a/.todo.actions.d/pom/pom +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env ruby - -require 'date' -require 'rainbow' -require 'terminal-notifier' -require_relative 'lib/task' -require_relative 'lib/countdown' -require_relative 'lib/pomo_logger' -require_relative 'lib/terminal_notifier_logger' -require_relative 'lib/file_logger' - -POMODORO_SECONDS = 25 * 60 -# TODO: either move this to a env variable or a yml configuration file -POMODORO_LOG_FILE = "#{ENV['HOME']}/Documents/pomodoro_log.txt" - -def logger - PomoLogger.new( - :pomodoro_log_file => POMODORO_LOG_FILE - ) -end - -def read_todos - todos = File.read(ENV['TODO_FILE']) - todos.split(/\r?\n/) -end - -def increase_pomos todos, index - todo_to_update = todos[index] - task = Task.new(index + 1, todo_to_update) - task.add_pomo - task.puts_highlighted - `todo.sh replace #{index + 1} "#{task.to_s}"` -end - -def plan_task todos, index, planned - todo_to_update = todos[index] - task = Task.new(index + 1, todo_to_update) - task.plan(planned) - task.puts_highlighted - `todo.sh replace #{index + 1} "#{task.to_s}"` -end - -def puts_and_exit string - puts string - exit -end - - -case ARGV[1] -when 'ls' - todos = read_todos - todos.each_with_index do |todo, index| - Task.new(index + 1, todo).puts_highlighted - end -when 'log' - puts `cat #{POMODORO_LOG_FILE}` -when 'add' - puts_and_exit "You must insert the task number" unless index = ARGV[2] - puts_and_exit "Task number must be... a number" unless index =~ /\d+/ - index = index.to_i - 1 - todos = read_todos - increase_pomos todos, index -when 'plan' - puts_and_exit "You must insert the task number" unless index = ARGV[2] - puts_and_exit "Task number must be... a number" unless index =~ /\d+/ - puts_and_exit "You must insert the task pomodori estimate" unless planned = ARGV[3] - puts_and_exit "The task pomodori estimate must be a number" unless planned =~ /\d+/ - index = index.to_i - 1 - todos = read_todos - plan_task todos, index, planned -when 'start' - puts_and_exit "You must insert the task number" unless index = ARGV[2] - puts_and_exit "Task number must be... a number" unless index =~ /\d+/ - index = index.to_i - 1 - todos = read_todos - task_being_worked = Task.new(index + 1, todos[index]) - logger.log_pomodoro_started(task_being_worked) - Countdown.new.run(POMODORO_SECONDS, services: [ :tmux, :iterm2 ]) - logger.log_pomodoro_completed(task_being_worked) - increase_pomos todos, index -when 'help' - puts "Usage: todo.sh pomo action [task_number] [args]\n" - puts "Actions:" - puts " ls" - puts " lists tasks with pomodori count and estimates" - puts " log" - puts " displays a log of your pomodori" - puts " start ITEM#" - puts " start a pomodoro timer for item ITEM#" - puts " add ITEM#" - puts " add one pomodoro to task on line ITEM# without running a timer" - puts " plan ITEM# PLANNED_POMODORI" - puts " estimate ITEM# will take PLANNED_POMODORI to complete" -end diff --git a/.todo.actions.d/pom/screenshot.png b/.todo.actions.d/pom/screenshot.png deleted file mode 100644 index 2fc3063..0000000 Binary files a/.todo.actions.d/pom/screenshot.png and /dev/null differ diff --git a/.todo.actions.d/pom/spec/task_spec.rb b/.todo.actions.d/pom/spec/task_spec.rb deleted file mode 100644 index 3efbb07..0000000 --- a/.todo.actions.d/pom/spec/task_spec.rb +++ /dev/null @@ -1,107 +0,0 @@ -require_relative '../lib/task' - -describe Task do - - context "Task#new" do - context "When task already includes pomodori" do - subject { Task.new(1, "Write Task spec (#pomo: 3/5)")} - specify { expect(subject.pomodori).to eq(3) } - specify { expect(subject.planned).to eq(5) } - specify { expect(subject.text).to eq("Write Task spec") } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 3/5)") } - end - - context "When task does not include pomodori" do - subject { Task.new(1, "Write Task spec")} - specify { expect(subject.pomodori).to eq(0) } - specify { expect(subject.planned).to eq(0) } - specify { expect(subject.text).to eq("Write Task spec") } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 0/0)") } - end - end - - context "Task#add_pomo" do - context "Prioritized task" do - subject { Task.new(1, "(A) Write Task spec (#pomo: 3/5)")} - specify { expect(subject.pomodori).to eq(3) } - - context "Adding pomo to a tagged task" do - before { subject.add_pomo } - specify { expect(subject.pomodori).to eq(4) } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 4/5)") } - specify { subject.add_pomo; expect(subject.to_s).to eq("Write Task spec (#pomo: 5/5)") } - end - end - - context "Already tagged task" do - subject { Task.new(1, "Write Task spec (#pomo: 3/5)")} - specify { expect(subject.pomodori).to eq(3) } - - context "Adding pomo to a tagged task" do - before { subject.add_pomo } - specify { expect(subject.pomodori).to eq(4) } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 4/5)") } - end - end - - context "Normal task" do - subject { Task.new(1, "Write Task spec")} - specify { expect(subject.pomodori).to eq(0) } - - context "Adding pomo to a normal task" do - before { subject.add_pomo } - specify { expect(subject.pomodori).to eq(1) } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 1/0)") } - end - end - end - - context "Task#plan" do - context "When task already includes pomodori" do - subject { Task.new(1, "Write Task spec (#pomo: 3/5)")} - before { subject.plan(10) } - specify { expect(subject.pomodori).to eq(3) } - specify { expect(subject.planned).to eq(10) } - specify { expect(subject.text).to eq("Write Task spec") } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 3/10)") } - end - - context "When task does not include pomodori" do - subject { Task.new(1, "Write Task spec")} - before { subject.plan(10) } - specify { expect(subject.pomodori).to eq(0) } - specify { expect(subject.planned).to eq(10) } - specify { expect(subject.text).to eq("Write Task spec") } - specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 0/10)") } - end - end - - context "Task#status" do - subject { Task.new(1, "Write Task spec")} - - context "new task" do - specify { expect(subject.status).to eq :new } - end - - context "planned task" do - before { subject.plan(10) } - specify { expect(subject.status).to eq :planned } - end - - context "in progress task" do - before { subject.plan(10); subject.add_pomo } - specify { expect(subject.status).to eq :in_progress } - end - - context "completed task" do - before { subject.plan(1); subject.add_pomo } - specify { expect(subject.status).to eq :completed } - end - - context "underestimated task" do - before { subject.plan(1); 2.times { subject.add_pomo } } - specify { expect(subject.status).to eq :underestimated } - end - end -end - diff --git a/.todo.actions.d/repeat b/.todo.actions.d/repeat deleted file mode 100755 index cc30602..0000000 --- a/.todo.actions.d/repeat +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -action=$1 -shift - -function usage { - echo " Customized repeat:" - echo " repeat ITEM " - echo " mark an item complete then re-enter it" - echo " repeat ITEM DAYS" - echo " mark an item as complete then re-enter it with a date DAYS from now" - echo " repeat ITEM +DAYS" - echo " mark an item with a date as complete then re-enter it with a date DAYS from the due date" - echo "" - exit -} - -[ "$action" = "usage" ] && usage - -# make sure we have an item number -ITEM=$1 -if ! [[ "$ITEM" =~ ^[0-9]+$ ]]; then -echo "Error! Usage:" -usage -exit -fi - -# pull the line from the todo file -LINE=$(sed "$ITEM!d" "$TODO_FILE") - -if [[ "$LINE" =~ ^\([A-Z]\) ]]; then -LINE=$(echo "$LINE" | cut -f2- -d ' ') # cut off the priority -fi - -if [[ "$LINE" =~ ^[0-9][0-9][0-9][0-9] ]]; then - DATE=$(echo "$LINE" | cut -f1 -d ' ') # identify the date - LINE=$(echo "$LINE" | cut -f2- -d ' ') # cut off the date -else - DATE="" -fi - -DAYS=$2 -if [[ "$DAYS" != "" ]]; then - if [[ $DAYS == \+* ]]; then - if [[ "$DATE" != "" ]]; then - # increase the due date - DATE=`date -d $DATE" "$DAYS" days" +%Y-%m-%d` - fi - elif [[ $DAYS == [0-9]* ]]; then - # make new date relative from now - DATE=`date -d $DAYS" days" +%Y-%m-%d` - fi - LINE=$DATE" "$LINE # and append to the line -fi - -if [[ "$LINE" != "" ]] ; then - $DO && "$TODO_SH" command do "$ITEM" - $DO && "$TODO_SH" command add "$LINE" -fi - diff --git a/.todo.actions.d/revive b/.todo.actions.d/revive deleted file mode 100755 index c9ddbbe..0000000 --- a/.todo.actions.d/revive +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2013 Duncan Eastoe - -# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation -# files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, -# modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -## Display usage information ## -function usage { - cat <<-END - revive - Restore tasks from done.txt - - Usage: - revive - List available todos to revive (ie. done.txt) - - revive ITEM# - Revive specified todo - END - - exit 0 -} - -## Lists completed todos in done.txt ## -function listAvailableTodos { - $TODO_FULL_SH listfile "$TODO_DIR/done.txt" - - exit 0 -} - -## Copies todo from done.txt back to todo.txt ## -function reviveTodo { - getTodo "$1" "$TODO_DIR/done.txt" - cleanTodo=$(echo "$todo" | sed -E 's/x [0-9]{4}-[0-9]{2}-[0-9]{2} //') - $TODO_FULL_SH add "$cleanTodo" - - exit 0 -} - -if [ "$1" == "usage" ]; then - usage -fi - -shift - -if [ -z "$1" ]; then - listAvailableTodos -elif [[ "$1" =~ [0-9]+ ]]; then - reviveTodo "$1" -else - usage -fi - diff --git a/.todo.actions.d/stale b/.todo.actions.d/stale deleted file mode 100755 index 97d2da2..0000000 --- a/.todo.actions.d/stale +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash - -## Stale todos storage file ## -export STALE_PATH="$TODO_DIR" -export STALE_FILE="stale.txt" -export STALE_FULL_PATH="$STALE_PATH/$STALE_FILE" -#export STALE_THRESHOLD="14d" - -## Display usage information ## -function usage { - cat <<-END - - stale - Prune and manage your stale tasks - - Usage: - stale ls - List todos in $STALE_FILE - - stale restore ITEM# - Restore specified todo out of $STALE_FILE - - stale prune ITEM# - Move specified todo to $STALE_FILE - - END - - exit 0 -} - -## Lists todos in stale.txt ## -function listStaleTodos { - $TODO_FULL_SH listfile "$STALE_FULL_PATH" - - exit 0 -} - -## Moves todo from todo.txt into stale.txt ## -function makeStale { - itemnum="$1" - getTodo "$itemnum" "$TODO_FILE" - cleanTodo=$(echo "$todo" | sed -E 's/x [0-9]{4}-[0-9]{2}-[0-9]{2} //') - if [ $TODOTXT_FORCE = 0 ]; then - echo "Move '$todo' to $STALE_FILE? (y/n)" - read -e -r ANSWER - else - ANSWER="y" - fi - if [ "$ANSWER" = "y" ]; then - echo "$todo" >> "$STALE_FULL_PATH" - if [ $TODOTXT_PRESERVE_LINE_NUMBERS = 0 ]; then - # delete line (changes line numbers) - sed -i.bak -e "${itemnum}s/^.*//" -e '/./!d' "$TODO_FILE" - else - # leave blank line behind (preserves line numbers) - sed -i.bak -e "${itemnum}s/^.*//" "$TODO_FILE" - fi - fi -exit 0 -} - -## Moves todo from stale.txt back to todo.txt ## -function restoreStaleTodo { - itemnum="$1" - getTodo "$itemnum" "$STALE_FULL_PATH" - cleanTodo=$(echo "$todo" | sed -E 's/x [0-9]{4}-[0-9]{2}-[0-9]{2} //') - $TODO_FULL_SH add "$cleanTodo" - if [ $TODOTXT_PRESERVE_LINE_NUMBERS = 0 ]; then - # delete line (changes line numbers) - sed -i.bak -e "${itemnum}s/^.*//" -e '/./!d' "$STALE_FULL_PATH" - else - # leave blank line behind (preserves line numbers) - sed -i.bak -e "${itemnum}s/^.*//" "$STALE_FULL_PATH" -fi - exit 0 -} - - -action=$1 -shift - -if [ "$1" = "usage" ]; then - usage -fi - -if [ "$1" = "ls" ]; then - listStaleTodos -elif [ "$1" = "restore" ] && [[ "$2" =~ [0-9]+ ]]; then - restoreStaleTodo "$2" -elif [ "$1" = "prune" ] && [[ "$2" =~ [0-9]+ ]]; then - makeStale "$2" -else - cat <<-EndShortUsage - $TODO_SH stale ls | List stale tasks - $TODO_SH stale prune ITEM# | Move item into $STALE_FILE - $TODO_SH stale restore ITEM# | Restore stale task - EndShortUsage -fi diff --git a/.zshrc b/.zshrc deleted file mode 100644 index b365c0b..0000000 --- a/.zshrc +++ /dev/null @@ -1,51 +0,0 @@ -# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. -if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then - source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" -fi - -# Created by newuser for 5.9 -source ~/powerlevel10k/powerlevel10k.zsh-theme - -# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. -[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh - -# History -HISTFILE=~/.zsh_history -HISTSIZE=10000 -SAVEHIST=10000 - -# Command Alias -alias lss="ls -lah" -alias yt-dlp-mp4="yt-dlp --no-config --format 'bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4]'" -alias t="todo.sh" -alias r="ranger" - -alias gco="git checkout" -alias gcm="git commit -m" -alias gss="git status -s" -alias gaa="git add -A" -alias gf="git fetch --prune" -alias gd="git pull" -alias gu="git push" - -alias ya="yadm add" -alias ycm="yadm commit -m" -alias yf="yadm fetch" -alias yd="yadm pull" -alias yu="yadm push" -alias yss="yadm status -s" - -# Exports -export EDITOR="nvim" - -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm -[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion - -export PATH="$HOME/.dotnet/tools:$PATH" -export PATH="$HOME/.yarn/bin:$PATH" - -# Emacs Mode -bindkey -e diff --git a/README.md b/README.md new file mode 100644 index 0000000..bd44da1 --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# Vylpes' Dotfiles Repository + +This repository includes all my linux configuration files + +## Package List + +This is a list of the packages I use + +- alacritty +- alsa-firmware +- alsa-lib +- alsa-plugins +- alsa-utils +- cmatrix +- cups +- discord +- dolphin-emu +- dunst +- flameshot +- gimp +- i3 +- i3lock +- i3lock-fancy +- keepassxc +- keepmenu +- lightdm +- lightdm-webkit2-greeter +- networkmanager +- nitrogen +- nodejs +- npm +- nvidia +- nvm +- openssh +- pavucontrol +- picom +- polybar +- powerlevel10k +- pulseaudio +- rofi +- rofi-emoji +- ttf-font-awesome +- ttf-hack +- vim +- x11 +- yarn +- zsh diff --git a/etc/lightdm/lightdm.conf b/etc/lightdm/lightdm.conf new file mode 100644 index 0000000..f089f90 --- /dev/null +++ b/etc/lightdm/lightdm.conf @@ -0,0 +1,163 @@ +# +# General configuration +# +# start-default-seat = True to always start one seat if none are defined in the configuration +# greeter-user = User to run greeter as +# minimum-display-number = Minimum display number to use for X servers +# minimum-vt = First VT to run displays on +# lock-memory = True to prevent memory from being paged to disk +# user-authority-in-system-dir = True if session authority should be in the system location +# guest-account-script = Script to be run to setup guest account +# logind-check-graphical = True to on start seats that are marked as graphical by logind +# log-directory = Directory to log information to +# run-directory = Directory to put running state in +# cache-directory = Directory to cache to +# sessions-directory = Directory to find sessions +# remote-sessions-directory = Directory to find remote sessions +# greeters-directory = Directory to find greeters +# backup-logs = True to move add a .old suffix to old log files when opening new ones +# dbus-service = True if LightDM provides a D-Bus service to control it +# +[LightDM] +#start-default-seat=true +#greeter-user=lightdm +#minimum-display-number=0 +#minimum-vt=7 # Setting this to a value < 7 implies security issues, see FS#46799 +#lock-memory=true +#user-authority-in-system-dir=false +#guest-account-script=guest-account +#logind-check-graphical=false +#log-directory=/var/log/lightdm +run-directory=/run/lightdm +#cache-directory=/var/cache/lightdm +#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions:/usr/share/wayland-sessions +#remote-sessions-directory=/usr/share/lightdm/remote-sessions +#greeters-directory=$XDG_DATA_DIRS/lightdm/greeters:$XDG_DATA_DIRS/xgreeters +#backup-logs=true +#dbus-service=true + +# +# Seat configuration +# +# Seat configuration is matched against the seat name glob in the section, for example: +# [Seat:*] matches all seats and is applied first. +# [Seat:seat0] matches the seat named "seat0". +# [Seat:seat-thin-client*] matches all seats that have names that start with "seat-thin-client". +# +# type = Seat type (local, xremote) +# pam-service = PAM service to use for login +# pam-autologin-service = PAM service to use for autologin +# pam-greeter-service = PAM service to use for greeters +# xserver-command = X server command to run (can also contain arguments e.g. X -special-option) +# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option) +# xserver-config = Config file to pass to X server +# xserver-layout = Layout to pass to X server +# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server +# xserver-share = True if the X server is shared for both greeter and session +# xserver-hostname = Hostname of X server (only for type=xremote) +# xserver-display-number = Display number of X server (only for type=xremote) +# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true) +# xdmcp-port = XDMCP UDP/IP port to communicate on +# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf) +# greeter-session = Session to load for greeter +# greeter-hide-users = True to hide the user list +# greeter-allow-guest = True if the greeter should show a guest login option +# greeter-show-manual-login = True if the greeter should offer a manual login option +# greeter-show-remote-login = True if the greeter should offer a remote login option +# user-session = Session to load for users +# allow-user-switching = True if allowed to switch users +# allow-guest = True if guest login is allowed +# guest-session = Session to load for guests (overrides user-session) +# session-wrapper = Wrapper script to run session with +# greeter-wrapper = Wrapper script to run greeter with +# guest-wrapper = Wrapper script to run guest sessions with +# display-setup-script = Script to run when starting a greeter session (runs as root) +# display-stopped-script = Script to run after stopping the display server (runs as root) +# greeter-setup-script = Script to run when starting a greeter (runs as root) +# session-setup-script = Script to run when starting a user session (runs as root) +# session-cleanup-script = Script to run when quitting a user session (runs as root) +# autologin-guest = True to log in as guest by default +# autologin-user = User to log in with by default (overrides autologin-guest) +# autologin-user-timeout = Number of seconds to wait before loading default user +# autologin-session = Session to load for automatic login (overrides user-session) +# autologin-in-background = True if autologin session should not be immediately activated +# exit-on-failure = True if the daemon should exit if this seat fails +# +[Seat:*] +#type=local +#pam-service=lightdm +#pam-autologin-service=lightdm-autologin +#pam-greeter-service=lightdm-greeter +#xserver-command=X +#xmir-command=Xmir +#xserver-config= +#xserver-layout= +#xserver-allow-tcp=false +#xserver-share=true +#xserver-hostname= +#xserver-display-number= +#xdmcp-manager= +#xdmcp-port=177 +#xdmcp-key= +greeter-session=lightdm-webkit2-greeter +#greeter-hide-users=false +#greeter-allow-guest=true +#greeter-show-manual-login=false +#greeter-show-remote-login=true +user-session=xmonad +#allow-user-switching=true +#allow-guest=true +#guest-session= +session-wrapper=/etc/lightdm/Xsession +#greeter-wrapper= +#guest-wrapper= +#display-setup-script= +#display-stopped-script= +#greeter-setup-script= +#session-setup-script= +#session-cleanup-script= +#autologin-guest=false +#autologin-user= +#autologin-user-timeout=0 +#autologin-in-background=false +#autologin-session= +#exit-on-failure=false + +# +# XDMCP Server configuration +# +# enabled = True if XDMCP connections should be allowed +# port = UDP/IP port to listen for connections on +# listen-address = Host/address to listen for XDMCP connections (use all addresses if not present) +# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf) +# hostname = Hostname to report to XDMCP clients (defaults to system hostname if unset) +# +# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively +# it can be a word and the first 7 characters are used as the key. +# +[XDMCPServer] +#enabled=false +#port=177 +#listen-address= +#key= +#hostname= + +# +# VNC Server configuration +# +# enabled = True if VNC connections should be allowed +# command = Command to run Xvnc server with +# port = TCP/IP port to listen for connections on +# listen-address = Host/address to listen for VNC connections (use all addresses if not present) +# width = Width of display to use +# height = Height of display to use +# depth = Color depth of display to use +# +[VNCServer] +#enabled=false +#command=Xvnc +#port=5900 +#listen-address= +#width=1024 +#height=768 +#depth=8 diff --git a/.config/alacritty/alacritty.toml b/home/vylpes/.config/alacritty/alacritty.toml similarity index 100% rename from .config/alacritty/alacritty.toml rename to home/vylpes/.config/alacritty/alacritty.toml diff --git a/.config/dunst/dunstrc b/home/vylpes/.config/dunst/dunstrc similarity index 100% rename from .config/dunst/dunstrc rename to home/vylpes/.config/dunst/dunstrc diff --git a/.config/i3/config b/home/vylpes/.config/i3/config similarity index 96% rename from .config/i3/config rename to home/vylpes/.config/i3/config index fda6ecc..4d07162 100644 --- a/.config/i3/config +++ b/home/vylpes/.config/i3/config @@ -39,10 +39,8 @@ exec_always --no-startup-id nitrogen --restore exec_always --no-startup-id dunst exec_always --no-startup-id xborders --disable-version-warning --border-red 79 --border-green 190 --border-blue 217 --border-radius 15 exec_always --no-startup-id nextcloud --background -exec_always --no-startup-id autorandr -c exec --no-startup-id polybar -r exec --no-startup-id "sh /home/vylpes/.screenlayout/default.sh" -exec --no-startup-id i3-battery-popup -n -D -L 20 -l 10 exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=ssh,secrets,pkcs11 @@ -68,11 +66,11 @@ bindsym XF86MonBrightnessDown exec brightnessctl set 10%- floating_modifier $mod # Custom keybinds -bindsym $mod+s exec --no-startup-id flameshot gui --path ~/Pictures/captures --raw | xclip -selection clipboard -target image/png +bindsym $mod+s exec --no-startup-id flameshot gui -p ~/Pictures/captures --clipboard bindsym $mod+f exec --no-startup-id firefox bindsym $mod+u exec --no-startup-id autorandr -c bindsym $mod+Shift+f exec --no-startup-id firefox --private-window -bindsym $mod+Shift+z exec --no-startup-id i3lock --color 000000 +bindsym $mod+Shift+z exec --no-startup-id i3lock-fancy -g -t "System Locked" -f Hack-Regular # ===== # start a terminal @@ -229,7 +227,6 @@ bindsym $mod+r mode "resize" # Windows to force floating for_window [class="Plexamp"] floating enable -for_window [class="PenTablet"] floating enable # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) diff --git a/home/vylpes/.config/i3status/config b/home/vylpes/.config/i3status/config new file mode 100644 index 0000000..3170ba9 --- /dev/null +++ b/home/vylpes/.config/i3status/config @@ -0,0 +1,42 @@ +# i3status configuration file. +# see "man i3status" for documentation. + +# It is important that this file is edited as UTF-8. +# The following line should contain a sharp s: +# ß +# If the above line is not correctly displayed, fix your editor first! + +general { + colors = true + color_good = "#63C5DA" + interval = 5 +} + +order += "ethernet _first_" +order += "disk /" +order += "load" +order += "memory" +order += "tztime local" + +ethernet _first_ { + format_up = "E: %ip (%speed)" + format_down = "E: down" +} + +disk "/" { + format = "%avail" +} + +load { + format = "%1min" +} + +memory { + format = "%used | %available" + threshold_degraded = "1G" + format_degraded = "MEMORY < %available" +} + +tztime local { + format = "%a %d/%m/%Y %H:%M" +} diff --git a/.config/nvim/coc-settings.json b/home/vylpes/.config/nvim/coc-settings.json similarity index 100% rename from .config/nvim/coc-settings.json rename to home/vylpes/.config/nvim/coc-settings.json diff --git a/.config/nvim/init.vim b/home/vylpes/.config/nvim/init.vim similarity index 71% rename from .config/nvim/init.vim rename to home/vylpes/.config/nvim/init.vim index 2eef270..885d4dc 100644 --- a/.config/nvim/init.vim +++ b/home/vylpes/.config/nvim/init.vim @@ -47,9 +47,32 @@ call plug#begin("~/.vim/plugged") Plug 'neovim/nvim-lspconfig' Plug 'jose-elias-alvarez/null-ls.nvim' Plug 'MunifTanjim/prettier.nvim' - Plug 'OmniSharp/omnisharp-vim' + Plug 'github/copilot.vim' + Plug 'CopilotC-Nvim/CopilotChat.nvim', { 'branch': 'main' } call plug#end() +lua << EOF +local prompts = require('CopilotChat.prompts') +local select = require('CopilotChat.select') + +require("CopilotChat").setup { + debug = false, + + question_header = '## User ', + answer_header = '## Copilot ', + error_header = '## Error ', + separator = '---', + + selection = function(source) + return select.visual(source) or select.line(source) + end, + + window = { + layout = 'float', + }, +} +EOF + if (has("termguicolors")) set termguicolors endif @@ -100,3 +123,21 @@ nnoremap ff :FZF nnoremap mm :nohl nnoremap ml :%s/\r//g +nnoremap yb :!yarn build +nnoremap yi :!yarn install +nnoremap ys :!yarn start +nnoremap yt :!yarn test + +nnoremap dr :!dotnet run + +nnoremap p (prettier-format) + +nnoremap :CopilotChatToggle +nnoremap ps :CopilotChatStop +nnoremap pr :CopilotChatReset +vnoremap pe :CopilotChatExplain +vnoremap pr :CopilotChatReview +vnoremap pf :CopilotChatFix +vnoremap po :CopilotChatOptimize +vnoremap pd :CopilotChatDocs +vnoremap pt :CopilotChatTests diff --git a/.config/picom/picom.conf b/home/vylpes/.config/picom/picom.conf similarity index 100% rename from .config/picom/picom.conf rename to home/vylpes/.config/picom/picom.conf diff --git a/.config/polybar/config.ini b/home/vylpes/.config/polybar/config.ini similarity index 100% rename from .config/polybar/config.ini rename to home/vylpes/.config/polybar/config.ini diff --git a/home/vylpes/.config/xmobar/xmobarrc0 b/home/vylpes/.config/xmobar/xmobarrc0 new file mode 100644 index 0000000..a67ae7d --- /dev/null +++ b/home/vylpes/.config/xmobar/xmobarrc0 @@ -0,0 +1,33 @@ +Config { font = "xft:hack:pixelsize=20:antialias=true:hinting=true" + , additionalFonts = [ "xft:Font Awesome 6 Free Solid:pixelsize=20" + , "xft:Font Awesome 6 Brands:pixelsize=20" + ] + , borderColor = "black" + , border = TopB + , bgColor = "black" + , fgColor = "grey" + , alpha = 255 + , position = Static { xpos = 0, ypos = 0, width = 2880, height = 30 } + , textOffset = -1 + , iconOffset = -1 + , lowerOnStart = True + , pickBroadest = False + , persistent = True + , hideOnStart = False + , iconRoot = "/home/vylpes/.xmonad/xpm" + , allDesktops = False + , overrideRedirect = True + , commands = [ Run Network "enp24s0" ["-t", "kb kb"] 10 + , Run Cpu ["-t", "%", "-L","3","-H","50", + "--normal","green","--high","red"] 10 + , Run Memory ["-t","%"] 10 + , Run Com "uname" ["-r"] "" 36000 + , Run Date "%a %_d %b %Y %H:%M" "date" 10 + , Run DiskU [("/", ""),("/home", "| hdd ")] [] 10 + , Run UnsafeStdinReader + ] + , sepChar = "%" + , alignSep = "}{" + , template = " %cpu% |  %memory% | %enp24s0% |  %disku% }\ + \{ %date% |  %uname% | %UnsafeStdinReader%" + } diff --git a/.config/yt-dlp/config b/home/vylpes/.config/yt-dlp/config similarity index 100% rename from .config/yt-dlp/config rename to home/vylpes/.config/yt-dlp/config diff --git a/home/vylpes/.vimrc b/home/vylpes/.vimrc new file mode 100644 index 0000000..25ab002 --- /dev/null +++ b/home/vylpes/.vimrc @@ -0,0 +1,20 @@ +syntax on + +set number +set linebreak +set showbreak=+++ +set showmatch +set visualbell + +set hlsearch +set smartcase +set ignorecase +set incsearch + +set autoindent +set smartindent + +set ruler + +set undolevels=1000 +set backspace=indent,eol,start diff --git a/.xinitrc b/home/vylpes/.xinitrc similarity index 100% rename from .xinitrc rename to home/vylpes/.xinitrc diff --git a/home/vylpes/.xmonad/xmonad.hs b/home/vylpes/.xmonad/xmonad.hs new file mode 100644 index 0000000..2f138b5 --- /dev/null +++ b/home/vylpes/.xmonad/xmonad.hs @@ -0,0 +1,376 @@ +-- IMPORTS + +import XMonad +import Data.Monoid +import System.Exit +import XMonad.Util.SpawnOnce +import XMonad.Util.Run +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.WorkspaceHistory +import XMonad.Hooks.DynamicLog +import XMonad.Actions.MouseResize +import Data.Map (fromList) +import Data.Monoid (mappend) +import XMonad.Layout.Grid +import XMonad.Layout.WindowArranger +import XMonad.Layout.MultiToggle +import XMonad.Hooks.ManageHelpers + +import qualified XMonad.StackSet as W +import qualified Data.Map as M +import qualified XMonad.Layout.ToggleLayouts as T + +-- The preferred terminal program, which is used in a binding below and by +-- certain contrib modules. +-- +myTerminal = "alacritty" + +-- Whether focus follows the mouse pointer. +myFocusFollowsMouse :: Bool +myFocusFollowsMouse = True + +-- Whether clicking on a window to focus also passes the click to the window +myClickJustFocuses :: Bool +myClickJustFocuses = False + +-- Width of the window border in pixels. +-- +myBorderWidth = 2 + +windowCount :: X (Maybe String) +windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset + +-- modMask lets you specify which modkey you want to use. The default +-- is mod1Mask ("left alt"). You may also consider using mod3Mask +-- ("right alt"), which does not conflict with emacs keybindings. The +-- "windows key" is usually mod4Mask. +-- +myModMask = mod4Mask + +-- The default number of workspaces (virtual screens) and their names. +-- By default we use numeric strings, but any string may be used as a +-- workspace name. The number of workspaces is determined by the length +-- of this list. +-- +-- A tagging example: +-- +-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9] +-- +myWorkspaces = ["1","2","3","4","5","6","7","8","9"] + +-- Border colors for unfocused and focused windows, respectively. +-- +myNormalBorderColor = "#222222" +myFocusedBorderColor = "#dddddd" + +------------------------------------------------------------------------ +-- Key bindings. Add, modify or remove key bindings here. +-- +myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ + + -- launch a terminal + [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) + + -- launch dmenu +-- , ((modm, xK_p ), spawn "sh ~/.scripts/dmenu_fix") +-- , ((modm, xK_p ), spawn "dmenu_run") + , ((modm, xK_p ), spawn "rofi -combi-modi window,drun,ssh -theme Arc-Dark -font 'hack 18' -show combi") + , ((modm .|. shiftMask, xK_m ), spawn "rofi -show emoji -modi emoji -theme Arc-Dark -font 'hack 18'") + + -- launch firefox + , ((modm .|. shiftMask, xK_b ), spawn "firefox") + + -- launch flameshot + , ((modm .|. shiftMask, xK_s ), spawn "flameshot full -c -p ~/captures") + , ((modm, xK_s ), spawn "flameshot gui -p ~/captures") + + -- launch gmrun + , ((modm .|. shiftMask, xK_p ), spawn "gmrun") + + -- close focused window + , ((modm .|. shiftMask, xK_c ), kill) + + -- Rotate through the available layout algorithms + , ((modm, xK_space ), sendMessage NextLayout) + + -- Reset the layouts on the current workspace to default + , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) + + -- Resize viewed windows to the correct size + , ((modm, xK_n ), refresh) + + -- Move focus to the next window + , ((modm, xK_Tab ), windows W.focusDown) + + -- Move focus to the next window + , ((modm, xK_j ), windows W.focusDown) + + -- Move focus to the previous window + , ((modm, xK_k ), windows W.focusUp ) + + -- Move focus to the master window + , ((modm, xK_m ), windows W.focusMaster ) + + -- Swap the focused window and the master window + , ((modm, xK_Return), windows W.swapMaster) + + -- Swap the focused window with the next window + , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) + + -- Swap the focused window with the previous window + , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) + + -- Shrink the master area + , ((modm, xK_h ), sendMessage Shrink) + + -- Expand the master area + , ((modm, xK_l ), sendMessage Expand) + + -- Lock the screen + , ((modm .|. shiftMask, xK_z ), spawn "dm-tool lock") + + -- Push window back into tiling + , ((modm, xK_t ), withFocused $ windows . W.sink) + + -- Increment the number of windows in the master area + , ((modm , xK_comma ), sendMessage (IncMasterN 1)) + + -- Deincrement the number of windows in the master area + , ((modm , xK_period), sendMessage (IncMasterN (-1))) + + -- Toggle the status bar gap + -- Use this binding with avoidStruts from Hooks.ManageDocks. + -- See also the statusBar function from Hooks.DynamicLog. + -- + -- , ((modm , xK_b ), sendMessage ToggleStruts) + + -- Quit xmonad + , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) + + -- Restart xmonad + , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") + + -- Run xmessage with a summary of the default keybindings (useful for beginners) + , ((modm .|. shiftMask, xK_slash ), spawn ("echo \"" ++ help ++ "\" | xmessage -file -")) + ] + ++ + + -- + -- mod-[1..9], Switch to workspace N + -- mod-shift-[1..9], Move client to workspace N + -- + [((m .|. modm, k), windows $ f i) + | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] + , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] + ++ + + -- + -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 + -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 + -- + [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) + | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] + , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] + + +------------------------------------------------------------------------ +-- Mouse bindings: default actions bound to mouse events +-- +myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ + + -- mod-button1, Set the window to floating mode and move by dragging + [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w + >> windows W.shiftMaster)) + + -- mod-button2, Raise the window to the top of the stack + , ((modm, button2), (\w -> focus w >> windows W.shiftMaster)) + + -- mod-button3, Set the window to floating mode and resize by dragging + , ((modm, button3), (\w -> focus w >> mouseResizeWindow w + >> windows W.shiftMaster)) + + -- you may also bind events to the mouse scroll wheel (button4 and button5) + ] + +------------------------------------------------------------------------ +-- Layouts: + +-- You can specify and transform your layouts by modifying these values. +-- If you change layout bindings be sure to use 'mod-shift-space' after +-- restarting (with 'mod-q') to reset your layout state to the new +-- defaults, as xmonad preserves your old layout settings by default. +-- +-- The available layouts. Note that each layout is separated by |||, +-- which denotes layout choice. +-- +myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full ||| Grid) + where + -- default tiling algorithm partitions the screen into two panes + tiled = Tall nmaster delta ratio + + -- The default number of windows in the master pane + nmaster = 1 + + -- Default proportion of screen occupied by master pane + ratio = 1/2 + + -- Percent of screen to increment by when resizing panes + delta = 3/100 + +------------------------------------------------------------------------ +-- 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. +-- +myManageHook = composeAll + [ className =? "MPlayer" --> doFloat + , className =? "Gimp" --> doFloat + , resource =? "desktop_window" --> doIgnore + , resource =? "kdesktop" --> doIgnore ] + +------------------------------------------------------------------------ +-- Event handling + +-- * EwmhDesktops users should change this to ewmhDesktopsEventHook +-- +-- Defines a custom handler function for X Events. The function should +-- return (All True) if the default handler is to be run afterwards. To +-- combine event hooks use mappend or mconcat from Data.Monoid. +-- +myEventHook = mempty + +------------------------------------------------------------------------ +-- Status bars and logging + +-- Perform an arbitrary action on each internal state change or X event. +-- See the 'XMonad.Hooks.DynamicLog' extension for examples. +-- +myLogHook = return () + +------------------------------------------------------------------------ +-- 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. +-- +-- By default, do nothing. +myStartupHook = do + spawnOnce "nitrogen --restore &" + spawnOnce "picom &" + spawnOnce "unclutter &" + spawnOnce "dunst &" + spawnOnce "setxkbmap us" + +------------------------------------------------------------------------ +-- Now run xmonad with all the defaults we set up. + +-- Run xmonad with the settings you specify. No need to modify this. +-- +main :: IO () +main = do + xmproc0 <- spawnPipe "xmobar -x 0 /home/vylpes/.config/xmobar/xmobarrc0" +-- xmproc1 <- spawnPipe "xmobar -x 1 /home/vylpes/.config/xmobar/xmobarrc1" + xmonad $ docks $ defaults xmproc0 + +-- A structure containing your configuration settings, overriding +-- fields in the default config. Any you don't override, will +-- use the defaults defined in xmonad/XMonad/Config.hs +-- +-- No need to modify this. +-- +defaults xmproc0 = def { + -- simple stuff + terminal = myTerminal, + focusFollowsMouse = myFocusFollowsMouse, + clickJustFocuses = myClickJustFocuses, + borderWidth = myBorderWidth, + modMask = myModMask, + workspaces = myWorkspaces, + normalBorderColor = myNormalBorderColor, + focusedBorderColor = myFocusedBorderColor, + + -- key bindings + keys = myKeys, + mouseBindings = myMouseBindings, + + -- hooks, layouts + layoutHook = myLayout, + manageHook = ( isFullscreen --> doFullFloat ) <+> myManageHook <+> manageDocks, + handleEventHook = myEventHook, +-- logHook = myLogHook, + logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP + { ppOutput = \x -> hPutStrLn xmproc0 x + , ppCurrent = xmobarColor "#98be65" "" . wrap "[" "]" + , ppVisible = xmobarColor "#98be65" "" + , ppHidden = xmobarColor "#82AAFF" "" . wrap "*" "" + , ppHiddenNoWindows = xmobarColor "#c792ea" "" + , ppTitle = xmobarColor "#b3afc2" "" . shorten 60 + , ppSep = " | " + , ppUrgent = xmobarColor "#C45500" "" . wrap "!" "!" + , ppExtras = [windowCount] + , ppOrder = \(ws:l:t:ex) -> [ws,l] + }, + startupHook = myStartupHook + } + +-- | Finally, a copy of the default bindings in simple textual tabular format. +help :: String +help = unlines ["The default modifier key is 'alt'. Default keybindings:", + "", + "-- launching and killing programs", + "mod-Shift-Enter Launch xterminal", + "mod-p Launch dmenu", + "mod-Shift-p Launch gmrun", + "mod-Shift-c Close/kill the focused window", + "mod-Space Rotate through the available layout algorithms", + "mod-Shift-Space Reset the layouts on the current workSpace to default", + "mod-n Resize/refresh viewed windows to the correct size", + "", + "-- move focus up or down the window stack", + "mod-Tab Move focus to the next window", + "mod-Shift-Tab Move focus to the previous window", + "mod-j Move focus to the next window", + "mod-k Move focus to the previous window", + "mod-m Move focus to the master window", + "", + "-- modifying the window order", + "mod-Return Swap the focused window and the master window", + "mod-Shift-j Swap the focused window with the next window", + "mod-Shift-k Swap the focused window with the previous window", + "", + "-- resizing the master/slave ratio", + "mod-h Shrink the master area", + "mod-l Expand the master area", + "", + "-- floating layer support", + "mod-t Push window back into tiling; unfloat and re-tile it", + "", + "-- increase or decrease number of windows in the master area", + "mod-comma (mod-,) Increment the number of windows in the master area", + "mod-period (mod-.) Deincrement the number of windows in the master area", + "", + "-- quit, or restart", + "mod-Shift-q Quit xmonad", + "mod-q Restart xmonad", + "mod-[1..9] Switch to workSpace N", + "", + "-- Workspaces & screens", + "mod-Shift-[1..9] Move client to workspace N", + "mod-{w,e,r} Switch to physical/Xinerama screens 1, 2, or 3", + "mod-Shift-{w,e,r} Move client to screen 1, 2, or 3", + "", + "-- Mouse bindings: default actions bound to mouse events", + "mod-button1 Set the window to floating mode and move by dragging", + "mod-button2 Raise the window to the top of the stack", + "mod-button3 Set the window to floating mode and resize by dragging"] diff --git a/home/vylpes/.xprofile b/home/vylpes/.xprofile new file mode 100644 index 0000000..86aeba2 --- /dev/null +++ b/home/vylpes/.xprofile @@ -0,0 +1,7 @@ +xrandr --output DP-4 --scale 0.75x0.75 + +dwmblocks & +dunst & +nitrogen --restore & +picom & +variety & diff --git a/scripts/audio/get-sink-name.sh b/home/vylpes/scripts/audio/get-sink-name.sh similarity index 100% rename from scripts/audio/get-sink-name.sh rename to home/vylpes/scripts/audio/get-sink-name.sh diff --git a/home/vylpes/scripts/system/power.sh b/home/vylpes/scripts/system/power.sh new file mode 100644 index 0000000..65121b5 --- /dev/null +++ b/home/vylpes/scripts/system/power.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +option=$(printf "sleep\nlogout\nshutdown\nrestart" | rofi -dmenu -theme Arc-Dark -font 'hack 18') + +if [ "$option" = "sleep" ]; +then + i3lock-fancy -g -t "System Locked" -f Hack-Regular + systemctl suspend +elif [ "$option" = "logout" ]; +then + i3-msg exit +elif [ "$option" = "shutdown" ]; +then + poweroff +elif [ "$option" = "restart" ]; +then + reboot +fi diff --git a/scripts/system/power.sh b/scripts/system/power.sh deleted file mode 100644 index a48a9f7..0000000 --- a/scripts/system/power.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -option=$(printf "lock\nsleep\nlogout\nshutdown\nrestart" | rofi -dmenu -theme Arc-Dark -font 'hack 18') - -if [ "$option" = "lock" ]; -then - i3lock --color 000000 -elif [ "$option" = "sleep" ]; -then - i3lock --color 000000 - systemctl suspend -elif [ "$option" = "logout" ]; -then - i3-msg exit -elif [ "$option" = "shutdown" ]; -then - poweroff -elif [ "$option" = "restart" ]; -then - reboot -fi