diff options
Diffstat (limited to 'files')
56 files changed, 3474 insertions, 0 deletions
diff --git a/files/.Xmodmap b/files/.Xmodmap new file mode 100644 index 0000000..cb4706f --- /dev/null +++ b/files/.Xmodmap | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | clear lock | ||
| 2 | keycode 0x42 = Escape | ||
diff --git a/files/.bash_profile b/files/.bash_profile new file mode 100644 index 0000000..14802fe --- /dev/null +++ b/files/.bash_profile | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | # Honor per-interactive-shell startup file | ||
| 2 | if [ -f ~/.bashrc ]; then . ~/.bashrc; fi | ||
| 3 | |||
| 4 | export GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles | ||
| 5 | |||
| 6 | for i in $GUIX_EXTRA_PROFILES/*; do | ||
| 7 | profile=$i/$(basename "$i") | ||
| 8 | if [ -f "$profile"/etc/profile ]; then | ||
| 9 | GUIX_PROFILE="$profile" | ||
| 10 | . "$GUIX_PROFILE"/etc/profile | ||
| 11 | fi | ||
| 12 | unset profile | ||
| 13 | done | ||
| 14 | |||
| 15 | export NIX_PATH=~/.nix-defexpr/channels/nixos/ | ||
| 16 | |||
| 17 | . .profile | ||
diff --git a/files/.bin/arduino-cli b/files/.bin/arduino-cli new file mode 100755 index 0000000..7c0d41a --- /dev/null +++ b/files/.bin/arduino-cli | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | ||
| 4 | |||
| 5 | if [[ $(docker images | grep jd-arduino-cli | wc -l) -eq 0 ]] | ||
| 6 | then | ||
| 7 | docker build -f "$SCRIPT_DIR/jd-arduino-cli.Dockerfile" -t jd-arduino-cli . | ||
| 8 | fi | ||
| 9 | |||
| 10 | docker run --rm --network none -it --privileged \ | ||
| 11 | -v $(pwd):/src \ | ||
| 12 | -v jd-arduino-cli-tmp:/tmp \ | ||
| 13 | -v /dev:/dev jd-arduino-cli \ | ||
| 14 | arduino-cli $@ | ||
diff --git a/files/.bin/chiaki b/files/.bin/chiaki new file mode 100755 index 0000000..5fa6547 --- /dev/null +++ b/files/.bin/chiaki | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | CHIAKI_SHELL=/tmp/.chiaki.nix | ||
| 4 | |||
| 5 | cat <<EOF > $CHIAKI_SHELL | ||
| 6 | let | ||
| 7 | nixgl = import (fetchTarball https://github.com/guibou/nixGL/archive/main.tar.gz) { }; | ||
| 8 | in | ||
| 9 | { nixpkgs ? import <nixpkgs> {} }: | ||
| 10 | with nixpkgs; mkShell { | ||
| 11 | buildInputs = [ | ||
| 12 | chiaki | ||
| 13 | nixgl.auto.nixGLDefault | ||
| 14 | ]; | ||
| 15 | shellHook = '' | ||
| 16 | nixGL chiaki && exit; | ||
| 17 | ''; | ||
| 18 | } | ||
| 19 | EOF | ||
| 20 | |||
| 21 | nix-shell $CHIAKI_SHELL | ||
diff --git a/files/.bin/clean.sh b/files/.bin/clean.sh new file mode 100755 index 0000000..3e6bbfd --- /dev/null +++ b/files/.bin/clean.sh | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | sudo emerge --ask --depclean; | ||
diff --git a/files/.bin/download_music.sh b/files/.bin/download_music.sh new file mode 100755 index 0000000..e3a3601 --- /dev/null +++ b/files/.bin/download_music.sh | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | BOLD="\e[1"; | ||
| 4 | ENDCOLOR="\e[0m"; | ||
| 5 | Green="32"; | ||
| 6 | LightRed="31"; | ||
| 7 | |||
| 8 | if ! [ $1 ]; then | ||
| 9 | echo "" | ||
| 10 | echo -e $BOLD";"";"$LightRed"m Please provide music url!"$ENDCOLOR | ||
| 11 | echo "" | ||
| 12 | exit | ||
| 13 | fi | ||
| 14 | |||
| 15 | MUSIC_DIR="~/Documents/Music/%(artist)s/%(album)s/%(title)s-%(id)s.%(ext)s" | ||
| 16 | if [ $2 ]; then | ||
| 17 | MUSIC_DIR="${a}/%(artist)s/%(album)s/%(title)s-%(id)s.%(ext)s" | ||
| 18 | fi | ||
| 19 | |||
| 20 | echo "" | ||
| 21 | echo -e $BOLD";"";"$Green"m Music will download to ${MUSIC_DIR} directory!"$ENDCOLOR | ||
| 22 | echo "" | ||
| 23 | |||
| 24 | sleep 1 | ||
| 25 | |||
| 26 | yt-dlp -x --audio-format mp3 --embed-metadata -o $MUSIC_DIR $1 | ||
diff --git a/files/.bin/esp_upload.sh b/files/.bin/esp_upload.sh new file mode 100755 index 0000000..27d8d41 --- /dev/null +++ b/files/.bin/esp_upload.sh | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | # rm /tmp/arduino-sketch-*/ -r | ||
| 4 | ~/.local/bin/arduino-cli cache clean | ||
| 5 | ~/.local/bin/arduino-cli compile --fqbn esp8266:esp8266:nodemcuv2 | ||
| 6 | ~/.local/bin/arduino-cli upload -p /dev/ttyUSB0 --fqbn esp8266:esp8266:nodemcuv2 | ||
diff --git a/files/.bin/file_upload.sh b/files/.bin/file_upload.sh new file mode 100755 index 0000000..0ff6c57 --- /dev/null +++ b/files/.bin/file_upload.sh | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | BOLD="\e[1"; | ||
| 4 | ENDCOLOR="\e[0m"; | ||
| 5 | Green="32m"; | ||
| 6 | LightRed="31m"; | ||
| 7 | |||
| 8 | echo "" | ||
| 9 | echo -e $BOLD";"";"$Green" FILE UPLOADER"$ENDCOLOR | ||
| 10 | echo "" | ||
| 11 | |||
| 12 | if ! [ $1 ]; then | ||
| 13 | echo "" | ||
| 14 | echo -e $BOLD";"";"$LightRed" Please provide file path!"$ENDCOLOR | ||
| 15 | echo "" | ||
| 16 | exit | ||
| 17 | fi | ||
| 18 | |||
| 19 | if [ $1 ]; then | ||
| 20 | echo -e " Are u sure u want upload this file: "$BOLD";"";"$Green" '$1'"$ENDCOLOR"? [y/N]: " | ||
| 21 | read -p " " input | ||
| 22 | echo "" | ||
| 23 | # read -r -p " " input | ||
| 24 | case $input in | ||
| 25 | [yY][eE][sS]|[yY]) | ||
| 26 | URL=$(curl -s -F "file=@$1" https://0x0.st); | ||
| 27 | echo -e " URL: "$BOLD";"";"$Green"$URL"$ENDCOLOR; | ||
| 28 | ;; | ||
| 29 | [nN][oO]|[nN]) | ||
| 30 | echo -e $BOLD";"";"$Green" OK"$ENDCOLOR; | ||
| 31 | ;; | ||
| 32 | *) | ||
| 33 | echo -e $BOLD";"";"$LightRed" Invalid input..."$ENDCOLOR; | ||
| 34 | exit 1 | ||
| 35 | ;; | ||
| 36 | esac | ||
| 37 | echo "" | ||
| 38 | fi; | ||
diff --git a/files/.bin/guix-container b/files/.bin/guix-container new file mode 100755 index 0000000..162eda0 --- /dev/null +++ b/files/.bin/guix-container | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | guix shell -C -F -N \ | ||
| 4 | -E XDG_RUNTIME_DIR=/tmp \ | ||
| 5 | -E WAYLAND_DISPLAY \ | ||
| 6 | -E DISPLAY \ | ||
| 7 | --share=$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY=/tmp/$WAYLAND_DISPLAY \ | ||
| 8 | $@ coreutils | ||
diff --git a/files/.bin/home-reconfigure b/files/.bin/home-reconfigure new file mode 100755 index 0000000..f3a4e5f --- /dev/null +++ b/files/.bin/home-reconfigure | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | JD_HOME=1 guix home -L $HOME/dotfiles/guix reconfigure $HOME/dotfiles/guix/jd/desktops/$(hostname).scm | ||
diff --git a/files/.bin/jd-arduino-cli.Dockerfile b/files/.bin/jd-arduino-cli.Dockerfile new file mode 100644 index 0000000..cb8eb91 --- /dev/null +++ b/files/.bin/jd-arduino-cli.Dockerfile | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | FROM python:3.12-rc-slim | ||
| 2 | |||
| 3 | RUN apt update && apt install -y wget && \ | ||
| 4 | wget https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_64bit.tar.gz && \ | ||
| 5 | tar -C /usr/bin/ -xf arduino-cli_nightly-latest_Linux_64bit.tar.gz | ||
| 6 | |||
| 7 | RUN mkdir ~/.arduino15 && \ | ||
| 8 | echo "board_manager:" > ~/.arduino15/arduino-cli.yaml && \ | ||
| 9 | echo " additional_urls:" >> ~/.arduino15/arduino-cli.yaml && \ | ||
| 10 | echo " - http://arduino.esp8266.com/stable/package_esp8266com_index.json" >> ~/.arduino15/arduino-cli.yaml | ||
| 11 | |||
| 12 | |||
| 13 | RUN arduino-cli core update-index && \ | ||
| 14 | arduino-cli core install esp8266:esp8266 | ||
| 15 | |||
| 16 | WORKDIR /src \ No newline at end of file | ||
diff --git a/files/.bin/mount-nas-abaks b/files/.bin/mount-nas-abaks new file mode 100755 index 0000000..6c14817 --- /dev/null +++ b/files/.bin/mount-nas-abaks | |||
| @@ -0,0 +1 @@ | |||
| sudo mount -t cifs -o vers=2.0,username=kdlugosz,password=$(pass nas/abaks/kdlugosz) //195.74.91.28/kdlugosz /mnt \ No newline at end of file | |||
diff --git a/files/.bin/oath b/files/.bin/oath new file mode 100755 index 0000000..7444993 --- /dev/null +++ b/files/.bin/oath | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | if [[ $1 ]]; then | ||
| 4 | PASS=$(oathtool -b --totp $(pass show "oath/$1")) | ||
| 5 | printf $PASS | wl-copy | ||
| 6 | echo "pass: $PASS" | ||
| 7 | echo "Password should be in your clipboard!" | ||
| 8 | else | ||
| 9 | echo "Usage: oath <pass>" | ||
| 10 | echo "Available pass:" | ||
| 11 | pass oath | ||
| 12 | fi | ||
| 13 | |||
| 14 | |||
diff --git a/files/.bin/profile-add-all b/files/.bin/profile-add-all new file mode 100755 index 0000000..bca4178 --- /dev/null +++ b/files/.bin/profile-add-all | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles | ||
| 4 | for i in $HOME/.config/guix/manifests/*; do | ||
| 5 | echo $i | ||
| 6 | MANIFEST_NAME=$(basename $i .scm) | ||
| 7 | mkdir -p "$GUIX_EXTRA_PROFILES"/"$MANIFEST_NAME" | ||
| 8 | guix package --manifest=$i --profile="$GUIX_EXTRA_PROFILES/$MANIFEST_NAME/$MANIFEST_NAME" | ||
| 9 | done | ||
diff --git a/files/.bin/stumpish b/files/.bin/stumpish new file mode 100755 index 0000000..9e95c0c --- /dev/null +++ b/files/.bin/stumpish | |||
| @@ -0,0 +1,196 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | # Copyright (C) 2007 Jonathan Moore Liles | ||
| 4 | # | ||
| 5 | # Maintainer: Jonathan Moore Liles | ||
| 6 | # | ||
| 7 | # stumpish is free software; you can redistribute it and/or modify | ||
| 8 | # it under the terms of the GNU General Public License as published by | ||
| 9 | # the Free Software Foundation; either version 2, or (at your option) | ||
| 10 | # any later version. | ||
| 11 | # | ||
| 12 | # stumpish is distributed in the hope that it will be useful, | ||
| 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | # GNU General Public License for more details. | ||
| 16 | # | ||
| 17 | # You should have received a copy of the GNU General Public License | ||
| 18 | # along with this software; see the file COPYING. If not, see | ||
| 19 | # <http://www.gnu.org/licenses/>. | ||
| 20 | |||
| 21 | ### STUMPwm Interactive SHell. | ||
| 22 | |||
| 23 | DELAY=0.01 | ||
| 24 | |||
| 25 | if ! sleep $DELAY 2>/dev/null >&2 | ||
| 26 | then | ||
| 27 | DELAY=1 | ||
| 28 | fi | ||
| 29 | |||
| 30 | # replace -E with -r option for old versions of GNU sed | ||
| 31 | if ! sed -E 1p /dev/null 2>/dev/null; then | ||
| 32 | sed() { shift; command sed -r "$@"; } | ||
| 33 | fi | ||
| 34 | |||
| 35 | # parse C-style backslash sequences by default | ||
| 36 | if [ "$(echo -e foo)" = foo ]; then | ||
| 37 | echo() { builtin echo -e "$@"; } | ||
| 38 | fi | ||
| 39 | |||
| 40 | wait_result () | ||
| 41 | { | ||
| 42 | while true | ||
| 43 | do | ||
| 44 | RESULT=$(xprop -root -f STUMPWM_COMMAND_RESULT 8s \ | ||
| 45 | STUMPWM_COMMAND_RESULT 2>/dev/null | | ||
| 46 | sed -E 's/\\([[:digit:]]+)/\\0\1/g') | ||
| 47 | if echo "$RESULT" | grep -v -q 'not found.$' | ||
| 48 | then | ||
| 49 | break | ||
| 50 | fi | ||
| 51 | |||
| 52 | sleep $DELAY | ||
| 53 | done | ||
| 54 | |||
| 55 | xprop -root -remove STUMPWM_COMMAND_RESULT | ||
| 56 | |||
| 57 | if echo "$RESULT" | grep -q '= $' | ||
| 58 | then | ||
| 59 | return 0 | ||
| 60 | fi | ||
| 61 | |||
| 62 | echo "$RESULT" | | ||
| 63 | sed -E 's/[^"\\n]+"// | ||
| 64 | /^"[[:space:]]*$/d | ||
| 65 | s/(^|[^\\])\\n/\1\ | ||
| 66 | /g | ||
| 67 | s/\\(["\\n])/\1/g | ||
| 68 | s/\^([*[:digit:]]+|[Bbn])//g' | ||
| 69 | } | ||
| 70 | |||
| 71 | send_cmd () | ||
| 72 | { | ||
| 73 | local cmd="$1" | ||
| 74 | |||
| 75 | if [ "$cmd" = "stumpwm-quit" ] | ||
| 76 | then | ||
| 77 | cmd=quit | ||
| 78 | elif [ "$cmd" = "quit" ] | ||
| 79 | then | ||
| 80 | exit | ||
| 81 | fi | ||
| 82 | |||
| 83 | xprop -root -f STUMPWM_COMMAND 8s -set STUMPWM_COMMAND "$cmd" | ||
| 84 | |||
| 85 | wait_result | ||
| 86 | } | ||
| 87 | |||
| 88 | usage () | ||
| 89 | { | ||
| 90 | cat <<EOF | ||
| 91 | Usage: ${0##*/} [[-e|-r] command [args...]] | ||
| 92 | |||
| 93 | StumpIsh is the StumpWM shell. Use it to interact a running StumpWM | ||
| 94 | instance. When run from a terminal with no arguments, stumpish | ||
| 95 | accepts commands interactively and prints each result. If standard | ||
| 96 | input is a pipe, stumpish executes any number of commands and prints | ||
| 97 | the concatenated results. If the '-e' option and one argument are | ||
| 98 | given on the command line, stumpish reads any number of lines from | ||
| 99 | standard input and uses them as the argument to the named command. | ||
| 100 | Otherwise, if one or more arguments are provided on the command line, | ||
| 101 | the first is considered the name of the command to execute and the | ||
| 102 | remainder is concatenated to form the argument. | ||
| 103 | |||
| 104 | Example: | ||
| 105 | echo '(group-windows (current-group))' | ${0##*/} -e eval | ||
| 106 | EOF | ||
| 107 | exit 0; | ||
| 108 | } | ||
| 109 | |||
| 110 | warn () | ||
| 111 | { | ||
| 112 | { | ||
| 113 | tput md bold | ||
| 114 | tput AF setaf 1 | ||
| 115 | echo 'WARN:\c' | ||
| 116 | tput me sgr0 | ||
| 117 | echo " $*" | ||
| 118 | } >&2 | ||
| 119 | } | ||
| 120 | |||
| 121 | tput () | ||
| 122 | { | ||
| 123 | local cap1=$1 cap2=$2 | ||
| 124 | shift 2 | ||
| 125 | |||
| 126 | command tput $cap1 $@ 2>/dev/null || | ||
| 127 | command tput $cap2 $@ 2>/dev/null | ||
| 128 | } | ||
| 129 | |||
| 130 | READLINE=yes | ||
| 131 | |||
| 132 | if [ "x$1" = "x-r" ] | ||
| 133 | then | ||
| 134 | READLINE=no | ||
| 135 | shift 1 | ||
| 136 | fi | ||
| 137 | |||
| 138 | if [ $# -gt 0 ] | ||
| 139 | then | ||
| 140 | [ "$1" = "--help" ] && usage | ||
| 141 | if [ "$1" = "-e" ] | ||
| 142 | then | ||
| 143 | if [ $# -ne 2 ] | ||
| 144 | then | ||
| 145 | echo "'-e' requires exactly one argument!" | ||
| 146 | exit | ||
| 147 | fi | ||
| 148 | shift 1 | ||
| 149 | IFS='' | ||
| 150 | ARGS=$(cat /dev/stdin) | ||
| 151 | send_cmd "$1 $ARGS" | ||
| 152 | else | ||
| 153 | IFS=' ' | ||
| 154 | send_cmd "$*" | ||
| 155 | fi | ||
| 156 | else | ||
| 157 | if [ -t 0 ] | ||
| 158 | then | ||
| 159 | if ! type rlwrap 2>/dev/null >&2 | ||
| 160 | then | ||
| 161 | warn rlwrap not found, command completion won\'t work | ||
| 162 | elif [ $READLINE = yes ] | ||
| 163 | then | ||
| 164 | COMMANDS="${TMPDIR:-/tmp}/stumpish.commands.$$" | ||
| 165 | echo $(send_cmd "commands") | | ||
| 166 | sed -E 's/[[:space:]]+/\ | ||
| 167 | /g' | | ||
| 168 | sort > "$COMMANDS" | ||
| 169 | trap 'rm -f "$COMMANDS"' exit int term | ||
| 170 | rlwrap -b '' -f "$COMMANDS" "$0" -r | ||
| 171 | exit | ||
| 172 | fi | ||
| 173 | |||
| 174 | tput AF setaf 5 | ||
| 175 | echo Welcome to the STUMPwm Interactive SHell. | ||
| 176 | tput me sgr0 | ||
| 177 | echo 'Type \c' | ||
| 178 | tput AF setaf 2 | ||
| 179 | echo 'commands\c' | ||
| 180 | tput me sgr0 | ||
| 181 | echo \ for a list of commands. | ||
| 182 | |||
| 183 | while read -p '> ' REPLY | ||
| 184 | do | ||
| 185 | tput md bold | ||
| 186 | tput AF setaf 2 | ||
| 187 | send_cmd "$REPLY" | ||
| 188 | tput me sgr0 | ||
| 189 | done | ||
| 190 | else | ||
| 191 | while read REPLY | ||
| 192 | do | ||
| 193 | send_cmd "$REPLY" | ||
| 194 | done | ||
| 195 | fi | ||
| 196 | fi | ||
diff --git a/files/.bin/system-reconfigure b/files/.bin/system-reconfigure new file mode 100755 index 0000000..c4c1a05 --- /dev/null +++ b/files/.bin/system-reconfigure | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | sudo -E guix system -L $HOME/dotfiles/guix reconfigure $HOME/dotfiles/guix/jd/desktops/$(hostname).scm \ No newline at end of file | ||
diff --git a/files/.bin/update.sh b/files/.bin/update.sh new file mode 100755 index 0000000..e6f9f8d --- /dev/null +++ b/files/.bin/update.sh | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | sudo emerge --sync | ||
| 4 | sudo emerge --ask --verbose --update --newuse --deep @world; | ||
diff --git a/files/.bin/whois-at-hsp b/files/.bin/whois-at-hsp new file mode 100755 index 0000000..982a90e --- /dev/null +++ b/files/.bin/whois-at-hsp | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | #!/usr/bin/env -S guix shell guile guile-json -- guile --no-auto-compile -e main -s | ||
| 2 | -*- scheme -*- | ||
| 3 | !# | ||
| 4 | |||
| 5 | (use-modules (srfi srfi-1) | ||
| 6 | (ice-9 iconv) | ||
| 7 | (ice-9 receive) | ||
| 8 | (web client) | ||
| 9 | (json)) | ||
| 10 | |||
| 11 | (define whois-at-hsp-endpoint "https://whois.at.hsp.sh/api/now") | ||
| 12 | |||
| 13 | (define (http-get-serialize-json url) | ||
| 14 | (receive (response data) (http-request url) | ||
| 15 | (values (json-string->scm (bytevector->string data "UTF-8")) | ||
| 16 | response))) | ||
| 17 | |||
| 18 | (define (whois-data->users whois-data) | ||
| 19 | (assoc-ref whois-data "users")) | ||
| 20 | |||
| 21 | (define (whois-data->unknown-devices whois-data) | ||
| 22 | (assoc-ref whois-data "unknown_devices")) | ||
| 23 | |||
| 24 | (define (whois-data->head-count whois-data) | ||
| 25 | (assoc-ref whois-data "headcount")) | ||
| 26 | |||
| 27 | (define (whois-data->formated-users whois-data) | ||
| 28 | (let ((users (vector->list (whois-data->users whois-data)))) | ||
| 29 | (if (> (length users) 0) | ||
| 30 | (fold-right | ||
| 31 | (lambda (a b) (string-append a " " b)) | ||
| 32 | "" | ||
| 33 | users) | ||
| 34 | "No visible users!"))) | ||
| 35 | |||
| 36 | (define (whois-data->summary whois-data) | ||
| 37 | (string-append | ||
| 38 | "Unknown devices: " | ||
| 39 | (number->string (whois-data->unknown-devices whois-data)) | ||
| 40 | "\nUsers: [" (number->string (whois-data->head-count whois-data)) "] " | ||
| 41 | (whois-data->formated-users whois-data))) | ||
| 42 | |||
| 43 | (define (notify data) | ||
| 44 | (system* "notify-send" | ||
| 45 | "WHOIS AT HSP" | ||
| 46 | (whois-data->summary data))) | ||
| 47 | |||
| 48 | (define (command-line-option? option args) | ||
| 49 | (> (length (or (member option args) | ||
| 50 | '())) | ||
| 51 | 0)) | ||
| 52 | |||
| 53 | (define-syntax-rule (command-line-args-handle args default ((option ...) body ...) ...) | ||
| 54 | (let ((option? (lambda (o) (command-line-option? o args)))) | ||
| 55 | (cond ((or (option? option) ...) body ...) ... | ||
| 56 | (#t default)))) | ||
| 57 | |||
| 58 | ;; (command-line-args-handle '("a" "--help") | ||
| 59 | ;; 0 | ||
| 60 | ;; (("-h" "--help") "dupa")) | ||
| 61 | |||
| 62 | (define (main args) | ||
| 63 | (let ((whois-data (http-get-serialize-json whois-at-hsp-endpoint))) | ||
| 64 | (command-line-args-handle args | ||
| 65 | (begin (display (whois-data->summary whois-data)) | ||
| 66 | (newline)) | ||
| 67 | (("-h" "--help") | ||
| 68 | (display (string-append "-h, --help Help message\n" | ||
| 69 | "-n, --notify Notification massage with whois information.\n" | ||
| 70 | "-u Get users\n" | ||
| 71 | "-H Get head count\n" | ||
| 72 | "-U Get unknown devices\n"))) | ||
| 73 | (("-n" "--notify") | ||
| 74 | (notify whois-data)) | ||
| 75 | (("-u") | ||
| 76 | (display (whois-data->formated-users whois-data)) | ||
| 77 | (newline)) | ||
| 78 | (("-H") | ||
| 79 | (display (whois-data->head-count whois-data)) | ||
| 80 | (newline)) | ||
| 81 | (("-U") | ||
| 82 | (display (whois-data->unknown-devices whois-data)) | ||
| 83 | (newline))))) | ||
| 84 | |||
diff --git a/files/.config/alacritty/alacritty.toml b/files/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..39fd4e9 --- /dev/null +++ b/files/.config/alacritty/alacritty.toml | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | [cursor] | ||
| 2 | style = "Block" | ||
| 3 | unfocused_hollow = true | ||
| 4 | |||
| 5 | [font] | ||
| 6 | size = 14 | ||
| 7 | |||
| 8 | [font.italic] | ||
| 9 | family = "Terminus" | ||
| 10 | style = "Light Italic" | ||
| 11 | |||
| 12 | [font.normal] | ||
| 13 | family = "Terminus" | ||
| 14 | style = "Light" | ||
| 15 | |||
| 16 | [font.offset] | ||
| 17 | x = 0 | ||
| 18 | y = 0 | ||
| 19 | |||
| 20 | [window] | ||
| 21 | dynamic_padding = true | ||
| 22 | # opacity = 0.90 | ||
| 23 | |||
| 24 | [colors.bright] | ||
| 25 | black = "0x002b36" | ||
| 26 | blue = "0x839496" | ||
| 27 | cyan = "0x93a1a1" | ||
| 28 | green = "0x586e75" | ||
| 29 | magenta = "0x6c71c4" | ||
| 30 | red = "0xcb4b16" | ||
| 31 | white = "0xfdf6e3" | ||
| 32 | yellow = "0x657b83" | ||
| 33 | |||
| 34 | [colors.normal] | ||
| 35 | black = "0x073642" | ||
| 36 | blue = "0x268bd2" | ||
| 37 | cyan = "0x2aa198" | ||
| 38 | green = "0x859900" | ||
| 39 | magenta = "0xd33682" | ||
| 40 | red = "0xdc322f" | ||
| 41 | white = "0xeee8d5" | ||
| 42 | yellow = "0xb58900" | ||
| 43 | |||
| 44 | [colors.primary] | ||
| 45 | background = "0x002b36" | ||
| 46 | foreground = "0x839496" | ||
diff --git a/files/.config/alacritty/alacritty.toml.old b/files/.config/alacritty/alacritty.toml.old new file mode 100644 index 0000000..031d81c --- /dev/null +++ b/files/.config/alacritty/alacritty.toml.old | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | [cursor] | ||
| 2 | style = "Block" | ||
| 3 | unfocused_hollow = true | ||
| 4 | |||
| 5 | [font] | ||
| 6 | size = 14 | ||
| 7 | |||
| 8 | [font.italic] | ||
| 9 | family = "Terminus" | ||
| 10 | style = "Light Italic" | ||
| 11 | |||
| 12 | [font.normal] | ||
| 13 | family = "Terminus" | ||
| 14 | style = "Light" | ||
| 15 | |||
| 16 | [font.offset] | ||
| 17 | x = 0 | ||
| 18 | y = 0 | ||
| 19 | |||
| 20 | [window] | ||
| 21 | dynamic_padding = true | ||
| 22 | opacity = 0.90 | ||
| 23 | |||
diff --git a/files/.config/alacritty/alacritty.yaml b/files/.config/alacritty/alacritty.yaml new file mode 100644 index 0000000..a4f2823 --- /dev/null +++ b/files/.config/alacritty/alacritty.yaml | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | colors: | ||
| 2 | # Default colors | ||
| 3 | primary: | ||
| 4 | background: '0x002b36' | ||
| 5 | foreground: '0x839496' | ||
| 6 | |||
| 7 | # Normal colors | ||
| 8 | normal: | ||
| 9 | black: '0x073642' | ||
| 10 | red: '0xdc322f' | ||
| 11 | green: '0x859900' | ||
| 12 | yellow: '0xb58900' | ||
| 13 | blue: '0x268bd2' | ||
| 14 | magenta: '0xd33682' | ||
| 15 | cyan: '0x2aa198' | ||
| 16 | white: '0xeee8d5' | ||
| 17 | |||
| 18 | # Bright colors | ||
| 19 | bright: | ||
| 20 | black: '0x002b36' | ||
| 21 | red: '0xcb4b16' | ||
| 22 | green: '0x586e75' | ||
| 23 | yellow: '0x657b83' | ||
| 24 | blue: '0x839496' | ||
| 25 | magenta: '0x6c71c4' | ||
| 26 | cyan: '0x93a1a1' | ||
| 27 | white: '0xfdf6e3' | ||
diff --git a/files/.config/common-lisp/source-registry.conf.d/50-user-lisp.conf b/files/.config/common-lisp/source-registry.conf.d/50-user-lisp.conf new file mode 100644 index 0000000..5ffc4fe --- /dev/null +++ b/files/.config/common-lisp/source-registry.conf.d/50-user-lisp.conf | |||
| @@ -0,0 +1 @@ | |||
| (:tree "/home/jakub/Projects/lisp/") \ No newline at end of file | |||
diff --git a/files/.config/dunst/dunstrc b/files/.config/dunst/dunstrc new file mode 100644 index 0000000..b3b93b6 --- /dev/null +++ b/files/.config/dunst/dunstrc | |||
| @@ -0,0 +1,177 @@ | |||
| 1 | [global] | ||
| 2 | frame_width = 2 | ||
| 3 | frame_color = "#39bae6" | ||
| 4 | font = sourcecodepro | ||
| 5 | |||
| 6 | # Allow a small subset of html markup: | ||
| 7 | # <b>bold</b> | ||
| 8 | # <i>italic</i> | ||
| 9 | # <s>strikethrough</s> | ||
| 10 | # <u>underline</u> | ||
| 11 | # | ||
| 12 | # For a complete reference see | ||
| 13 | # <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>. | ||
| 14 | # If markup is not allowed, those tags will be stripped out of the | ||
| 15 | # message. | ||
| 16 | markup = yes | ||
| 17 | |||
| 18 | # The format of the message. Possible variables are: | ||
| 19 | # %a appname | ||
| 20 | # %s summary | ||
| 21 | # %b body | ||
| 22 | # %i iconname (including its path) | ||
| 23 | # %I iconname (without its path) | ||
| 24 | # %p progress value if set ([ 0%] to [100%]) or nothing | ||
| 25 | # Markup is allowed | ||
| 26 | format = "%s %p\n%b" | ||
| 27 | |||
| 28 | # Sort messages by urgency. | ||
| 29 | sort = yes | ||
| 30 | |||
| 31 | # Show how many messages are currently hidden (because of geometry). | ||
| 32 | indicate_hidden = yes | ||
| 33 | |||
| 34 | # Alignment of message text. | ||
| 35 | # Possible values are "left", "center" and "right". | ||
| 36 | alignment = left | ||
| 37 | |||
| 38 | # The frequency with wich text that is longer than the notification | ||
| 39 | # window allows bounces back and forth. | ||
| 40 | # This option conflicts with "word_wrap". | ||
| 41 | # Set to 0 to disable. | ||
| 42 | bounce_freq = 5 | ||
| 43 | |||
| 44 | |||
| 45 | # Show age of message if message is older than show_age_threshold | ||
| 46 | # seconds. | ||
| 47 | # Set to -1 to disable. | ||
| 48 | show_age_threshold = 60 | ||
| 49 | |||
| 50 | # Split notifications into multiple lines if they don't fit into | ||
| 51 | # geometry. | ||
| 52 | word_wrap = no | ||
| 53 | |||
| 54 | # Ignore newlines '\n' in notifications. | ||
| 55 | ignore_newline = no | ||
| 56 | |||
| 57 | |||
| 58 | # The geometry of the window: | ||
| 59 | # [{width}]x{height}[+/-{x}+/-{y}] | ||
| 60 | # The geometry of the message window. | ||
| 61 | # The height is measured in number of notifications everything else | ||
| 62 | # in pixels. If the width is omitted but the height is given | ||
| 63 | # ("-geometry x2"), the message window expands over the whole screen | ||
| 64 | # (dmenu-like). If width is 0, the window expands to the longest | ||
| 65 | # message displayed. A positive x is measured from the left, a | ||
| 66 | # negative from the right side of the screen. Y is measured from | ||
| 67 | # the top and down respectevly. | ||
| 68 | # The width can be negative. In this case the actual width is the | ||
| 69 | # screen width minus the width defined in within the geometry option. | ||
| 70 | geometry = "500x10-10+50" | ||
| 71 | |||
| 72 | # Shrink window if it's smaller than the width. Will be ignored if | ||
| 73 | # width is 0. | ||
| 74 | shrink = yes | ||
| 75 | |||
| 76 | # The transparency of the window. Range: [0; 100]. | ||
| 77 | # This option will only work if a compositing windowmanager is | ||
| 78 | # present (e.g. xcompmgr, compiz, etc.). | ||
| 79 | transparency = 15 | ||
| 80 | |||
| 81 | # Don't remove messages, if the user is idle (no mouse or keyboard input) | ||
| 82 | # for longer than idle_threshold seconds. | ||
| 83 | # Set to 0 to disable. | ||
| 84 | # default 120 | ||
| 85 | idle_threshold = 120 | ||
| 86 | |||
| 87 | # Which monitor should the notifications be displayed on. | ||
| 88 | monitor = 0 | ||
| 89 | |||
| 90 | # Display notification on focused monitor. Possible modes are: | ||
| 91 | # mouse: follow mouse pointer | ||
| 92 | # keyboard: follow window with keyboard focus | ||
| 93 | # none: don't follow anything | ||
| 94 | # | ||
| 95 | # "keyboard" needs a windowmanager that exports the | ||
| 96 | # _NET_ACTIVE_WINDOW property. | ||
| 97 | # This should be the case for almost all modern windowmanagers. | ||
| 98 | # | ||
| 99 | # If this option is set to mouse or keyboard, the monitor option | ||
| 100 | # will be ignored. | ||
| 101 | follow = mouse | ||
| 102 | |||
| 103 | # Should a notification popped up from history be sticky or timeout | ||
| 104 | # as if it would normally do. | ||
| 105 | sticky_history = yes | ||
| 106 | |||
| 107 | # Maximum amount of notifications kept in history | ||
| 108 | history_length = 20 | ||
| 109 | |||
| 110 | # Display indicators for URLs (U) and actions (A). | ||
| 111 | show_indicators = yes | ||
| 112 | |||
| 113 | # The height of a single line. If the height is smaller than the | ||
| 114 | # font height, it will get raised to the font height. | ||
| 115 | # This adds empty space above and under the text. | ||
| 116 | line_height = 0 | ||
| 117 | |||
| 118 | # Draw a line of "separator_height" pixel height between two | ||
| 119 | # notifications. | ||
| 120 | # Set to 0 to disable. | ||
| 121 | separator_height = 1 | ||
| 122 | |||
| 123 | # Padding between text and separator. | ||
| 124 | # padding = 8 | ||
| 125 | padding = 8 | ||
| 126 | |||
| 127 | # Horizontal padding. | ||
| 128 | horizontal_padding = 10 | ||
| 129 | |||
| 130 | # Define a color for the separator. | ||
| 131 | # possible values are: | ||
| 132 | # * auto: dunst tries to find a color fitting to the background; | ||
| 133 | # * foreground: use the same color as the foreground; | ||
| 134 | # * frame: use the same color as the frame; | ||
| 135 | # * anything else will be interpreted as a X color. | ||
| 136 | separator_color = #263238 | ||
| 137 | |||
| 138 | # Print a notification on startup. | ||
| 139 | # This is mainly for error detection, since dbus (re-)starts dunst | ||
| 140 | # automatically after a crash. | ||
| 141 | startup_notification = false | ||
| 142 | |||
| 143 | # dmenu path. | ||
| 144 | dmenu = /usr/bin/dmenu -p dunst: | ||
| 145 | |||
| 146 | # Browser for opening urls in context menu. | ||
| 147 | browser = palemoon | ||
| 148 | |||
| 149 | # Align icons left/right/off | ||
| 150 | icon_position = left | ||
| 151 | |||
| 152 | # Limit icons size. | ||
| 153 | max_icon_size=128 | ||
| 154 | |||
| 155 | [urgency_low] | ||
| 156 | # IMPORTANT: colors have to be defined in quotation marks. | ||
| 157 | # Otherwise the "#" and following would be interpreted as a comment. | ||
| 158 | background "#0d1017" | ||
| 159 | foreground = "#888888" | ||
| 160 | timeout = 10 | ||
| 161 | # Icon for notifications with low urgency, uncomment to enable | ||
| 162 | #icon = /path/to/icon | ||
| 163 | |||
| 164 | [urgency_normal] | ||
| 165 | background = "#1e2128" | ||
| 166 | foreground = "#ffffff" | ||
| 167 | timeout = 10 | ||
| 168 | # Icon for notifications with normal urgency, uncomment to enable | ||
| 169 | #icon = /path/to/icon | ||
| 170 | |||
| 171 | [urgency_critical] | ||
| 172 | background = "#900000" | ||
| 173 | foreground = "#ffffff" | ||
| 174 | frame_color = "#ff0000" | ||
| 175 | timeout = 0 | ||
| 176 | # Icon for notifications with critical urgency, uncomment to enable | ||
| 177 | #icon = /path/to/icon | ||
diff --git a/files/.config/guix/.gitignore b/files/.config/guix/.gitignore new file mode 100644 index 0000000..1f4ddec --- /dev/null +++ b/files/.config/guix/.gitignore | |||
| @@ -0,0 +1 @@ | |||
| current \ No newline at end of file | |||
diff --git a/files/.config/guix/channels.scm b/files/.config/guix/channels.scm new file mode 100755 index 0000000..13bee44 --- /dev/null +++ b/files/.config/guix/channels.scm | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | (cons* (channel | ||
| 2 | (name 'rustup) | ||
| 3 | (url "https://github.com/declantsien/guix-rustup") | ||
| 4 | (introduction | ||
| 5 | (make-channel-introduction | ||
| 6 | "325d3e2859d482c16da21eb07f2c6ff9c6c72a80" | ||
| 7 | (openpgp-fingerprint | ||
| 8 | "F695 F39E C625 E081 33B5 759F 0FC6 8703 75EF E2F5")))) | ||
| 9 | |||
| 10 | (channel | ||
| 11 | (name 'nonguix) | ||
| 12 | (url "https://gitlab.com/nonguix/nonguix") | ||
| 13 | ;; Enable signature verification: | ||
| 14 | (introduction | ||
| 15 | (make-channel-introduction | ||
| 16 | "897c1a470da759236cc11798f4e0a5f7d4d59fbc" | ||
| 17 | (openpgp-fingerprint | ||
| 18 | "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))) | ||
| 19 | %default-channels) | ||
diff --git a/files/.config/guix/shell-authorized-directories b/files/.config/guix/shell-authorized-directories new file mode 100644 index 0000000..f6e0c84 --- /dev/null +++ b/files/.config/guix/shell-authorized-directories | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | /home/jakub/Projects/laco | ||
| 2 | /home/jakub/Projects/yasa | ||
| 3 | /home/jakub/Projects/trial | ||
| 4 | /home/jakub/Projects/matura-infa | ||
| 5 | /home/jakub/Projects/abaks-infra | ||
| 6 | /home/jakub/Projects/lispz | ||
| 7 | /home/jakub/Projects/zig-learning | ||
| 8 | /home/jakub/Projects/let-over-lambda | ||
| 9 | /home/jakub/Projects/rust | ||
| 10 | /home/jakub/temphome/embedded-rust | ||
diff --git a/files/.config/picom/picom.conf b/files/.config/picom/picom.conf new file mode 100644 index 0000000..0f3fe1d --- /dev/null +++ b/files/.config/picom/picom.conf | |||
| @@ -0,0 +1,117 @@ | |||
| 1 | # ____ _____ | ||
| 2 | # | _ \_ _| Derek Taylor (DistroTube) | ||
| 3 | # | | | || | http://www.youtube.com/c/DistroTube | ||
| 4 | # | |_| || | http://www.gitlab.com/dwt1/ | ||
| 5 | # |____/ |_| | ||
| 6 | # | ||
| 7 | # My config. Not much to see here; just some pretty standard stuff. | ||
| 8 | |||
| 9 | # Enabled client-side shadows on windows. Note desktop windows | ||
| 10 | # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, | ||
| 11 | # unless explicitly requested using the wintypes option. | ||
| 12 | # | ||
| 13 | shadow = true; | ||
| 14 | |||
| 15 | # The blur radius for shadows, in pixels. (defaults to 12) | ||
| 16 | shadow-radius = 8; | ||
| 17 | |||
| 18 | # The opacity of shadows. (0.0 - 1.0, defaults to 0.75) | ||
| 19 | shadow-opacity = .6 | ||
| 20 | |||
| 21 | # The left offset for shadows, in pixels. (defaults to -15) | ||
| 22 | shadow-offset-x = -3; | ||
| 23 | |||
| 24 | # The top offset for shadows, in pixels. (defaults to -15) | ||
| 25 | shadow-offset-y = -3; | ||
| 26 | |||
| 27 | # Specify a list of conditions of windows that should have no shadow. | ||
| 28 | # | ||
| 29 | # examples: | ||
| 30 | # shadow-exclude = "n:e:Notification"; | ||
| 31 | # | ||
| 32 | # shadow-exclude = [] | ||
| 33 | shadow-exclude = [ | ||
| 34 | "name = 'Notification'", | ||
| 35 | "class_g = 'Conky'", | ||
| 36 | "class_g ?= 'Notify-osd'", | ||
| 37 | "class_g = 'Cairo-clock'", | ||
| 38 | "class_g = 'slop'", | ||
| 39 | "class_g = 'Polybar'", | ||
| 40 | "_GTK_FRAME_EXTENTS@:c" | ||
| 41 | ]; | ||
| 42 | |||
| 43 | |||
| 44 | # Fade windows in/out when opening/closing and when opacity changes, | ||
| 45 | # unless no-fading-openclose is used. | ||
| 46 | # fading = false | ||
| 47 | fading = true; | ||
| 48 | |||
| 49 | # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) | ||
| 50 | # fade-in-step = 0.028 | ||
| 51 | fade-in-step = 0.3; | ||
| 52 | |||
| 53 | # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) | ||
| 54 | # fade-out-step = 0.03 | ||
| 55 | fade-out-step = 0.3; | ||
| 56 | |||
| 57 | # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) | ||
| 58 | # fade-delta = 10 | ||
| 59 | |||
| 60 | # Specify a list of conditions of windows that should not be faded. | ||
| 61 | # don't need this, we disable fading for all normal windows with wintypes: {} | ||
| 62 | fade-exclude = [ | ||
| 63 | "class_g = 'slop'" # maim | ||
| 64 | ] | ||
| 65 | |||
| 66 | # Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) | ||
| 67 | inactive-opacity = 0.9 | ||
| 68 | # inactive-opacity = 1.0; | ||
| 69 | |||
| 70 | # Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) | ||
| 71 | # frame-opacity = 1.0 | ||
| 72 | frame-opacity = 0.7; | ||
| 73 | |||
| 74 | # Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0) | ||
| 75 | # menu-opacity = 1.0 | ||
| 76 | # menu-opacity is depreciated use dropdown-menu and popup-menu instead. | ||
| 77 | |||
| 78 | #If using these 2 below change their values in line 510 & 511 aswell | ||
| 79 | popup_menu = { opacity = 0.8; } | ||
| 80 | dropdown_menu = { opacity = 0.8; } | ||
| 81 | |||
| 82 | |||
| 83 | # Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows. | ||
| 84 | # inactive-opacity-override = true | ||
| 85 | inactive-opacity-override = false; | ||
| 86 | |||
| 87 | # Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) | ||
| 88 | active-opacity = 1.0; | ||
| 89 | |||
| 90 | # Dim inactive windows. (0.0 - 1.0, defaults to 0.0) | ||
| 91 | # inactive-dim = 0.0 | ||
| 92 | |||
| 93 | # Specify a list of conditions of windows that should always be considered focused. | ||
| 94 | # focus-exclude = [] | ||
| 95 | focus-exclude = [ | ||
| 96 | "class_g = 'Cairo-clock'", | ||
| 97 | "class_g = 'Bar'", # lemonbar | ||
| 98 | "class_g = 'slop'" # maim | ||
| 99 | ]; | ||
| 100 | |||
| 101 | opacity-rule = [ | ||
| 102 | "100:class_g = 'XTerm'", | ||
| 103 | "100:class_g = 'URxvt'", | ||
| 104 | "100:class_g = 'firefox'", | ||
| 105 | "100:class_g = 'Thunderbird'" | ||
| 106 | ]; | ||
| 107 | |||
| 108 | wintypes: | ||
| 109 | { | ||
| 110 | normal = { fade = false; shadow = true; } | ||
| 111 | tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; | ||
| 112 | dock = { shadow = false; } | ||
| 113 | dnd = { shadow = true; } | ||
| 114 | popup_menu = { opacity = 0.8; } | ||
| 115 | dropdown_menu = { opacity = 0.8; } | ||
| 116 | }; | ||
| 117 | |||
diff --git a/files/.config/polybar/config.ini b/files/.config/polybar/config.ini new file mode 100644 index 0000000..d43ee51 --- /dev/null +++ b/files/.config/polybar/config.ini | |||
| @@ -0,0 +1,122 @@ | |||
| 1 | [settings] | ||
| 2 | screenchange-reload = true | ||
| 3 | |||
| 4 | [colors] | ||
| 5 | background = ${xrdb:emacs.background} | ||
| 6 | foreground = ${xrdb:emacs.foreground} | ||
| 7 | primary = #7fd962 | ||
| 8 | disabled = #707880 | ||
| 9 | |||
| 10 | [bar/example] | ||
| 11 | width = 100% | ||
| 12 | height = 18pt | ||
| 13 | |||
| 14 | background = ${colors.background} | ||
| 15 | foreground = ${colors.foreground} | ||
| 16 | |||
| 17 | line-size = 1.5pt | ||
| 18 | |||
| 19 | padding-left = 0 | ||
| 20 | padding-right = 1 | ||
| 21 | |||
| 22 | module-margin = 1 | ||
| 23 | |||
| 24 | separator = | | ||
| 25 | separator-foreground = ${colors.disabled} | ||
| 26 | |||
| 27 | font-0 = "Terminus:size=15" | ||
| 28 | font-1 = "FontAwesome" | ||
| 29 | |||
| 30 | modules-left = xworkspaces | ||
| 31 | modules-right = memory cpu battery date | ||
| 32 | |||
| 33 | cursor-click = pointer | ||
| 34 | cursor-scroll = ns-resize | ||
| 35 | |||
| 36 | enable-ipc = true | ||
| 37 | |||
| 38 | tray-position = right | ||
| 39 | |||
| 40 | [module/xworkspaces] | ||
| 41 | type = internal/xworkspaces | ||
| 42 | |||
| 43 | icon-0 = 1;0 | ||
| 44 | icon-1 = 2;1 | ||
| 45 | icon-2 = 3;2 | ||
| 46 | icon-3 = 4;3 | ||
| 47 | icon-4 = 5;4 | ||
| 48 | icon-5 = 6;5 | ||
| 49 | icon-6 = 7;6 | ||
| 50 | icon-7 = 8;7 | ||
| 51 | icon-8 = 9;8 | ||
| 52 | icon-9 = 10;9 | ||
| 53 | |||
| 54 | label-active = %icon% | ||
| 55 | label-active-background = ${colors.background-alt} | ||
| 56 | label-active-underline= ${colors.primary} | ||
| 57 | label-active-padding = 1 | ||
| 58 | |||
| 59 | label-occupied = %icon% | ||
| 60 | label-occupied-padding = 1 | ||
| 61 | |||
| 62 | label-urgent = %icon% | ||
| 63 | label-urgent-background = ${colors.alert} | ||
| 64 | label-urgent-padding = 1 | ||
| 65 | |||
| 66 | label-empty = %icon% | ||
| 67 | label-empty-foreground = ${colors.disabled} | ||
| 68 | label-empty-padding = 1 | ||
| 69 | |||
| 70 | [module/battery] | ||
| 71 | type = internal/battery | ||
| 72 | battery = BAT0 | ||
| 73 | adapter = ADP1 | ||
| 74 | |||
| 75 | format-charging = <animation-charging> <label-charging> | ||
| 76 | format-discharging = <ramp-capacity> <label-discharging> | ||
| 77 | format-low = <ramp-capacity> <label-low> | ||
| 78 | format-full = <ramp-capacity> <label-full> | ||
| 79 | |||
| 80 | label-charging = %percentage%% | ||
| 81 | label-discharging = %percentage%% | ||
| 82 | label-low = LOW %percentage%% | ||
| 83 | label-full = FULL %percentage%% | ||
| 84 | |||
| 85 | ramp-capacity-0 = | ||
| 86 | ramp-capacity-1 = | ||
| 87 | ramp-capacity-2 = | ||
| 88 | ramp-capacity-3 = | ||
| 89 | ramp-capacity-4 = | ||
| 90 | ramp-capacity-foreground = ${colors.primary} | ||
| 91 | |||
| 92 | animation-charging-0 = | ||
| 93 | animation-charging-1 = | ||
| 94 | animation-charging-2 = | ||
| 95 | animation-charging-3 = | ||
| 96 | animation-charging-4 = | ||
| 97 | animation-charging-foreground = ${colors.primary} | ||
| 98 | animation-charging-framerate = 750 | ||
| 99 | |||
| 100 | [module/memory] | ||
| 101 | type = internal/memory | ||
| 102 | interval = 2 | ||
| 103 | format-prefix = "RAM " | ||
| 104 | format-prefix-foreground = ${colors.primary} | ||
| 105 | label = %percentage_used:2%% | ||
| 106 | |||
| 107 | [module/cpu] | ||
| 108 | type = internal/cpu | ||
| 109 | interval = 2 | ||
| 110 | format-prefix = "CPU " | ||
| 111 | format-prefix-foreground = ${colors.primary} | ||
| 112 | label = %percentage:2%% | ||
| 113 | |||
| 114 | [module/date] | ||
| 115 | type = internal/date | ||
| 116 | interval = 1 | ||
| 117 | |||
| 118 | date = %H:%M | ||
| 119 | date-alt = %Y-%m-%d %H:%M:%S | ||
| 120 | |||
| 121 | label = %date% | ||
| 122 | label-foreground = ${colors.primary} | ||
diff --git a/files/.config/qtile/autorc b/files/.config/qtile/autorc new file mode 100755 index 0000000..c54f683 --- /dev/null +++ b/files/.config/qtile/autorc | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | |||
| 3 | function monitor_settings() { | ||
| 4 | sleep .5 | ||
| 5 | monitor_status=$(xrandr | grep "HDMI-1-4 connected" | wc -l) | ||
| 6 | |||
| 7 | if [ $monitor_status == 1 ]; | ||
| 8 | then | ||
| 9 | # xrandr --auto | ||
| 10 | # xrandr --output eDP-1 --off | ||
| 11 | xrandr --output eDP-1-1 --auto --output HDMI-0 --auto --left-of eDP-1-1 | ||
| 12 | fi | ||
| 13 | } | ||
| 14 | |||
| 15 | function caps_to_esc(){ xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'; } | ||
| 16 | |||
| 17 | function start() { | ||
| 18 | killall $1 | ||
| 19 | sleep .5 | ||
| 20 | $($1 $2) & | ||
| 21 | } | ||
| 22 | |||
| 23 | # monitor_settings | ||
| 24 | caps_to_esc | ||
| 25 | |||
| 26 | start nitrogen "--restore" | ||
| 27 | start picom "" | ||
| 28 | start spotifyd "" | ||
| 29 | start rclone "mount remote:/sync /home/jakub/Sync" | ||
| 30 | start emacs "--daemon" | ||
| 31 | xinput set-prop 11 344 1 | ||
diff --git a/files/.config/qtile/config.py b/files/.config/qtile/config.py new file mode 100644 index 0000000..9106731 --- /dev/null +++ b/files/.config/qtile/config.py | |||
| @@ -0,0 +1,232 @@ | |||
| 1 | import os | ||
| 2 | import subprocess | ||
| 3 | |||
| 4 | from typing import List | ||
| 5 | |||
| 6 | from libqtile import bar, layout, widget | ||
| 7 | from libqtile.config import Click, Drag, Group, Key, Match, Screen, KeyChord | ||
| 8 | from libqtile import extension | ||
| 9 | from libqtile.lazy import lazy | ||
| 10 | from libqtile.utils import guess_terminal | ||
| 11 | from libqtile import hook | ||
| 12 | |||
| 13 | MOD = "mod4" | ||
| 14 | |||
| 15 | TERMINAL = guess_terminal() | ||
| 16 | |||
| 17 | DMENU_FLAGS = '-l 16 -p run -c -i' | ||
| 18 | |||
| 19 | BAR = '#282a36' | ||
| 20 | LIGHT_BAR = '#393b37' | ||
| 21 | YELLOW = '#f1fa8c' | ||
| 22 | RED = '#ff5555' | ||
| 23 | LIGHT_RED = '#ff9999' | ||
| 24 | GREEN = '#50fa7b' | ||
| 25 | CYAN = '#8be9fd' | ||
| 26 | LIGHT_CYAN = '#abfbff' | ||
| 27 | |||
| 28 | @hook.subscribe.startup_once | ||
| 29 | def autostart(): | ||
| 30 | home = os.path.expanduser('~/.config/qtile/autorc') | ||
| 31 | subprocess.run([home]) | ||
| 32 | |||
| 33 | keys = [ | ||
| 34 | Key([MOD], "h", lazy.layout.left(), desc="Move focus to left"), | ||
| 35 | Key([MOD], "l", lazy.layout.right(), desc="Move focus to right"), | ||
| 36 | Key([MOD], "j", lazy.layout.down(), desc="Move focus down"), | ||
| 37 | Key([MOD], "k", lazy.layout.up(), desc="Move focus up"), | ||
| 38 | Key([MOD], "s", lazy.next_screen() ), | ||
| 39 | Key([MOD], "space", lazy.window.toggle_floating(), | ||
| 40 | desc="Move window focus to other window"), | ||
| 41 | |||
| 42 | Key([MOD, "shift"], "h", lazy.layout.shuffle_left(), | ||
| 43 | desc="Move window to the left"), | ||
| 44 | Key([MOD, "shift"], "l", lazy.layout.shuffle_right(), | ||
| 45 | desc="Move window to the right"), | ||
| 46 | Key([MOD, "shift"], "j", lazy.layout.shuffle_down(), | ||
| 47 | desc="Move window down"), | ||
| 48 | Key([MOD, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), | ||
| 49 | |||
| 50 | Key([MOD, "control"], "h", lazy.layout.grow_left(), | ||
| 51 | desc="Grow window to the left"), | ||
| 52 | Key([MOD, "control"], "l", lazy.layout.grow_right(), | ||
| 53 | desc="Grow window to the right"), | ||
| 54 | Key([MOD, "control"], "j", lazy.layout.grow_down(), | ||
| 55 | desc="Grow window down"), | ||
| 56 | Key([MOD, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), | ||
| 57 | Key([MOD], "n", lazy.layout.normalize(), desc="Reset all window sizes"), | ||
| 58 | |||
| 59 | Key([MOD, "shift"], "Return", lazy.layout.toggle_split(), | ||
| 60 | desc="Toggle between split and unsplit sides of stack"), | ||
| 61 | Key([MOD], "Return", lazy.spawn(TERMINAL), desc="Launch terminal"), | ||
| 62 | |||
| 63 | Key([MOD], "Tab", lazy.next_layout(), desc="Toggle between layouts"), | ||
| 64 | Key([MOD], "c", lazy.window.kill(), desc="Kill focused window"), | ||
| 65 | |||
| 66 | Key([MOD, "control"], "r", lazy.restart(), desc="Restart Qtile"), | ||
| 67 | Key([MOD, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), | ||
| 68 | |||
| 69 | Key([MOD], "F12", os.system("xbacklight -inc 10"), desc="Inc backlight"), | ||
| 70 | Key([MOD], "F11", os.system("xbacklight -dec 10"), desc="Dec backlight"), | ||
| 71 | |||
| 72 | Key([MOD], "r", lazy.spawncmd(), | ||
| 73 | desc="Spawn a command using a prompt widget"), | ||
| 74 | |||
| 75 | KeyChord([MOD], "p", [ | ||
| 76 | Key([], "p", lazy.spawn(f"dmenu_run {DMENU_FLAGS}"), desc="Spawn dmenu run"), | ||
| 77 | Key([], "n", lazy.spawn(f"networkmanager_dmenu {DMENU_FLAGS}"), desc="Spawn dmenu for network manager"), | ||
| 78 | ]), | ||
| 79 | |||
| 80 | Key([MOD, "mod1"], "q", lazy.spawn("qutebrowser"), desc="Spawn qutebrowser"), | ||
| 81 | Key([MOD, "mod1"], "b", lazy.spawn("brave"), desc="Spawn brave"), | ||
| 82 | Key([MOD, "mod1"], "f", lazy.spawn("firefox"), desc="Spawn firefox"), | ||
| 83 | |||
| 84 | KeyChord([MOD], "e", [ | ||
| 85 | Key([], "e", lazy.spawn("emacsclient -c -a 'emacs'"), desc="Spawn Emacsclient"), | ||
| 86 | Key([], "d", lazy.spawn("emacsclient -c -a 'emacs' --eval '(dired nil)'"), desc='Emacsclient Dired'), | ||
| 87 | Key([], "m", lazy.spawn("emacsclient -c -a 'emacs' --eval '(emms-browser)'"), desc='Emacsclient Dired'), | ||
| 88 | ]), | ||
| 89 | |||
| 90 | Key([MOD, "mod1"], "s", lazy.spawn("alacritty -e spt"), desc="Spawn spt (spotify clent)"), | ||
| 91 | Key([MOD, "mod1"], "l", lazy.spawn("slock"), desc="lock desktop"), | ||
| 92 | Key([MOD, "mod1"], "r", lazy.spawn("alacritty -e ranger"), desc="Spawn ranger (file manager)"), | ||
| 93 | Key([MOD, "mod1"], "p", lazy.spawn("alacritty -e pulsemixer"), desc="Spawn pulsemixer"), | ||
| 94 | ] | ||
| 95 | |||
| 96 | groups_names = [ | ||
| 97 | "dev", | ||
| 98 | "www", | ||
| 99 | "music", | ||
| 100 | "virt", | ||
| 101 | "sys", | ||
| 102 | "other" | ||
| 103 | ] | ||
| 104 | |||
| 105 | groups = [Group(i) for i in groups_names] | ||
| 106 | for i, group in enumerate(groups): | ||
| 107 | keys.extend([ | ||
| 108 | Key([MOD], str(i+1), lazy.group[group.name].toscreen(), | ||
| 109 | desc="Switch to group {}".format(group.name)), | ||
| 110 | |||
| 111 | Key([MOD, "shift"], str(i+1), lazy.window.togroup(group.name, switch_group=True), | ||
| 112 | desc="Switch to & move focused window to group {}".format(group.name)), | ||
| 113 | ]) | ||
| 114 | |||
| 115 | mouse = [ | ||
| 116 | Drag([MOD], "Button1", lazy.window.set_position_floating(), | ||
| 117 | start=lazy.window.get_position()), | ||
| 118 | Drag([MOD], "Button3", lazy.window.set_size_floating(), | ||
| 119 | start=lazy.window.get_size()), | ||
| 120 | Click([MOD], "Button2", lazy.window.bring_to_front()) | ||
| 121 | ] | ||
| 122 | |||
| 123 | layout_cfg = { | ||
| 124 | 'border_width': 2, | ||
| 125 | 'border_normal': "#bb8888", | ||
| 126 | 'border_focus': "884444", | ||
| 127 | 'margin': 8 | ||
| 128 | } | ||
| 129 | |||
| 130 | layouts = [ | ||
| 131 | # layout.Columns(**layout_cfg), | ||
| 132 | # layout.Max(), | ||
| 133 | layout.Stack(num_stacks=1, **layout_cfg), | ||
| 134 | # layout.Bsp(), | ||
| 135 | # layout.Matrix(), | ||
| 136 | layout.MonadTall(**layout_cfg), | ||
| 137 | # layout.MonadWide(), | ||
| 138 | # layout.RatioTile(), | ||
| 139 | # layout.Tile(), | ||
| 140 | # layout.TreeTab(), | ||
| 141 | # layout.VerticalTile(), | ||
| 142 | # layout.Zoomy(), | ||
| 143 | ] | ||
| 144 | |||
| 145 | widget_defaults = dict( | ||
| 146 | font='sans', | ||
| 147 | fontsize=12, | ||
| 148 | padding=6, | ||
| 149 | ) | ||
| 150 | |||
| 151 | transparent_sep = { | ||
| 152 | 'foreground': BAR, | ||
| 153 | 'margin': 2 | ||
| 154 | } | ||
| 155 | |||
| 156 | soft_sep = { | ||
| 157 | 'foreground': '44475a', | ||
| 158 | 'padding': 2, | ||
| 159 | 'margin': 4 | ||
| 160 | } | ||
| 161 | |||
| 162 | screens = [ | ||
| 163 | Screen( | ||
| 164 | top=bar.Bar( | ||
| 165 | [ | ||
| 166 | widget.Sep(**transparent_sep), | ||
| 167 | widget.Image(filename="~/.config/qtile/python.png", margin=4), | ||
| 168 | widget.Sep(**transparent_sep), | ||
| 169 | widget.CurrentLayout(), | ||
| 170 | widget.Sep(**transparent_sep), | ||
| 171 | widget.GroupBox( | ||
| 172 | margin_y = 3, | ||
| 173 | margin_x = 0, | ||
| 174 | padding_y = 5, | ||
| 175 | padding_x = 3, | ||
| 176 | borderwidth = 3, | ||
| 177 | rounded = False, | ||
| 178 | highlight_color = LIGHT_BAR, | ||
| 179 | highlight_method = "line", | ||
| 180 | this_current_screen_border = CYAN, | ||
| 181 | this_screen_border = CYAN, | ||
| 182 | other_current_screen_border = LIGHT_BAR, | ||
| 183 | other_screen_border = LIGHT_BAR, | ||
| 184 | ), | ||
| 185 | widget.Prompt(), | ||
| 186 | widget.Sep(**transparent_sep), | ||
| 187 | widget.WindowName(), | ||
| 188 | widget.Net(format="🌐 ↓{down} ↑{up}", foreground=YELLOW), | ||
| 189 | widget.Sep(**soft_sep), | ||
| 190 | widget.CPU(format='💻 {load_percent}%', fontsize=12, foreground=RED), | ||
| 191 | widget.Sep(**soft_sep), | ||
| 192 | widget.Battery(format='🔋 {char} {percent:2.0%} {hour:d}:{min:02d} {watt:.2f} W', foreground=GREEN), | ||
| 193 | widget.Sep(**soft_sep), | ||
| 194 | widget.Clock(format='📅 %B %-d, %H:%M', foreground=CYAN), | ||
| 195 | widget.Sep(**soft_sep), | ||
| 196 | widget.CurrentScreen(), | ||
| 197 | widget.Sep(**soft_sep), | ||
| 198 | widget.Systray() | ||
| 199 | ], | ||
| 200 | 24, | ||
| 201 | margin=8, | ||
| 202 | background=BAR, | ||
| 203 | border_color=CYAN, | ||
| 204 | border_width=1 | ||
| 205 | ), | ||
| 206 | ), | ||
| 207 | ] | ||
| 208 | |||
| 209 | floating_layout = layout.Floating(float_rules=[ | ||
| 210 | # Run the utility of `xprop` to see the wm class and name of an X client. | ||
| 211 | *layout.Floating.default_float_rules, | ||
| 212 | Match(wm_class='confirmreset'), # gitk | ||
| 213 | Match(wm_class='makebranch'), # gitk | ||
| 214 | Match(wm_class='maketag'), # gitk | ||
| 215 | Match(wm_class='ssh-askpass'), # ssh-askpass | ||
| 216 | Match(title='branchdialog'), # gitk | ||
| 217 | Match(title='pinentry'), # GPG key password entry | ||
| 218 | ]) | ||
| 219 | |||
| 220 | dgroups_key_binder = None | ||
| 221 | dgroups_app_rules = [] | ||
| 222 | |||
| 223 | follow_mouse_focus = True | ||
| 224 | bring_front_click = False | ||
| 225 | cursor_warp = False | ||
| 226 | auto_fullscreen = True | ||
| 227 | focus_on_window_activation = "smart" | ||
| 228 | reconfigure_screens = True | ||
| 229 | |||
| 230 | auto_minimize = True | ||
| 231 | |||
| 232 | wmname = "LG3D" | ||
diff --git a/files/.config/qtile/mdt_shell b/files/.config/qtile/mdt_shell new file mode 100755 index 0000000..90fa6f3 --- /dev/null +++ b/files/.config/qtile/mdt_shell | |||
| @@ -0,0 +1 @@ | |||
| TERM=xterm-256color /home/jakub/.local/bin/mdt shell | |||
diff --git a/files/.config/qtile/photos/desktop.png b/files/.config/qtile/photos/desktop.png new file mode 100644 index 0000000..8fca190 --- /dev/null +++ b/files/.config/qtile/photos/desktop.png | |||
| Binary files differ | |||
diff --git a/files/.config/qtile/python.png b/files/.config/qtile/python.png new file mode 100644 index 0000000..9a4b1ed --- /dev/null +++ b/files/.config/qtile/python.png | |||
| Binary files differ | |||
diff --git a/files/.config/qtile/readme.org b/files/.config/qtile/readme.org new file mode 100644 index 0000000..235dd47 --- /dev/null +++ b/files/.config/qtile/readme.org | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | #+title: Config | ||
| 2 | |||
| 3 | * Qtile conifg | ||
| 4 | - My personal qtile config ;) | ||
| 5 | [[./photos/desktop.png]] | ||
diff --git a/files/.config/sway/config b/files/.config/sway/config new file mode 100644 index 0000000..cf587fc --- /dev/null +++ b/files/.config/sway/config | |||
| @@ -0,0 +1,195 @@ | |||
| 1 | set $mod Mod4 | ||
| 2 | |||
| 3 | set $left h | ||
| 4 | set $down j | ||
| 5 | set $up k | ||
| 6 | set $right l | ||
| 7 | |||
| 8 | set $term alacritty | ||
| 9 | set $emacs emacsclient -c | ||
| 10 | set $menu fuzzel -r0 -b 282828f2 -C 458588f2 -B 3 -s 458588f2 -S 282828FF --font "Terminus:size=12" -p "run: " | ||
| 11 | |||
| 12 | set $laptop-display eDP-1 | ||
| 13 | set $generic-display HDMI-A-1 | ||
| 14 | set $primary-home-display 'Iiyama North America PLE2407HDSD 0x01010101' | ||
| 15 | set $secondary-home-display 'Dell Inc. DELL E190S M8VPV186CELI' | ||
| 16 | |||
| 17 | set $primary-display-layout 'Samsung Electric Company C34H89x HTJM200007' $primary-home-display $generic-display $laptop-display | ||
| 18 | set $secondary-display-layout $secondary-home-display $laptop-display | ||
| 19 | |||
| 20 | # output * bg SPOILER_33.png fill | ||
| 21 | output * bg #002b36 solid_color | ||
| 22 | |||
| 23 | output $laptop-display resolution 1920x1080 position 1920,0 | ||
| 24 | output $generic-display resolution 1920x1080 position 0,0 | ||
| 25 | output $primary-home-display resolution 1920x1080 position 0,0 | ||
| 26 | output $secondary-home-display resolution 1280x1024 position 1920,0 | ||
| 27 | set $opacity 0.9 | ||
| 28 | |||
| 29 | client.focused #002b36 #586e75 #eee8d5 #268bd2 | ||
| 30 | client.focused_inactive #002b36 #073642 #93a1a1 #268bd2 | ||
| 31 | client.unfocused #002b36 #073642 #93a1a1 #268bd2 | ||
| 32 | client.urgent #002b36 #dc322f #fdf6e3 #002b36 | ||
| 33 | |||
| 34 | input type:keyboard { | ||
| 35 | xkb_layout pl,us | ||
| 36 | } | ||
| 37 | |||
| 38 | input type:touchpad { | ||
| 39 | tap enabled | ||
| 40 | middle_emulation enabled | ||
| 41 | } | ||
| 42 | |||
| 43 | bindsym $mod+Shift+s output $laptop-display toggle | ||
| 44 | |||
| 45 | set $swaylock 'swaylock -f -c 000000 --font "Terminus"' | ||
| 46 | exec swayidle -w \ | ||
| 47 | timeout 280 $swaylock \ | ||
| 48 | timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \ | ||
| 49 | before-sleep $swaylock | ||
| 50 | |||
| 51 | # inhibit_idle fullscreen | ||
| 52 | |||
| 53 | bindsym $mod+Escape exec $swaylock | ||
| 54 | |||
| 55 | bindsym XF86MonBrightnessUp exec brightnessctl set 5%+ | ||
| 56 | bindsym XF86MonBrightnessDown exec brightnessctl set 5%- | ||
| 57 | |||
| 58 | bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle | ||
| 59 | bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% | ||
| 60 | bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% | ||
| 61 | |||
| 62 | bindsym XF86AudioNext exec playerctl next | ||
| 63 | bindsym XF86AudioPrev exec playerctl previous | ||
| 64 | bindsym XF86AudioPlay exec playerctl play-pause | ||
| 65 | bindsym XF86AudioPause exec playerctl pause | ||
| 66 | |||
| 67 | bindsym print exec grimshot --notify copy area | ||
| 68 | bindsym $mod+print exec grimshot --notify copy output | ||
| 69 | bindsym $mod+Ctrl+print grimshot save area - | swappy -f - | ||
| 70 | |||
| 71 | bindsym $mod+Return exec $term | ||
| 72 | |||
| 73 | bindsym $mod+Shift+q kill | ||
| 74 | |||
| 75 | floating_modifier $mod normal | ||
| 76 | |||
| 77 | bindsym $mod+Shift+c reload | ||
| 78 | bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' | ||
| 79 | |||
| 80 | bindsym $mod+$left focus left | ||
| 81 | bindsym $mod+$down focus down | ||
| 82 | bindsym $mod+$up focus up | ||
| 83 | bindsym $mod+$right focus right | ||
| 84 | |||
| 85 | bindsym $mod+Shift+$left move left | ||
| 86 | bindsym $mod+Shift+$down move down | ||
| 87 | bindsym $mod+Shift+$up move up | ||
| 88 | bindsym $mod+Shift+$right move right | ||
| 89 | |||
| 90 | workspace 1 output $primary-display-layout | ||
| 91 | workspace 2 output $primary-display-layout | ||
| 92 | workspace 3 output $secondary-display-layout | ||
| 93 | workspace 4 output $secondary-display-layout | ||
| 94 | workspace 9 output $primary-display-layout | ||
| 95 | workspace 10 output $secondary-display-layout | ||
| 96 | |||
| 97 | bindsym $mod+1 workspace number 1 | ||
| 98 | bindsym $mod+2 workspace number 2 | ||
| 99 | bindsym $mod+3 workspace number 3 | ||
| 100 | bindsym $mod+4 workspace number 4 | ||
| 101 | bindsym $mod+5 workspace number 5 | ||
| 102 | bindsym $mod+6 workspace number 6 | ||
| 103 | bindsym $mod+7 workspace number 7 | ||
| 104 | bindsym $mod+8 workspace number 8 | ||
| 105 | bindsym $mod+9 workspace number 9 | ||
| 106 | bindsym $mod+0 workspace number 10 | ||
| 107 | |||
| 108 | bindsym $mod+Shift+1 move container to workspace number 1 | ||
| 109 | bindsym $mod+Shift+2 move container to workspace number 2 | ||
| 110 | bindsym $mod+Shift+3 move container to workspace number 3 | ||
| 111 | bindsym $mod+Shift+4 move container to workspace number 4 | ||
| 112 | bindsym $mod+Shift+5 move container to workspace number 5 | ||
| 113 | bindsym $mod+Shift+6 move container to workspace number 6 | ||
| 114 | bindsym $mod+Shift+7 move container to workspace number 7 | ||
| 115 | bindsym $mod+Shift+8 move container to workspace number 8 | ||
| 116 | bindsym $mod+Shift+9 move container to workspace number 9 | ||
| 117 | bindsym $mod+Shift+0 move container to workspace number 10 | ||
| 118 | |||
| 119 | assign [app_id="(firefox-default|Firefox|qutebrowser|Chromium-browser)"] 2 | ||
| 120 | assign [instance="(chromium-browser)"] 2 | ||
| 121 | assign [instance="(spotify)"] 3 | ||
| 122 | assign [app_id=".blueman-manager-real"] 3 | ||
| 123 | assign [app_id="pavucontrol"] 3 | ||
| 124 | assign [app_id="(org.telegram.desktop)"] 4 | ||
| 125 | assign [app_id="vesktop"] 4 | ||
| 126 | assign [app_id="com.ktechpit.whatsie"] 4 | ||
| 127 | assign [instance="(discord)"] 4 | ||
| 128 | |||
| 129 | # for_window [app_id="vesktop"] opacity $opacity | ||
| 130 | |||
| 131 | bindsym $mod+b splith | ||
| 132 | bindsym $mod+v splitv | ||
| 133 | |||
| 134 | bindsym $mod+s layout stacking | ||
| 135 | bindsym $mod+w layout tabbed | ||
| 136 | bindsym $mod+e layout toggle split | ||
| 137 | |||
| 138 | bindsym $mod+f fullscreen | ||
| 139 | bindsym $mod+Shift+space floating toggle | ||
| 140 | bindsym $mod+space focus mode_toggle | ||
| 141 | bindsym $mod+a focus parent | ||
| 142 | |||
| 143 | bindsym $mod+Shift+minus move scratchpad | ||
| 144 | bindsym $mod+minus scratchpad show | ||
| 145 | |||
| 146 | mode "resize" { | ||
| 147 | bindsym $left resize shrink width 10px | ||
| 148 | bindsym $down resize grow height 10px | ||
| 149 | bindsym $up resize shrink height 10px | ||
| 150 | bindsym $right resize grow width 10px | ||
| 151 | |||
| 152 | bindsym Return mode "default" | ||
| 153 | bindsym Control+g mode "default" | ||
| 154 | bindsym Escape mode "default" | ||
| 155 | } | ||
| 156 | bindsym $mod+r mode "resize" | ||
| 157 | |||
| 158 | set $default swaymsg mode default | ||
| 159 | mode "menu" { | ||
| 160 | bindsym --no-repeat e exec '$default; $emacs;' | ||
| 161 | bindsym --no-repeat w exec "$default; whois-at-hsp -n" | ||
| 162 | |||
| 163 | bindsym Return mode "default" | ||
| 164 | bindsym Control+g mode "default" | ||
| 165 | bindsym Escape mode "default" | ||
| 166 | |||
| 167 | } | ||
| 168 | bindsym $mod+o mode "menu" | ||
| 169 | |||
| 170 | |||
| 171 | workspace_layout tabbed | ||
| 172 | |||
| 173 | # default_border normal 3 | ||
| 174 | # gaps outer 0 | ||
| 175 | # gaps inner 6 | ||
| 176 | # corner_radius 4 | ||
| 177 | # blur_xray disable | ||
| 178 | # blur enable | ||
| 179 | # layer_effects "waybar" blur enable | ||
| 180 | |||
| 181 | font Terminus (TTF) 12 | ||
| 182 | bindsym $mod+p exec $menu | ||
| 183 | |||
| 184 | |||
| 185 | # Taken from dawivil dotfiles. | ||
| 186 | exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway | ||
| 187 | |||
| 188 | # exec udiskie -t | ||
| 189 | exec mako --font "Terminus (TTF)" --outer-margin=5 --margin=3 --border-size=3 --default-timeout=7000 --background="#282828e0" | ||
| 190 | |||
| 191 | exec nm-applet --indicator | ||
| 192 | exec blueman-applet | ||
| 193 | exec waybar | ||
| 194 | exec udiskie -t | ||
| 195 | exec wlsunset -l 51.919438 -L 19.145136 | ||
diff --git a/files/.config/waybar/config b/files/.config/waybar/config new file mode 100644 index 0000000..5ebee30 --- /dev/null +++ b/files/.config/waybar/config | |||
| @@ -0,0 +1,159 @@ | |||
| 1 | { | ||
| 2 | "layer": "top", | ||
| 3 | "position": "top", | ||
| 4 | |||
| 5 | "modules-left": [ | ||
| 6 | "sway/workspaces", | ||
| 7 | "sway/mode" | ||
| 8 | ], | ||
| 9 | |||
| 10 | "modules-right": [ | ||
| 11 | // "custom/whois", | ||
| 12 | "pulseaudio", | ||
| 13 | "network", | ||
| 14 | "memory", | ||
| 15 | "cpu", | ||
| 16 | "temperature", | ||
| 17 | "battery", | ||
| 18 | "sway/language", | ||
| 19 | "clock#date", | ||
| 20 | "clock#time", | ||
| 21 | "idle_inhibitor", | ||
| 22 | "tray" | ||
| 23 | ], | ||
| 24 | |||
| 25 | // Modules | ||
| 26 | "idle_inhibitor": { | ||
| 27 | "format": "{icon}", | ||
| 28 | "format-icons": { | ||
| 29 | "activated": "", | ||
| 30 | "deactivated": "" | ||
| 31 | } | ||
| 32 | }, | ||
| 33 | |||
| 34 | "battery": { | ||
| 35 | "interval": 10, | ||
| 36 | "states": { | ||
| 37 | "warning": 30, | ||
| 38 | "critical": 15 | ||
| 39 | }, | ||
| 40 | "format-time": "{H}:{M:02}", | ||
| 41 | "format": "{icon} {capacity}% ({time})", | ||
| 42 | "format-charging": " {capacity}% ({time})", | ||
| 43 | "format-charging-full": " {capacity}%", | ||
| 44 | "format-full": "{icon} {capacity}%", | ||
| 45 | "format-alt": "{icon} {power}W", | ||
| 46 | "format-icons": [ | ||
| 47 | "", | ||
| 48 | "", | ||
| 49 | "", | ||
| 50 | "", | ||
| 51 | "" | ||
| 52 | ], | ||
| 53 | "tooltip": false | ||
| 54 | }, | ||
| 55 | |||
| 56 | "clock#time": { | ||
| 57 | "interval": 10, | ||
| 58 | "format": "{:%H:%M}", | ||
| 59 | "tooltip": false | ||
| 60 | }, | ||
| 61 | |||
| 62 | "clock#date": { | ||
| 63 | "interval": 20, | ||
| 64 | "format": " {:%e %b %Y}", | ||
| 65 | "tooltip": false | ||
| 66 | //"tooltip-format": "{:%e %B %Y}" | ||
| 67 | }, | ||
| 68 | |||
| 69 | "cpu": { | ||
| 70 | "interval": 5, | ||
| 71 | "tooltip": false, | ||
| 72 | "format": " {usage}%", | ||
| 73 | "format-alt": " {load}", | ||
| 74 | "states": { | ||
| 75 | "warning": 70, | ||
| 76 | "critical": 90 | ||
| 77 | } | ||
| 78 | }, | ||
| 79 | |||
| 80 | "sway/language": { | ||
| 81 | "format": " {}", | ||
| 82 | "min-length": 5, | ||
| 83 | "on-click": "swaymsg 'input * xkb_switch_layout next'", | ||
| 84 | "tooltip": false | ||
| 85 | }, | ||
| 86 | |||
| 87 | "memory": { | ||
| 88 | "interval": 5, | ||
| 89 | "format": " {used:0.1f}G/{total:0.1f}G", | ||
| 90 | "states": { | ||
| 91 | "warning": 70, | ||
| 92 | "critical": 90 | ||
| 93 | }, | ||
| 94 | "tooltip": false | ||
| 95 | }, | ||
| 96 | |||
| 97 | "network": { | ||
| 98 | "interval": 5, | ||
| 99 | "format-wifi": " {essid} ({signalStrength}%)", | ||
| 100 | "format-ethernet": " {ifname}", | ||
| 101 | "format-disconnected": "No connection", | ||
| 102 | "format-alt": " {ipaddr}/{cidr}", | ||
| 103 | "tooltip": false | ||
| 104 | }, | ||
| 105 | |||
| 106 | "sway/mode": { | ||
| 107 | "format": "{}", | ||
| 108 | "tooltip": false | ||
| 109 | }, | ||
| 110 | |||
| 111 | "sway/window": { | ||
| 112 | "format": "{}", | ||
| 113 | "max-length": 30, | ||
| 114 | "tooltip": false | ||
| 115 | }, | ||
| 116 | |||
| 117 | "sway/workspaces": { | ||
| 118 | "disable-scroll-wraparound": true, | ||
| 119 | "smooth-scrolling-threshold": 4, | ||
| 120 | "enable-bar-scroll": true, | ||
| 121 | "format": "{name}" | ||
| 122 | }, | ||
| 123 | |||
| 124 | "pulseaudio": { | ||
| 125 | "format": "{icon} {volume}%", | ||
| 126 | "format-bluetooth": "{icon} {volume}%", | ||
| 127 | "format-muted": "", | ||
| 128 | "format-icons": { | ||
| 129 | "headphone": "", | ||
| 130 | "hands-free": "", | ||
| 131 | "headset": "", | ||
| 132 | "phone": "", | ||
| 133 | "portable": "", | ||
| 134 | "car": "", | ||
| 135 | "default": ["", ""] | ||
| 136 | }, | ||
| 137 | "scroll-step": 1, | ||
| 138 | "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle", | ||
| 139 | "tooltip": false | ||
| 140 | }, | ||
| 141 | |||
| 142 | "temperature": { | ||
| 143 | "critical-threshold": 90, | ||
| 144 | "interval": 5, | ||
| 145 | "format": "{icon} {temperatureC}°", | ||
| 146 | "format-icons": [ | ||
| 147 | "", | ||
| 148 | "", | ||
| 149 | "", | ||
| 150 | "", | ||
| 151 | "" | ||
| 152 | ], | ||
| 153 | "tooltip": false | ||
| 154 | }, | ||
| 155 | |||
| 156 | "tray": { | ||
| 157 | "icon-size": 18, | ||
| 158 | } | ||
| 159 | } | ||
diff --git a/files/.config/waybar/style.css b/files/.config/waybar/style.css new file mode 100644 index 0000000..53d732b --- /dev/null +++ b/files/.config/waybar/style.css | |||
| @@ -0,0 +1,205 @@ | |||
| 1 | /* Keyframes */ | ||
| 2 | |||
| 3 | @keyframes blink-critical { | ||
| 4 | to { | ||
| 5 | /*color: @white;*/ | ||
| 6 | background-color: @critical; | ||
| 7 | } | ||
| 8 | } | ||
| 9 | |||
| 10 | |||
| 11 | /* Styles */ | ||
| 12 | |||
| 13 | /* Colors (gruvbox) */ | ||
| 14 | @define-color black #073642; | ||
| 15 | @define-color red #dc322f; | ||
| 16 | @define-color green #859900; | ||
| 17 | @define-color yellow #b58900; | ||
| 18 | @define-color blue #268bd2; | ||
| 19 | @define-color purple #d33682; | ||
| 20 | @define-color aqua #00afaf; | ||
| 21 | @define-color gray #1c1c1c; | ||
| 22 | @define-color brgray #928374; | ||
| 23 | @define-color brred #cb4b16; | ||
| 24 | @define-color brgreen #586e75; | ||
| 25 | @define-color bryellow #657b83; | ||
| 26 | @define-color brblue #839496; | ||
| 27 | @define-color brpurple #6c71c4; | ||
| 28 | @define-color braqua #93a1a1; | ||
| 29 | @define-color white #eee8d5; | ||
| 30 | @define-color bg1 #073642; | ||
| 31 | @define-color bg2 #002b36; | ||
| 32 | |||
| 33 | |||
| 34 | @define-color warning @bryellow; | ||
| 35 | @define-color critical @red; | ||
| 36 | @define-color mode @bg2; | ||
| 37 | @define-color unfocused @bg2; | ||
| 38 | @define-color focused @blue; | ||
| 39 | @define-color inactive @purple; | ||
| 40 | @define-color sound @green; | ||
| 41 | @define-color network @yellow; | ||
| 42 | @define-color memory @aqua; | ||
| 43 | @define-color cpu @blue; | ||
| 44 | @define-color temp @brpurple; | ||
| 45 | @define-color layout @green; | ||
| 46 | @define-color battery @yellow; | ||
| 47 | @define-color date @aqua; | ||
| 48 | @define-color time @bg2; | ||
| 49 | @define-color tray @bg2; | ||
| 50 | |||
| 51 | /* Reset all styles */ | ||
| 52 | * { | ||
| 53 | border: none; | ||
| 54 | border-radius: 0; | ||
| 55 | min-height: 0; | ||
| 56 | margin: 0; | ||
| 57 | padding: 0; | ||
| 58 | box-shadow: none; | ||
| 59 | text-shadow: none; | ||
| 60 | icon-shadow: none; | ||
| 61 | } | ||
| 62 | |||
| 63 | /* The whole bar */ | ||
| 64 | #waybar { | ||
| 65 | background: @bg2; | ||
| 66 | color: @white; | ||
| 67 | font-family: "Terminus (TTF)", FontAwesome; | ||
| 68 | font-size: 12pt; | ||
| 69 | } | ||
| 70 | |||
| 71 | /* Each module */ | ||
| 72 | #battery, | ||
| 73 | #clock, | ||
| 74 | #cpu, | ||
| 75 | #language, | ||
| 76 | #memory, | ||
| 77 | #mode, | ||
| 78 | #network, | ||
| 79 | #pulseaudio, | ||
| 80 | #temperature, | ||
| 81 | #tray, | ||
| 82 | #backlight, | ||
| 83 | #idle_inhibitor, | ||
| 84 | #disk, | ||
| 85 | #user, | ||
| 86 | #mpris { | ||
| 87 | padding-left: 8pt; | ||
| 88 | padding-right: 8pt; | ||
| 89 | } | ||
| 90 | |||
| 91 | /* Each critical module */ | ||
| 92 | #memory.critical, | ||
| 93 | #cpu.critical, | ||
| 94 | #temperature.critical, | ||
| 95 | #battery.critical.discharging { | ||
| 96 | animation-timing-function: linear; | ||
| 97 | animation-iteration-count: infinite; | ||
| 98 | animation-direction: alternate; | ||
| 99 | animation-name: blink-critical; | ||
| 100 | animation-duration: 1s; | ||
| 101 | } | ||
| 102 | |||
| 103 | /* Each warning */ | ||
| 104 | #network.disconnected, | ||
| 105 | #memory.warning, | ||
| 106 | #cpu.warning, | ||
| 107 | #temperature.warning, | ||
| 108 | #battery.warning.discharging { | ||
| 109 | color: @warning; | ||
| 110 | } | ||
| 111 | |||
| 112 | /* And now modules themselves in their respective order */ | ||
| 113 | |||
| 114 | /* Current sway mode (resize etc) */ | ||
| 115 | #mode { | ||
| 116 | color: @white; | ||
| 117 | background: @mode; | ||
| 118 | } | ||
| 119 | |||
| 120 | /* Workspaces stuff */ | ||
| 121 | #workspaces button { | ||
| 122 | /*font-weight: bold;*/ | ||
| 123 | padding-left: 2pt; | ||
| 124 | padding-right: 2pt; | ||
| 125 | color: @white; | ||
| 126 | background: @unfocused; | ||
| 127 | } | ||
| 128 | |||
| 129 | /* Inactive (on unfocused output) */ | ||
| 130 | #workspaces button.visible { | ||
| 131 | color: @white; | ||
| 132 | background: @inactive; | ||
| 133 | } | ||
| 134 | |||
| 135 | /* Active (on focused output) */ | ||
| 136 | #workspaces button.focused { | ||
| 137 | color: @black; | ||
| 138 | background: @focused; | ||
| 139 | } | ||
| 140 | |||
| 141 | /* Contains an urgent window */ | ||
| 142 | #workspaces button.urgent { | ||
| 143 | color: @black; | ||
| 144 | background: @warning; | ||
| 145 | } | ||
| 146 | |||
| 147 | /* Style when cursor is on the button */ | ||
| 148 | #workspaces button:hover { | ||
| 149 | background: @black; | ||
| 150 | color: @white; | ||
| 151 | } | ||
| 152 | |||
| 153 | #window { | ||
| 154 | margin-right: 35pt; | ||
| 155 | margin-left: 35pt; | ||
| 156 | } | ||
| 157 | |||
| 158 | #pulseaudio { | ||
| 159 | background: @sound; | ||
| 160 | color: @black; | ||
| 161 | } | ||
| 162 | |||
| 163 | #network { | ||
| 164 | background: @network; | ||
| 165 | color: @white; | ||
| 166 | } | ||
| 167 | |||
| 168 | #memory { | ||
| 169 | background: @memory; | ||
| 170 | color: @black; | ||
| 171 | } | ||
| 172 | |||
| 173 | #cpu { | ||
| 174 | background: @cpu; | ||
| 175 | color: @white; | ||
| 176 | } | ||
| 177 | |||
| 178 | #temperature { | ||
| 179 | background: @temp; | ||
| 180 | color: @black; | ||
| 181 | } | ||
| 182 | |||
| 183 | #language { | ||
| 184 | background: @layout; | ||
| 185 | color: @black; | ||
| 186 | } | ||
| 187 | |||
| 188 | #battery { | ||
| 189 | background: @battery; | ||
| 190 | color: @white; | ||
| 191 | } | ||
| 192 | |||
| 193 | #tray { | ||
| 194 | background: @tray; | ||
| 195 | } | ||
| 196 | |||
| 197 | #clock.date { | ||
| 198 | background: @date; | ||
| 199 | color: @black; | ||
| 200 | } | ||
| 201 | |||
| 202 | #clock.time { | ||
| 203 | background: @time; | ||
| 204 | color: @white; | ||
| 205 | } | ||
diff --git a/files/.emacs.d/.gitignore b/files/.emacs.d/.gitignore new file mode 100644 index 0000000..10f87ad --- /dev/null +++ b/files/.emacs.d/.gitignore | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | * | ||
| 2 | !init.el | ||
| 3 | !jd | ||
| 4 | !jd/* | ||
| 5 | !.gitignore \ No newline at end of file | ||
diff --git a/files/.emacs.d/init.el b/files/.emacs.d/init.el new file mode 100755 index 0000000..090592f --- /dev/null +++ b/files/.emacs.d/init.el | |||
| @@ -0,0 +1,146 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | ;; Minimize garbage collection during startup | ||
| 7 | (setq gc-cons-threshold most-positive-fixnum) | ||
| 8 | |||
| 9 | ;; Lower threshold back to 8 MiB (default is 800kB) | ||
| 10 | (add-hook 'emacs-startup-hook | ||
| 11 | (lambda () | ||
| 12 | (setq gc-cons-threshold (expt 2 23)))) | ||
| 13 | |||
| 14 | (defvar jd/manifest-list | ||
| 15 | nil | ||
| 16 | "List that contain Emacs packages for GNU/Guix." ) | ||
| 17 | |||
| 18 | (defvar jd/exwm-p | ||
| 19 | (or (not (null (getenv "JD_EXWM"))) | ||
| 20 | (and (seq-contains command-line-args "exwm" #'string-match) | ||
| 21 | t)) | ||
| 22 | "Is non-nil when Emacs is run as a window manager.") | ||
| 23 | |||
| 24 | (defvar jd/guix-p | ||
| 25 | (and (eq system-type 'gnu/linux) | ||
| 26 | (file-exists-p "/etc/os-release") | ||
| 27 | (with-temp-buffer | ||
| 28 | (insert-file-contents "/etc/os-release") | ||
| 29 | (search-forward "ID=guix" nil t)) | ||
| 30 | t) | ||
| 31 | "Is non-nil when Emacs packages are installed by GNU/Guix package manager.") | ||
| 32 | |||
| 33 | (defun jd/add-package-to-manifest (guix-package-name) | ||
| 34 | "Add GUIX-PACKAGE-NAME to jd/manifest-list." | ||
| 35 | (unless (member guix-package-name jd/manifest-list) | ||
| 36 | (setq jd/manifest-list | ||
| 37 | (cons guix-package-name jd/manifest-list)))) | ||
| 38 | |||
| 39 | (add-to-list 'load-path (concat user-emacs-directory "/jd")) | ||
| 40 | |||
| 41 | (defun jd/display-startup-time () | ||
| 42 | (message "Emacs loaded in %s with %d garbage collections." | ||
| 43 | (format "%.2f seconds" | ||
| 44 | (float-time | ||
| 45 | (time-subtract after-init-time before-init-time))) | ||
| 46 | gcs-done)) | ||
| 47 | |||
| 48 | (defun jd-emacs/startup () | ||
| 49 | "This procedure will run after Emacs startup." | ||
| 50 | (electric-pair-mode 1) | ||
| 51 | (global-company-mode 1) | ||
| 52 | (jd/display-startup-time)) | ||
| 53 | |||
| 54 | (add-hook 'emacs-startup-hook #'jd-emacs/startup) | ||
| 55 | |||
| 56 | (setq user-full-name "Jakub Dlugosz" | ||
| 57 | user-mail-address "jdlugosz963@gmail.com") | ||
| 58 | |||
| 59 | (setq backup-directory-alist '(("." . "~/.cache/emacs/backup")) | ||
| 60 | backup-by-copying t | ||
| 61 | version-control t | ||
| 62 | delete-old-versions t | ||
| 63 | kept-new-versions 20 | ||
| 64 | kept-old-versions 5 | ||
| 65 | custom-file (concat user-emacs-directory | ||
| 66 | "custom.el")) | ||
| 67 | |||
| 68 | ;; (setq user-emacs-directory "~/.cache/emacs") | ||
| 69 | |||
| 70 | (require 'package) | ||
| 71 | (setq package-archives '(("melpa" . "https://melpa.org/packages/") | ||
| 72 | ("org" . "https://orgmode.org/elpa/") | ||
| 73 | ("gnu-devel" . "https://elpa.gnu.org/devel/") | ||
| 74 | ("elpa" . "https://elpa.gnu.org/packages/"))) | ||
| 75 | (package-initialize) | ||
| 76 | |||
| 77 | (unless package-archive-contents | ||
| 78 | (package-refresh-contents)) | ||
| 79 | |||
| 80 | (jd/add-package-to-manifest "emacs-use-package") | ||
| 81 | (unless jd/guix-p | ||
| 82 | (unless (package-installed-p 'use-package) | ||
| 83 | (package-install 'use-package))) | ||
| 84 | |||
| 85 | (require 'use-package) | ||
| 86 | |||
| 87 | (setq use-package-always-ensure (not jd/guix-p)) | ||
| 88 | |||
| 89 | (defun jd/generate-manifest () | ||
| 90 | "Generate GNU/Guix Emacs manifest to temp-buffer." | ||
| 91 | (interactive) | ||
| 92 | (with-output-to-temp-buffer "*guix-emacs-packages-manifest.scm*" | ||
| 93 | (princ (concat ";; This file is auto-generated by Emacs " | ||
| 94 | "function: jd/manifest-generate-to-file \n")) | ||
| 95 | (princ `(specifications->manifest | ||
| 96 | '(,@(mapcar #'(lambda (guix-package-name) | ||
| 97 | (concat "\"" | ||
| 98 | guix-package-name | ||
| 99 | "\"\n")) | ||
| 100 | jd/manifest-list)))))) | ||
| 101 | |||
| 102 | (defun use-package-normalize/:guix-package (name keyword args) | ||
| 103 | (use-package-as-one (symbol-name keyword) args | ||
| 104 | #'(lambda (_label arg) | ||
| 105 | (cond | ||
| 106 | ((consp arg) arg) | ||
| 107 | ((stringp arg) (list arg)) | ||
| 108 | ((use-package-non-nil-symbolp arg) (symbol-name arg)) | ||
| 109 | (t | ||
| 110 | (use-package-error | ||
| 111 | ":pin wants an archive name (a string)")))))) | ||
| 112 | |||
| 113 | (defun use-package-handler/:guix-package | ||
| 114 | (name _keyword args rest state) | ||
| 115 | (let ((body (use-package-process-keywords name rest state))) | ||
| 116 | (use-package-concat | ||
| 117 | (when (consp args) | ||
| 118 | (mapcar #'(lambda (arg) | ||
| 119 | `(jd/add-package-to-manifest ,arg)) | ||
| 120 | args)) | ||
| 121 | body))) | ||
| 122 | |||
| 123 | (add-to-list 'use-package-keywords ':guix-package) | ||
| 124 | |||
| 125 | (jd/add-package-to-manifest "emacs") | ||
| 126 | (jd/add-package-to-manifest "emacs-guix") | ||
| 127 | |||
| 128 | (require 'jd-keys) | ||
| 129 | (require 'jd-ui) | ||
| 130 | (require 'jd-org) | ||
| 131 | (require 'jd-dev) | ||
| 132 | (require 'jd-apps) | ||
| 133 | (require 'jd-custom) | ||
| 134 | (require 'jd-mu4e) | ||
| 135 | (require 'jd-misc) | ||
| 136 | (require 'jd-sway) | ||
| 137 | |||
| 138 | (when jd/exwm-p | ||
| 139 | (require 'jd-exwm)) | ||
| 140 | |||
| 141 | ;; (setq gc-cons-threshold (* 2 1000 1000)) | ||
| 142 | |||
| 143 | ;;; init.el ends here | ||
| 144 | (put 'upcase-region 'disabled nil) | ||
| 145 | (put 'downcase-region 'disabled nil) | ||
| 146 | (put 'set-goal-column 'disabled nil) | ||
diff --git a/files/.emacs.d/jd/jd-apps.el b/files/.emacs.d/jd/jd-apps.el new file mode 100755 index 0000000..f06430b --- /dev/null +++ b/files/.emacs.d/jd/jd-apps.el | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (use-package vterm | ||
| 7 | :guix-package "emacs-vterm" | ||
| 8 | :init | ||
| 9 | (add-to-list 'project-switch-commands '(project-vterm "Vterm") t) | ||
| 10 | (add-to-list 'project-kill-buffer-conditions | ||
| 11 | '(major-mode . vterm-mode)) | ||
| 12 | (setq vterm-copy-exclude-prompt t) | ||
| 13 | :config | ||
| 14 | (setq vterm-buffer-name "vterm") | ||
| 15 | ;; (evil-set-initial-state 'vterm-mode 'emacs) | ||
| 16 | (setq vterm-tramp-shells | ||
| 17 | (append '(("ssh" "/bin/bash")) vterm-tramp-shells)) | ||
| 18 | |||
| 19 | ) | ||
| 20 | |||
| 21 | (use-package all-the-icons-dired | ||
| 22 | :guix-package "emacs-all-the-icons-dired" | ||
| 23 | :hook (dired-mode . all-the-icons-dired-mode)) | ||
| 24 | |||
| 25 | (use-package dired | ||
| 26 | :ensure nil | ||
| 27 | :commands (dired dired-jump) | ||
| 28 | :custom ((dired-listing-switches "-agho --group-directories-first")) | ||
| 29 | :config | ||
| 30 | (setq dired-kill-when-opening-new-dired-buffer t)) | ||
| 31 | |||
| 32 | (use-package pdf-tools | ||
| 33 | :guix-package | ||
| 34 | "emacs-pdf-tools") | ||
| 35 | |||
| 36 | (use-package password-store | ||
| 37 | :guix-package "emacs-password-store" | ||
| 38 | :bind | ||
| 39 | ("C-c P p" . password-store-copy) | ||
| 40 | ("C-c P i" . password-store-insert) | ||
| 41 | ("C-c P g" . password-store-generate)) | ||
| 42 | |||
| 43 | (use-package shell | ||
| 44 | :bind | ||
| 45 | ("C-c C-<return>" . shell)) | ||
| 46 | |||
| 47 | (provide 'jd-apps) | ||
| 48 | |||
| 49 | ;;; jd-apps.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-custom.el b/files/.emacs.d/jd/jd-custom.el new file mode 100755 index 0000000..a634baa --- /dev/null +++ b/files/.emacs.d/jd/jd-custom.el | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (setq erc-nick "bobbma" | ||
| 7 | erc-user-full-name "Jakub Dlugosz" | ||
| 8 | erc-notify-list '("akuleszaa")) | ||
| 9 | |||
| 10 | (defun hipis-znc () | ||
| 11 | (interactive) | ||
| 12 | (erc :server "195.74.91.18" | ||
| 13 | :port "6697")) | ||
| 14 | |||
| 15 | |||
| 16 | ;; Repair load paths when tramp try to connect to guix instances | ||
| 17 | (require 'tramp) | ||
| 18 | |||
| 19 | (connection-local-set-profile-variables | ||
| 20 | 'guix-system | ||
| 21 | '((tramp-remote-path . (tramp-own-remote-path)))) | ||
| 22 | |||
| 23 | (connection-local-set-profiles | ||
| 24 | '(:application tramp :protocol "sudo" :machine "localhost") | ||
| 25 | 'guix-system) | ||
| 26 | |||
| 27 | (connection-local-set-profiles | ||
| 28 | '(:application tramp :protocol "ssh" :machine "jdlugosz.com") | ||
| 29 | 'guix-system) | ||
| 30 | |||
| 31 | (provide 'jd-custom) | ||
| 32 | |||
| 33 | ;;; jd-custom.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-dev.el b/files/.emacs.d/jd/jd-dev.el new file mode 100755 index 0000000..12cd21b --- /dev/null +++ b/files/.emacs.d/jd/jd-dev.el | |||
| @@ -0,0 +1,177 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | ;; (setq c-default-style "linux" | ||
| 7 | ;; c-basic-offset 8 | ||
| 8 | ;; gdb-many-windows t) | ||
| 9 | |||
| 10 | (use-package lsp-mode | ||
| 11 | :guix-package "emacs-lsp-mode" | ||
| 12 | :diminish t | ||
| 13 | :commands (lsp lsp-deferred) | ||
| 14 | :init | ||
| 15 | (setq lsp-headerline-breadcrumb-enable nil) | ||
| 16 | (setq lsp-diagnostics-provider :none) | ||
| 17 | (setq lsp-modeline-diagnostics-enable nil) | ||
| 18 | (setq lsp-keymap-prefix "C-c l") | ||
| 19 | :config | ||
| 20 | (lsp-enable-which-key-integration t) | ||
| 21 | |||
| 22 | (global-set-key (kbd "C-x ]") | ||
| 23 | #'(lambda () | ||
| 24 | (interactive) | ||
| 25 | (forward-page) | ||
| 26 | (recenter-top-bottom 0))) | ||
| 27 | |||
| 28 | (global-set-key (kbd "C-x [") | ||
| 29 | #'(lambda () | ||
| 30 | (interactive) | ||
| 31 | (backward-page) | ||
| 32 | (recenter-top-bottom 0))) | ||
| 33 | |||
| 34 | (define-key c-mode-map | ||
| 35 | (kbd "C-c C-c") | ||
| 36 | #'(lambda () | ||
| 37 | (interactive) | ||
| 38 | (compile compile-command))) | ||
| 39 | |||
| 40 | (define-key c-mode-map | ||
| 41 | (kbd "C-c M-c") | ||
| 42 | 'compile)) | ||
| 43 | |||
| 44 | (use-package lsp-ivy | ||
| 45 | :guix-package "emacs-lsp-ivy" | ||
| 46 | :after lsp) | ||
| 47 | |||
| 48 | |||
| 49 | (use-package paredit | ||
| 50 | :guix-package "emacs-paredit") | ||
| 51 | |||
| 52 | (defun jd/lisp-mode-setup () | ||
| 53 | (rainbow-delimiters-mode) | ||
| 54 | (paredit-mode)) | ||
| 55 | |||
| 56 | (add-hook 'emacs-startup-hook | ||
| 57 | (lambda () | ||
| 58 | (add-hook 'scheme-mode-hook 'jd/lisp-mode-setup) | ||
| 59 | (add-hook 'emacs-lisp-mode-hook 'jd/lisp-mode-setup) | ||
| 60 | (add-hook 'clojure-mode-hook 'jd/lisp-mode-setup) | ||
| 61 | (add-hook 'lisp-mode-hook 'jd/lisp-mode-setup))) | ||
| 62 | |||
| 63 | (use-package rainbow-delimiters | ||
| 64 | :guix-package "emacs-rainbow-delimiters") | ||
| 65 | |||
| 66 | (use-package sly | ||
| 67 | :guix-package "emacs-sly") | ||
| 68 | |||
| 69 | (use-package geiser | ||
| 70 | :guix-package "emacs-geiser") | ||
| 71 | |||
| 72 | (use-package geiser-racket | ||
| 73 | :guix-package "emacs-geiser-racket") | ||
| 74 | |||
| 75 | (use-package racket-mode | ||
| 76 | :guix-package "emacs-racket-mode") | ||
| 77 | |||
| 78 | (use-package geiser-guile | ||
| 79 | :guix-package "emacs-geiser-guile" | ||
| 80 | :config | ||
| 81 | (when jd/guix-p | ||
| 82 | (defun jd/guix-repl () | ||
| 83 | (interactive) | ||
| 84 | (let ((geiser-guile-binary '("guix" "repl")) | ||
| 85 | (geiser-guile-load-path (cons "~/dotfiles/guix" geiser-guile-load-path))) | ||
| 86 | (geiser 'guile))))) | ||
| 87 | |||
| 88 | (use-package pyvenv | ||
| 89 | :guix-package "emacs-pyvenv" | ||
| 90 | :after python-mode) | ||
| 91 | |||
| 92 | (use-package typescript-mode | ||
| 93 | :guix-package "emacs-typescript-mode" | ||
| 94 | :mode ("\\.ts\\'") | ||
| 95 | :config | ||
| 96 | (setq typescript-indent-level 2)) | ||
| 97 | |||
| 98 | (use-package cider | ||
| 99 | :guix-package "emacs-cider") | ||
| 100 | |||
| 101 | (use-package tide | ||
| 102 | :guix-package "emacs-tide" | ||
| 103 | :after (typescript-mode company web-mode)) | ||
| 104 | |||
| 105 | (use-package flycheck | ||
| 106 | :guix-package "emacs-flycheck" | ||
| 107 | :hook ((after-init . global-flycheck-mode))) | ||
| 108 | |||
| 109 | (use-package web-mode | ||
| 110 | :guix-package "emacs-web-mode" | ||
| 111 | :mode | ||
| 112 | ("\\.ejs\\'" "\\.hbs\\'" "\\.html\\'" "\\.php\\'" "\\.[jt]sx?\\'") | ||
| 113 | :config | ||
| 114 | (setq web-mode-content-types-alist '(("jsx" . "\\.[jt]sx?\\'"))) | ||
| 115 | (setq web-mode-markup-indent-offset 2) | ||
| 116 | (setq web-mode-css-indent-offset 2) | ||
| 117 | (setq web-mode-code-indent-offset 2) | ||
| 118 | (setq web-mode-script-padding 2) | ||
| 119 | (setq web-mode-block-padding 2) | ||
| 120 | (setq web-mode-style-padding 2) | ||
| 121 | (setq web-mode-enable-auto-pairing t) | ||
| 122 | (setq web-mode-enable-auto-closing t) | ||
| 123 | (setq web-mode-enable-current-element-highlight t)) | ||
| 124 | |||
| 125 | (use-package yaml-mode | ||
| 126 | :guix-package "emacs-yaml-mode") | ||
| 127 | |||
| 128 | (use-package docker | ||
| 129 | :guix-package "emacs-docker" | ||
| 130 | :bind | ||
| 131 | ("C-c D d" . docker-containers) | ||
| 132 | ("C-c D D" . docker)) | ||
| 133 | |||
| 134 | (use-package company | ||
| 135 | :guix-package "emacs-company" | ||
| 136 | :diminish t | ||
| 137 | :after lsp-mode | ||
| 138 | :hook (lsp-mode . company-mode) | ||
| 139 | :bind (:map company-active-map | ||
| 140 | ("<tab>" . company-complete-selection)) | ||
| 141 | (:map lsp-mode-map | ||
| 142 | ("<tab>" . company-indent-or-complete-common)) | ||
| 143 | :custom | ||
| 144 | (company-minimum-prefix-length 1) | ||
| 145 | (company-idle-delay 0.0) | ||
| 146 | :config | ||
| 147 | (global-company-mode)) | ||
| 148 | |||
| 149 | (use-package projectile | ||
| 150 | :guix-package "emacs-projectile" | ||
| 151 | :diminish projectile-mode | ||
| 152 | :init | ||
| 153 | (when (file-directory-p "~/Documents/code") | ||
| 154 | (setq projectile-project-search-path '("~/Documents/code/"))) | ||
| 155 | :custom ((projectile-Completion-system 'ivy)) | ||
| 156 | :config | ||
| 157 | (setq projectile-switch-project-action #'projectile-dired) | ||
| 158 | (projectile-mode)) | ||
| 159 | |||
| 160 | (use-package magit | ||
| 161 | :guix-package "emacs-magit" | ||
| 162 | :custom | ||
| 163 | (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) | ||
| 164 | |||
| 165 | (use-package restclient | ||
| 166 | :guix-package "emacs-restclient") | ||
| 167 | |||
| 168 | (setq sql-connection-alist | ||
| 169 | '(("net47-abaks" | ||
| 170 | (sql-product 'postgres) | ||
| 171 | (sql-user "kuba") | ||
| 172 | (sql-database "net47") | ||
| 173 | (sql-server "net47.abaks.pl")))) | ||
| 174 | |||
| 175 | (provide 'jd-dev) | ||
| 176 | |||
| 177 | ;;; jd-dev.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-exwm.el b/files/.emacs.d/jd/jd-exwm.el new file mode 100755 index 0000000..7731b01 --- /dev/null +++ b/files/.emacs.d/jd/jd-exwm.el | |||
| @@ -0,0 +1,177 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | |||
| 7 | (use-package perspective | ||
| 8 | :guix-package "emacs-perspective") | ||
| 9 | |||
| 10 | (use-package exwm | ||
| 11 | :guix-package "emacs-exwm" | ||
| 12 | :config | ||
| 13 | (defun jd/exwm-update-class () | ||
| 14 | (exwm-workspace-rename-buffer exwm-class-name)) | ||
| 15 | |||
| 16 | (defun jd-exwm/run-in-background (command) | ||
| 17 | (let ((command-parts (split-string command "[ ]+"))) | ||
| 18 | (apply #'call-process `(,(car command-parts) nil 0 nil ,@(cdr command-parts))))) | ||
| 19 | |||
| 20 | (defun jd-exwm/restart-process (program-name) | ||
| 21 | (call-process "killall" nil nil nil program-name) | ||
| 22 | (jd-exwm/run-in-background program-name)) | ||
| 23 | |||
| 24 | (defun jd-exwm/exwm-init-hook () | ||
| 25 | (jd-exwm/run-in-background "nitrogen --restore") | ||
| 26 | (start-process-shell-command "xinput" nil "xinput set-prop 'ETPS/2 Elantech Touchpad' 'Synaptics Tap Action' 1 1 1 2 1") | ||
| 27 | (start-process-shell-command "syndaemon" nil "syndaemon -i 0.8 -K -R -d") | ||
| 28 | |||
| 29 | (jd-exwm/restart-process "polybar") | ||
| 30 | (jd-exwm/restart-process "nm-applet") | ||
| 31 | (jd-exwm/restart-process "redshift-gtk -l 54.37:18.6") | ||
| 32 | (jd-exwm/restart-process "blueman-applet")) | ||
| 33 | |||
| 34 | (defun jd-exwm/exwm-update-title () | ||
| 35 | (exwm-workspace-rename-buffer exwm-title)) | ||
| 36 | |||
| 37 | (defun jd-exwm/configure-window-by-class () | ||
| 38 | (interactive) | ||
| 39 | (pcase exwm-class-name | ||
| 40 | ("firefox" (exwm-workspace-move-window 2)) | ||
| 41 | ("Brave" (exwm-workspace-move-window 2)) | ||
| 42 | ("qutebrowser" (exwm-workspace-move-window 2)) | ||
| 43 | ("discord" (exwm-workspace-move-window 5)) | ||
| 44 | ("obs" (exwm-workspace-move-window 5)) | ||
| 45 | ("Virt-manager" (exwm-workspace-move-window 4)))) | ||
| 46 | |||
| 47 | (setq exwm-workspace-number 10) | ||
| 48 | |||
| 49 | ;; (add-hook 'exwm-init-hook #'jd-exwm/exwm-init-hook) | ||
| 50 | (add-hook 'exwm-update-class-hook #'jd/exwm-update-class) | ||
| 51 | (add-hook 'exwm-update-title-hook #'jd-exwm/exwm-update-title) | ||
| 52 | (add-hook 'exwm-manage-finish-hook #'jd-exwm/configure-window-by-class) | ||
| 53 | |||
| 54 | (require 'exwm-randr) | ||
| 55 | (setq exwm-randr-workspace-monitor-plist '(9 "eDP-1" 0 "eDP-1")) | ||
| 56 | (exwm-randr-enable) | ||
| 57 | |||
| 58 | (setq exwm-input-simulation-keys | ||
| 59 | '(([?\C-b] . [left]) | ||
| 60 | ([?\C-f] . [right]) | ||
| 61 | ([?\C-p] . [up]) | ||
| 62 | ([?\C-n] . [down]) | ||
| 63 | ([?\C-a] . [home]) | ||
| 64 | ([?\C-e] . [end]) | ||
| 65 | ([?\C-k] . [S-end delete]) | ||
| 66 | ([?\M-w] . [C-c]) | ||
| 67 | ([?\C-y] . [C-v]) | ||
| 68 | ([?\C-v] . [next]) | ||
| 69 | ([?\M-v] . [prior]) | ||
| 70 | )) | ||
| 71 | |||
| 72 | (setq exwm-input-prefix-keys | ||
| 73 | '(?\C-x | ||
| 74 | ?\C-u | ||
| 75 | ?\C-h | ||
| 76 | ?\M-x | ||
| 77 | ?\M-` | ||
| 78 | ?\M-& | ||
| 79 | ?\M-! | ||
| 80 | ?\C-g | ||
| 81 | ?\M-: | ||
| 82 | ?\C-\M-j | ||
| 83 | ?\C-\ )) | ||
| 84 | |||
| 85 | (define-key exwm-mode-map [?\C-q] 'exwm-input-send-next-key) | ||
| 86 | (exwm-input-set-key (kbd "s-p") 'counsel-linux-app) | ||
| 87 | |||
| 88 | (setq exwm-input-global-keys | ||
| 89 | `(([?\s-R] . exwm-reset) | ||
| 90 | |||
| 91 | |||
| 92 | ([?\s-r] . (lambda (command) | ||
| 93 | (interactive (list (read-shell-command "$ "))) | ||
| 94 | (start-process-shell-command command nil command))) | ||
| 95 | |||
| 96 | ([?\s-W] . exwm-workspace-move-window) | ||
| 97 | ([?\s-w] . exwm-workspace-switch) | ||
| 98 | |||
| 99 | ,@(mapcar (lambda (i) | ||
| 100 | `(,(kbd (format "s-%d" i)) . | ||
| 101 | (lambda () | ||
| 102 | (interactive) | ||
| 103 | (exwm-workspace-switch-create ,i)))) | ||
| 104 | (number-sequence 0 9)))) | ||
| 105 | |||
| 106 | (exwm-enable) | ||
| 107 | (require 'exwm-systemtray) | ||
| 108 | (exwm-systemtray-enable)) | ||
| 109 | |||
| 110 | (use-package desktop-environment | ||
| 111 | :guix-package "emacs-desktop-environment" | ||
| 112 | :after exwm | ||
| 113 | :custom | ||
| 114 | (desktop-environment-brightness-small-increment "2%+") | ||
| 115 | (desktop-environment-brightness-small-decrement "2%-") | ||
| 116 | (desktop-environment-brightness-normal-increment "5%+") | ||
| 117 | (desktop-environment-brightness-normal-decrement "5%-") | ||
| 118 | |||
| 119 | :config | ||
| 120 | (defun jd/dunst-show-history () | ||
| 121 | (interactive) | ||
| 122 | (start-process-shell-command "dunstctl" nil "dunstctl history-pop")) | ||
| 123 | (global-set-key (kbd "C-c N h") #'jd/dunst-show-history) | ||
| 124 | |||
| 125 | (defun jd/dunst-close () | ||
| 126 | (interactive) | ||
| 127 | (start-process-shell-command "dunstctl" nil "dunstctl close")) | ||
| 128 | (global-set-key (kbd "C-c N c") #'jd/dunst-close) | ||
| 129 | |||
| 130 | (defun jd/dunst-close-all () | ||
| 131 | (interactive) | ||
| 132 | (start-process-shell-command "dunstctl" nil "dunstctl close-all")) | ||
| 133 | (global-set-key (kbd "C-c N a") #'jd/dunst-close-all) | ||
| 134 | |||
| 135 | (desktop-environment-mode)) | ||
| 136 | |||
| 137 | ;; (set-frame-parameter (selected-frame) 'alpha '(90 . 90)) | ||
| 138 | ;; (add-to-list 'default-frame-alist `(alpha . (90 . 90))) | ||
| 139 | ;; (set-frame-parameter (selected-frame) 'fullscreen 'maximized) | ||
| 140 | ;; (add-to-list 'default-frame-alist '(fullscreen . maximized)) | ||
| 141 | |||
| 142 | (defun jd-exwm/get-color (ATTRIBUTE) | ||
| 143 | (face-attribute 'default ATTRIBUTE)) | ||
| 144 | |||
| 145 | (defun theme-to-xresources () | ||
| 146 | (interactive) | ||
| 147 | (require 'term) | ||
| 148 | (with-temp-buffer | ||
| 149 | (insert "! Generated by theme-to-xresources\n") | ||
| 150 | (dolist (spec | ||
| 151 | '(("emacs.background" :background "E6") | ||
| 152 | ("emacs.foreground" :foreground ""))) | ||
| 153 | (let ((color (jd-exwm/get-color (cadr spec)))) | ||
| 154 | (insert (format "%s: #%s%s\n" | ||
| 155 | (car spec) | ||
| 156 | (caddr spec) | ||
| 157 | (string-remove-prefix "#" color)))) | ||
| 158 | jd | ||
| 159 | (write-region (point-min) (point-max) "~/.Xresources"))) | ||
| 160 | (call-process "xrdb" nil nil nil "-merge" (expand-file-name "~/.Xresources"))) | ||
| 161 | |||
| 162 | (defun jd/theme-sync () | ||
| 163 | (interactive) | ||
| 164 | (theme-to-xresources) | ||
| 165 | (setq org-confirm-babel-evaluate nil) | ||
| 166 | (org-babel-tangle-file "~/dotfiles/Desktop.org") | ||
| 167 | (setq org-confirm-babel-evaluate 't) | ||
| 168 | (call-process "killall" nil nil nil "dunst") ;; TODO: prevent clear notification history | ||
| 169 | (jd-exwm/restart-process "polybar")) | ||
| 170 | |||
| 171 | ;; (add-hook 'jd/load-theme-hook #'jd/theme-sync) | ||
| 172 | ;; (add-hook 'exwm-init-hook #'jd/theme-sync) | ||
| 173 | |||
| 174 | (provide 'jd-exwm) | ||
| 175 | |||
| 176 | ;;; jd-exwm.el ends here | ||
| 177 | |||
diff --git a/files/.emacs.d/jd/jd-gym.el b/files/.emacs.d/jd/jd-gym.el new file mode 100755 index 0000000..581bf65 --- /dev/null +++ b/files/.emacs.d/jd/jd-gym.el | |||
| @@ -0,0 +1,120 @@ | |||
| 1 | ;;; jd-gym.el --- Gym workout manager. | ||
| 2 | ;;; Commentary: | ||
| 3 | ;; It will be a gym workout manager in the future. | ||
| 4 | ;;; code: | ||
| 5 | |||
| 6 | (require 'emacsql-sqlite) | ||
| 7 | |||
| 8 | (defconst jd-gym/db--tables-schema | ||
| 9 | '((workout-plans | ||
| 10 | [(id integer :primary-key :autoincrement) | ||
| 11 | (name text)]) | ||
| 12 | |||
| 13 | (workouts | ||
| 14 | [(id integer :primary-key :autoincrement) | ||
| 15 | (workout-plan-id integer :not-null) | ||
| 16 | (day integer :not-null) | ||
| 17 | (month integer :not-null) | ||
| 18 | (year integer :not-null)] | ||
| 19 | (:foreign-key [workout-plan-id] :references workout-plans [id] :on-delete :cascade)) | ||
| 20 | |||
| 21 | (muscle-part | ||
| 22 | [(id integer :primary-key :autoincrement) | ||
| 23 | (name text :not-null)]) | ||
| 24 | |||
| 25 | (exercises | ||
| 26 | [(id integer :primary-key :autoincrement) | ||
| 27 | (name text :not-null) | ||
| 28 | (muscle-part-id integer :not-null)] | ||
| 29 | (:foreign-key [muscle-part-id] :references muscle-part [id] :on-delete :cascade)) | ||
| 30 | |||
| 31 | (workout-plan-exercise-map | ||
| 32 | [(id integer :primary-key :autoincrement) | ||
| 33 | (week-day integer :not-null) | ||
| 34 | (workout-plan-id integer :not-null) | ||
| 35 | (exercise-id integer :not-null)] | ||
| 36 | (:foreign-key [workout-plan-id] :references workout-plans [id] :on-delete :cascade) | ||
| 37 | (:foreign-key [exercise-id] :references exercises [id] :on-delete :cascade)) | ||
| 38 | |||
| 39 | (workout-sets | ||
| 40 | [(id integer :primary-key :autoincrement) | ||
| 41 | (reps integer :not-null) | ||
| 42 | (weight integer :not-null) | ||
| 43 | (workout-plan-exercise-map-id integer :not-null) | ||
| 44 | (comment text)] | ||
| 45 | (:foreign-key [workout-plan-exercise-map-id] :references workout-plan-exercise-map [id] :on-delete :cascade)))) | ||
| 46 | |||
| 47 | (defconst jd-gym/db--test-data | ||
| 48 | '((workout-plans | ||
| 49 | ([nil "Push pull"])) | ||
| 50 | (workouts | ||
| 51 | ([nil 1 3 1 2023])) | ||
| 52 | (muscle-part | ||
| 53 | ([nil "glutes"] | ||
| 54 | [nil "chest"])) | ||
| 55 | (exercises | ||
| 56 | ([nil "Bench press" 2] | ||
| 57 | [nil "RDL" 1])) | ||
| 58 | (workout-plan-exercise-map | ||
| 59 | ([nil 0 1 1] ; Monday, Push pull, Bench press | ||
| 60 | [nil 1 1 2] ; Tuesday, Push pull, RDL | ||
| 61 | [nil 3 1 1] ; Thursday, Push pull, Bench press | ||
| 62 | [nil 4 1 2] ; Friday, Push pull, RDL | ||
| 63 | )) | ||
| 64 | (workout-sets | ||
| 65 | ([nil 7 70 1 "New PR!"] | ||
| 66 | [nil 8 110 2 "It was hard!"])))) | ||
| 67 | |||
| 68 | (defun jd-gym/db--test-data-insert () | ||
| 69 | "Insert test data to jd-gym database." | ||
| 70 | (mapc (lambda (table) | ||
| 71 | (let ((table-name (car table)) | ||
| 72 | (table-data (cdr table))) | ||
| 73 | (emacsql jd-gym/db--conn [:insert :into $i1 | ||
| 74 | :values $v2] | ||
| 75 | table-name table-data))) | ||
| 76 | jd-gym/db--test-data)) | ||
| 77 | |||
| 78 | (defvar jd-gym/db-path "~/Documents/Gym/gym.sqlite" | ||
| 79 | "Path can be relative or absolute.") | ||
| 80 | |||
| 81 | (defvar jd-gym/db--conn nil | ||
| 82 | "Store connection to jd-gym database.") | ||
| 83 | |||
| 84 | (defun jd-gym/db--conn-p () | ||
| 85 | "Check if jd-gym is connected to db." | ||
| 86 | (and (emacsql-sqlite-connection-p jd-gym/db--conn) | ||
| 87 | (emacsql-live-p jd-gym/db--conn))) | ||
| 88 | |||
| 89 | (defun jd-gym/db--connect () | ||
| 90 | "Connect to db if there is no connection yet." | ||
| 91 | (unless (jd-gym/db--conn-p) | ||
| 92 | (setq jd-gym/db--conn (emacsql-sqlite jd-gym/db-path)))) | ||
| 93 | |||
| 94 | (defun jd-gym/db--close () | ||
| 95 | "Close db connection." | ||
| 96 | (when (jd-gym/db--conn-p) | ||
| 97 | (emacsql-close jd-gym/db--conn))) | ||
| 98 | |||
| 99 | (defun jd-gym/db--init () | ||
| 100 | "Initialize database structure." | ||
| 101 | (when (jd-gym/db--conn-p) | ||
| 102 | (emacsql jd-gym/db--conn [:pragma (= foreign_keys ON)]) | ||
| 103 | (emacsql jd-gym/db--conn "PRAGMA foreign_keys=ON") | ||
| 104 | (mapc (lambda (table) | ||
| 105 | (let ((table-name (car table)) | ||
| 106 | (table-schema (cdr table))) | ||
| 107 | (emacsql jd-gym/db--conn [:create-table $i1 $S2] table-name table-schema))) | ||
| 108 | jd-gym/db--tables-schema))) | ||
| 109 | |||
| 110 | (defun jd-gym/db () | ||
| 111 | "Entrypoint to jd-gym db." | ||
| 112 | (unless (file-exists-p jd-gym/db-path) | ||
| 113 | (jd-gym/db--close) | ||
| 114 | (jd-gym/db--connect) ; Restart connection | ||
| 115 | (jd-gym/db--init))) | ||
| 116 | |||
| 117 | |||
| 118 | (provide 'jd-gym) | ||
| 119 | |||
| 120 | ;;; jd-gym.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-keys.el b/files/.emacs.d/jd/jd-keys.el new file mode 100755 index 0000000..8c1c4cb --- /dev/null +++ b/files/.emacs.d/jd/jd-keys.el | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | ;; Custom keysets used in my emacs | ||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (use-package multiple-cursors | ||
| 7 | :guix-package "emacs-multiple-cursors" | ||
| 8 | :config | ||
| 9 | (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) | ||
| 10 | (global-set-key (kbd "C->") 'mc/mark-next-like-this) | ||
| 11 | (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) | ||
| 12 | (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)) | ||
| 13 | |||
| 14 | (use-package hydra | ||
| 15 | :guix-package "emacs-hydra" | ||
| 16 | ;; :defer t | ||
| 17 | :config | ||
| 18 | (defun jd/text-scale-increase () | ||
| 19 | (interactive) | ||
| 20 | (let ((old-face-attribute (face-attribute 'default :height))) | ||
| 21 | (set-face-attribute 'default nil :height (+ old-face-attribute 10)))) | ||
| 22 | |||
| 23 | (defun jd/text-scale-decrease () | ||
| 24 | (interactive) | ||
| 25 | (let ((old-face-attribute (face-attribute 'default :height))) | ||
| 26 | (set-face-attribute 'default nil :height (- old-face-attribute 10)))) | ||
| 27 | |||
| 28 | (defhydra hydra-text-scale-global (:timeout 4) | ||
| 29 | "scale text" | ||
| 30 | ("j" jd/text-scale-increase "in") | ||
| 31 | ("k" jd/text-scale-decrease "out") | ||
| 32 | ("q" nil "finished" :exit t)) ;; TODO not working | ||
| 33 | |||
| 34 | (defhydra hydra-text-scale (:timeout 4) | ||
| 35 | "scale text" | ||
| 36 | ("j" text-scale-increase "in") | ||
| 37 | ("k" text-scale-decrease "out") | ||
| 38 | ("q" nil "finished" :exit t))) | ||
| 39 | |||
| 40 | (use-package undo-tree | ||
| 41 | :guix-package "emacs-undo-tree" | ||
| 42 | :diminish | ||
| 43 | :config | ||
| 44 | (setq undo-tree-auto-save-history nil) | ||
| 45 | (global-undo-tree-mode 1)) | ||
| 46 | |||
| 47 | (provide 'jd-keys) | ||
| 48 | |||
| 49 | ;;; jd-keys.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-misc.el b/files/.emacs.d/jd/jd-misc.el new file mode 100644 index 0000000..2b7d1bd --- /dev/null +++ b/files/.emacs.d/jd/jd-misc.el | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (defun jd/generete-qr-from-clipboard () | ||
| 7 | (interactive) | ||
| 8 | (let ((clipboard-value (x-get-clipboard)) | ||
| 9 | (clipboard-file-path "/tmp/clipboard_value.txt") | ||
| 10 | (clipboard-out-image "/tmp/qr.png")) | ||
| 11 | (with-temp-file clipboard-file-path | ||
| 12 | (insert clipboard-value)) | ||
| 13 | (shell-command (concat | ||
| 14 | "qrencode -o " | ||
| 15 | clipboard-out-image | ||
| 16 | " < " | ||
| 17 | clipboard-file-path)) | ||
| 18 | (find-file clipboard-out-image))) | ||
| 19 | |||
| 20 | (defun jd/dired-open-file-in-kill-ring () | ||
| 21 | (interactive) | ||
| 22 | (let* ((last-killed (car kill-ring)) | ||
| 23 | (exists-p (file-exists-p last-killed)) | ||
| 24 | (dir-p (file-directory-p last-killed))) | ||
| 25 | (cond | ||
| 26 | ((not exists-p) (message "File doesn't exists!")) | ||
| 27 | (dir-p (dired last-killed)) | ||
| 28 | ((not dir-p) (find-file last-killed))))) | ||
| 29 | |||
| 30 | (global-set-key (kbd "C-c O") #'jd/dired-open-file-in-kill-ring) | ||
| 31 | |||
| 32 | (provide 'jd-misc) | ||
| 33 | |||
| 34 | ;;; jd-misc.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-mu4e.el b/files/.emacs.d/jd/jd-mu4e.el new file mode 100755 index 0000000..b388201 --- /dev/null +++ b/files/.emacs.d/jd/jd-mu4e.el | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (use-package htmlize | ||
| 7 | :guix-package "emacs-htmlize") | ||
| 8 | |||
| 9 | (use-package mu4e | ||
| 10 | :guix-package ("mu" "isync") | ||
| 11 | :defer 10 | ||
| 12 | :ensure nil | ||
| 13 | :bind | ||
| 14 | ("C-c M" . mu4e) | ||
| 15 | :config | ||
| 16 | ;a (require 'org-mu4e) | ||
| 17 | |||
| 18 | (unless jd/guix-p | ||
| 19 | (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e") | ||
| 20 | (setq mu4e-mu-binary "/usr/local/bin/mu")) | ||
| 21 | |||
| 22 | (setq mu4e-update-interval (* 10 60)) | ||
| 23 | (setq mu4e-get-mail-command "mbsync -a") | ||
| 24 | (setq mu4e-maildir "~/Mail") | ||
| 25 | |||
| 26 | (setq mu4e-completing-read-function #'ivy-completing-read) | ||
| 27 | |||
| 28 | (setq mu4e-change-filenames-when-moving t) | ||
| 29 | |||
| 30 | (setq mu4e-contexts | ||
| 31 | `(,(make-mu4e-context | ||
| 32 | :name "Abaks" | ||
| 33 | :match-func (lambda (msg) (when msg | ||
| 34 | (string-prefix-p "/abaks" (mu4e-message-field msg :maildir)))) | ||
| 35 | :vars '( | ||
| 36 | (user-full-name . "Jakub Dlugosz") | ||
| 37 | (user-mail-address . "jakub@abaks.pl") | ||
| 38 | (mu4e-sent-folder . "/abaks/Sent Items") | ||
| 39 | (mu4e-trash-folder . "/abaks/Trash") | ||
| 40 | (mu4e-drafts-folder . "/abaks/Drafts") | ||
| 41 | (mu4e-refile-folder . "/abaks/Archive") | ||
| 42 | (mu4e-sent-messages-behavior . sent) | ||
| 43 | (smtpmail-local-domain . "pl") | ||
| 44 | (smtpmail-smtp-server . "smtp.abaks.pl") | ||
| 45 | (smtpmail-smtp-user . "jakub@abaks.pl"))) | ||
| 46 | ,(make-mu4e-context | ||
| 47 | :name "Gmail" | ||
| 48 | :match-func (lambda (msg) (when msg | ||
| 49 | (string-prefix-p "/gmail" (mu4e-message-field msg :maildir)))) | ||
| 50 | :vars '( | ||
| 51 | (user-full-name . "Jakub Dlugosz") | ||
| 52 | (user-mail-address . "jdlugosz963@gmail.com") | ||
| 53 | (mu4e-sent-folder . "/gmail/\[Gmail\]/Wys\&AUI-ane") | ||
| 54 | (mu4e-trash-folder . "/gmail/\[Gmail\]/Kosz") | ||
| 55 | (mu4e-drafts-folder . "/gmail/\[Gmail\]/Wersje\ robocze") | ||
| 56 | (mu4e-refile-folder . "/gmail/Archive") | ||
| 57 | (smtpmail-local-domain . "com") | ||
| 58 | (smtpmail-smtp-server . "smtp.gmail.com") | ||
| 59 | (smtpmail-smtp-user . "jdlugosz963@gmail.com") | ||
| 60 | (mu4e-sent-messages-behavior . sent))))) | ||
| 61 | |||
| 62 | (setq mail-user-agent 'mu4e-user-agent | ||
| 63 | mail-host-address nil | ||
| 64 | message-send-mail-function 'smtpmail-send-it | ||
| 65 | smtpmail-smtp-service 465 | ||
| 66 | smtpmail-stream-type 'ssl | ||
| 67 | smtpmail-servers-requiring-authorization ".*") | ||
| 68 | |||
| 69 | (setq mu4e-compose-signature (concat | ||
| 70 | "Pozdrawiam,\n" | ||
| 71 | "Jakub Długosz")) | ||
| 72 | |||
| 73 | (mu4e t) | ||
| 74 | (mu4e-modeline-mode nil)) | ||
| 75 | |||
| 76 | (use-package mu4e-alert | ||
| 77 | :guix-package "emacs-mu4e-alert" | ||
| 78 | :defer 20 | ||
| 79 | :config | ||
| 80 | (mu4e-alert-set-default-style 'libnotify) | ||
| 81 | (mu4e-alert-enable-mode-line-display) | ||
| 82 | (mu4e-alert-enable-notifications)) | ||
| 83 | |||
| 84 | (provide 'jd-mu4e) | ||
diff --git a/files/.emacs.d/jd/jd-org.el b/files/.emacs.d/jd/jd-org.el new file mode 100755 index 0000000..400d00c --- /dev/null +++ b/files/.emacs.d/jd/jd-org.el | |||
| @@ -0,0 +1,224 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (defvar jd/org-home "~/Notes") | ||
| 7 | (defvar jd/org-roam-home (concat jd/org-home "/roam")) | ||
| 8 | (defvar jd/org-sync (concat jd/org-home "/sync")) | ||
| 9 | (defvar jd/org-roam-daily-home (concat jd/org-roam-home "/daily")) | ||
| 10 | |||
| 11 | (defun jd/org-mode-init () | ||
| 12 | (org-indent-mode) | ||
| 13 | (variable-pitch-mode 1) | ||
| 14 | (visual-line-mode 1)) | ||
| 15 | |||
| 16 | (defun jd-emacs/org-insert-date (&optional date) | ||
| 17 | (org-insert-time-stamp (org-read-date nil t (or date "+0d")))) | ||
| 18 | |||
| 19 | (use-package org-pomodoro | ||
| 20 | :guix-package "emacs-org-pomodoro") | ||
| 21 | |||
| 22 | (use-package org-caldav | ||
| 23 | :guix-package "emacs-org-caldav" | ||
| 24 | :config | ||
| 25 | (setq org-caldav-url "http://caldav.jdlugosz.com/radicale/admin/" | ||
| 26 | org-caldav-files nil | ||
| 27 | org-icalendar-timezone "Europe/Warsaw") | ||
| 28 | |||
| 29 | (defun jd/caldav-calendar-sync () | ||
| 30 | (interactive) | ||
| 31 | (let ((org-caldav-calendar-id "0c54a523-c7aa-2f26-2c18-a12b69c2bc86") | ||
| 32 | (org-caldav-inbox (concat jd/org-sync | ||
| 33 | "/calendar.org"))) | ||
| 34 | (org-caldav-sync))) | ||
| 35 | |||
| 36 | (defun jd/caldav-journal-sync () | ||
| 37 | (interactive) | ||
| 38 | (let ((org-caldav-calendar-id "3cc70419-a787-5f84-28c6-96f15fc606d9") | ||
| 39 | (org-caldav-inbox (concat jd/org-sync | ||
| 40 | "/journal.org"))) | ||
| 41 | (org-caldav-sync))) | ||
| 42 | |||
| 43 | (defun jd/caldav-tasks-sync () | ||
| 44 | (interactive) | ||
| 45 | (let ((org-caldav-calendar-id "372cbbb3-14f7-fc15-9f7b-cae04114920c") | ||
| 46 | (org-caldav-inbox (concat jd/org-sync | ||
| 47 | "/tasks.org"))) | ||
| 48 | (org-caldav-sync)))) | ||
| 49 | |||
| 50 | (use-package org | ||
| 51 | :guix-package "emacs-org" | ||
| 52 | :pin org | ||
| 53 | :commands (org-capture org-agenda) | ||
| 54 | :hook (org-mode . jd/org-mode-init) | ||
| 55 | :bind | ||
| 56 | ("C-c o c" . #'org-capture) | ||
| 57 | ("C-c o p" . #'org-mobile-pull) | ||
| 58 | ("C-c o P" . #'org-mobile-push) | ||
| 59 | ("C-c o a" . #'org-agenda) | ||
| 60 | :config | ||
| 61 | (defun jd/org-mode-file (file-name) (concat org-directory "/" file-name ".org")) | ||
| 62 | (setq org-directory (file-truename "~/Notes") | ||
| 63 | org-mobile-directory (concat org-directory "/Mobile") | ||
| 64 | org-mobile-inbox-for-pull (concat org-directory "/flagged.org") ;; TODO: ?? | ||
| 65 | |||
| 66 | org-refile-targets '((org-agenda-files :maxlevel . 1)) | ||
| 67 | org-outline-path-complete-in-steps nil | ||
| 68 | org-refile-use-outline-path t | ||
| 69 | org-agenda-files '("Personal.org" "Work.org" "Inbox.org") | ||
| 70 | org-ellipsis " ▾" | ||
| 71 | org-agenda-start-with-log-mode t | ||
| 72 | org-log-done 'time | ||
| 73 | org-log-into-drawer t | ||
| 74 | org-return-follows-link t | ||
| 75 | org-latex-listings 'minted | ||
| 76 | org-latex-packages-alist '(("" "minted")) | ||
| 77 | |||
| 78 | org-agenda-custom-commands | ||
| 79 | `(("p" "Planning" | ||
| 80 | ((tags-todo "+planning" | ||
| 81 | ((org-agenda-overriding-header "Planning Tasks"))) | ||
| 82 | (tags-todo "-{.*}" | ||
| 83 | ((org-agenda-overriding-header "Untagged Tasks"))) | ||
| 84 | (todo "*" ((org-agenda-files '(,(jd/org-mode-file "Inbox"))) | ||
| 85 | (org-agenda-overriding-header "Unprocessed Inbox Items"))))) | ||
| 86 | |||
| 87 | ("d" "Daily Agenda" | ||
| 88 | ((agenda "" ((org-agenda-span 'day) | ||
| 89 | (org-deadline-warning-days 7))) | ||
| 90 | (tags-todo "+PRIORITY=\"A\"" | ||
| 91 | ((org-agenda-overriding-header "High Priority Tasks"))))) | ||
| 92 | |||
| 93 | ("w" "Weekly Review" | ||
| 94 | ((agenda "" | ||
| 95 | ((org-agenda-overriding-header "Completed Tasks") | ||
| 96 | (org-agenda-skip-function '(org-agenda-skip-entry-if 'nottodo 'done)) | ||
| 97 | (org-agenda-span 'week))) | ||
| 98 | |||
| 99 | (agenda "" | ||
| 100 | ((org-agenda-overriding-header "Unfinished Scheduled Tasks") | ||
| 101 | (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) | ||
| 102 | (org-agenda-span 'week)))))) | ||
| 103 | |||
| 104 | org-capture-templates | ||
| 105 | `(("i" "Capture to Inbox" entry (file+olp ,(jd/org-mode-file "Inbox") "Inbox") | ||
| 106 | "* TODO %?\n %t\n" :empty-lines 1)) | ||
| 107 | |||
| 108 | org-latex-pdf-process | ||
| 109 | '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f" | ||
| 110 | "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")) | ||
| 111 | |||
| 112 | (require 'org-tempo) | ||
| 113 | |||
| 114 | (defun jd/org-font-setup () | ||
| 115 | ;; Replace list hyphen with dot | ||
| 116 | ;; (font-lock-add-keywords 'org-mode | ||
| 117 | ;; '(("^ *\\([.]\\) " | ||
| 118 | ;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•-")))))) | ||
| 119 | |||
| 120 | ;; Set faces for heading levels | ||
| 121 | (dolist (face '((org-level-1 . 1.3) | ||
| 122 | (org-level-2 . 1.2) | ||
| 123 | (org-level-3 . 1.1) | ||
| 124 | (org-level-4 . 1.0) | ||
| 125 | (org-level-5 . 1.0) | ||
| 126 | (org-level-6 . 1.0) | ||
| 127 | (org-level-7 . 1.0) | ||
| 128 | (org-level-8 . 1.0))) | ||
| 129 | (set-face-attribute (car face) nil :font "Terminus" :weight 'Bold :height (cdr face))) | ||
| 130 | |||
| 131 | ;; Ensure that anything that should be fixed-pitch in Org files appears that way | ||
| 132 | (set-face-attribute 'org-block nil :font "Terminus" :inherit 'fixed-pitch :height 100) | ||
| 133 | (set-face-attribute 'org-table nil :inherit 'fixed-pitch) | ||
| 134 | (set-face-attribute 'org-formula nil :inherit 'fixed-pitch) | ||
| 135 | (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch)) | ||
| 136 | (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) | ||
| 137 | (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) | ||
| 138 | (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) | ||
| 139 | (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch) | ||
| 140 | (set-face-attribute 'line-number nil :inherit 'fixed-pitch) | ||
| 141 | (set-face-attribute 'line-number-current-line nil :inherit 'fixed-pitch)) | ||
| 142 | |||
| 143 | (with-eval-after-load 'org (jd/org-font-setup)) | ||
| 144 | |||
| 145 | (defun jd-emacs/org-timer-stop () | ||
| 146 | (start-process-shell-command "notify-send" nil "notify-send Zakonczono odliczanie")) | ||
| 147 | |||
| 148 | (add-hook 'org-timer-stop-hook #'jd-emacs/org-timer-stop) | ||
| 149 | |||
| 150 | (defun jd/org-tempo-setup () | ||
| 151 | (dolist (template '(("s" . "src") | ||
| 152 | ("sql" . "src sql") | ||
| 153 | ("sh" . "src sh") | ||
| 154 | ("el" . "src emacs-lisp") | ||
| 155 | ("li" . "src lisp") | ||
| 156 | ("sc" . "src scheme") | ||
| 157 | ("ts" . "src typescript") | ||
| 158 | ("py" . "src python") | ||
| 159 | ("go" . "src go") | ||
| 160 | ("yaml" . "src yaml"))) | ||
| 161 | (add-to-list 'org-structure-template-alist template))) | ||
| 162 | |||
| 163 | (with-eval-after-load 'org-tempo (jd/org-tempo-setup)) | ||
| 164 | |||
| 165 | (org-babel-do-load-languages | ||
| 166 | 'org-babel-load-languages | ||
| 167 | '((emacs-lisp . t) | ||
| 168 | (python . t) | ||
| 169 | (shell . t)))) | ||
| 170 | |||
| 171 | (use-package org-superstar | ||
| 172 | :guix-package "emacs-org-superstar" | ||
| 173 | :hook (org-mode . org-superstar-mode) | ||
| 174 | :init | ||
| 175 | (setq org-superstar-special-todo-items t) | ||
| 176 | (setq org-superstar-remove-leading-stars t) | ||
| 177 | (setq org-superstar-headline-bullets-list '("◉" "○" "●" "○" "●" "○" "●"))) | ||
| 178 | |||
| 179 | (use-package org-roam | ||
| 180 | :guix-package "emacs-org-roam" | ||
| 181 | :custom | ||
| 182 | (org-roam-directory (file-truename jd/org-roam-home)) | ||
| 183 | :bind (("C-c n l" . org-roam-buffer-toggle) | ||
| 184 | ("C-c n f" . org-roam-node-find) | ||
| 185 | ("C-c n g" . org-roam-graph) | ||
| 186 | ("C-c n i" . org-roam-node-insert) | ||
| 187 | ("C-c n c" . org-roam-capture) | ||
| 188 | ;; Dailies | ||
| 189 | ("C-c n j" . org-roam-dailies-capture-today)) | ||
| 190 | :bind-keymap | ||
| 191 | ("C-c n d" . org-roam-dailies-map) | ||
| 192 | :config | ||
| 193 | (require 'org-roam-dailies) | ||
| 194 | |||
| 195 | (defun jd/org-roam-filter-by-tag (tag-name) | ||
| 196 | (lambda (node) | ||
| 197 | (member tag-name (org-roam-node-tags node)))) | ||
| 198 | |||
| 199 | (defun jd/org-roam-list-notes-by-tag (tag-name) | ||
| 200 | (mapcar #'org-roam-node-file | ||
| 201 | (seq-filter | ||
| 202 | (jd/org-roam-filter-by-tag tag-name) | ||
| 203 | (org-roam-node-list)))) | ||
| 204 | |||
| 205 | (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag))) | ||
| 206 | (setq org-roam-capture-templates | ||
| 207 | '(("d" "default" plain "%?" | ||
| 208 | :target (file+head | ||
| 209 | "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n\n* ${title}\n %?") ;; TODO: point cursor to the end of the file, it should be: `%?` | ||
| 210 | :unnarrowed t) | ||
| 211 | ;; ("n" "insert node" plain (file "~/Documents/roam/study/templates/research.org") | ||
| 212 | ;; :target (file+head "study/%<%Y%m%d%H%M%S>-${slug}.org" | ||
| 213 | ;; "#+title: ${title}\n") | ||
| 214 | ;; :unnarrowed t) | ||
| 215 | )) | ||
| 216 | |||
| 217 | (org-roam-db-autosync-mode)) | ||
| 218 | |||
| 219 | (use-package ox-pandoc | ||
| 220 | :guix-package "emacs-ox-pandoc") | ||
| 221 | |||
| 222 | (provide 'jd-org) | ||
| 223 | |||
| 224 | ;;; jd-org.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-sway.el b/files/.emacs.d/jd/jd-sway.el new file mode 100644 index 0000000..cdfb667 --- /dev/null +++ b/files/.emacs.d/jd/jd-sway.el | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | ;;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (defun use-package-normalize/:diminish (name keyword args) | ||
| 7 | (use-package-as-one (symbol-name keyword) args | ||
| 8 | (apply-partially #'use-package-normalize-diminish name) t)) | ||
| 9 | |||
| 10 | (use-package shackle | ||
| 11 | :guix-package "emacs-shackle") | ||
| 12 | |||
| 13 | (use-package sway | ||
| 14 | :guix-package "emacs-sway") | ||
| 15 | |||
| 16 | (provide 'jd-sway) | ||
| 17 | |||
| 18 | ;;; jd-sway.el ends here | ||
diff --git a/files/.emacs.d/jd/jd-ui.el b/files/.emacs.d/jd/jd-ui.el new file mode 100755 index 0000000..4e388c9 --- /dev/null +++ b/files/.emacs.d/jd/jd-ui.el | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | ;; Dotfiles --- Jakub Dlugosz emacs config | ||
| 2 | ;;; Commentary: | ||
| 3 | |||
| 4 | ;;; Code: | ||
| 5 | |||
| 6 | (setq inhibit-startup-message t) | ||
| 7 | (setq visible-bell t) | ||
| 8 | (scroll-bar-mode -1) | ||
| 9 | (tool-bar-mode -1) | ||
| 10 | (tooltip-mode -1) | ||
| 11 | (menu-bar-mode -1) | ||
| 12 | (set-fringe-mode 10) | ||
| 13 | |||
| 14 | ;; (set-frame-parameter (selected-frame) 'alpha '(92 . 92)) | ||
| 15 | ;; (add-to-list 'default-frame-alist '(alpha . (92 . 92))) | ||
| 16 | |||
| 17 | (let ((height (if (string-equal (system-name) | ||
| 18 | "berserker") | ||
| 19 | 175 | ||
| 20 | 125))) | ||
| 21 | (custom-set-faces | ||
| 22 | `(default ((t (:inherit nil :height ,height :family "Terminus")))) | ||
| 23 | `(line-number ((t (:inherit nil :height ,height :family "Terminus")))) | ||
| 24 | `(line-number-current-line ((t (:inherit nil :height ,height :family "Terminus")))))) | ||
| 25 | |||
| 26 | (add-hook 'prog-mode-hook 'menu-bar--display-line-numbers-mode-relative) | ||
| 27 | |||
| 28 | (global-set-key (kbd "<escape>") 'keyboard-escape-quit) | ||
| 29 | |||
| 30 | (global-prettify-symbols-mode 1) | ||
| 31 | |||
| 32 | (defalias 'yes-or-no-p 'y-or-n-p) | ||
| 33 | |||
| 34 | (require 'diminish) | ||
| 35 | |||
| 36 | (use-package doom-modeline | ||
| 37 | :guix-package "emacs-doom-modeline" | ||
| 38 | :config | ||
| 39 | (doom-modeline-mode)) | ||
| 40 | |||
| 41 | (use-package solarized-theme | ||
| 42 | :guix-package "emacs-solarized-theme" | ||
| 43 | :config | ||
| 44 | (load-theme 'solarized-dark-high-contrast t)) | ||
| 45 | |||
| 46 | |||
| 47 | (use-package diminish | ||
| 48 | :guix-package "emacs-diminish") | ||
| 49 | |||
| 50 | (use-package hl-todo | ||
| 51 | :guix-package "emacs-hl-todo" | ||
| 52 | :init | ||
| 53 | (setq hl-todo-keyword-faces | ||
| 54 | '(("TODO" . "#FF0000") | ||
| 55 | ("FIXME" . "#FF0000") | ||
| 56 | ("DEBUG" . "#A020F0"))) | ||
| 57 | :config | ||
| 58 | (global-hl-todo-mode 1)) | ||
| 59 | |||
| 60 | (defvar jd/load-theme-hook nil) | ||
| 61 | (defun jd/load-theme () | ||
| 62 | (interactive) | ||
| 63 | (counsel-load-theme) | ||
| 64 | (run-hooks 'jd/load-theme-hook)) | ||
| 65 | |||
| 66 | (use-package ivy | ||
| 67 | :guix-package "emacs-ivy" | ||
| 68 | :diminish | ||
| 69 | :bind | ||
| 70 | (("C-s" . swiper)) | ||
| 71 | :config | ||
| 72 | (ivy-mode 1)) | ||
| 73 | |||
| 74 | (use-package counsel | ||
| 75 | :guix-package "emacs-counsel" | ||
| 76 | :diminish t | ||
| 77 | :config | ||
| 78 | (counsel-mode 1)) | ||
| 79 | |||
| 80 | (use-package which-key | ||
| 81 | :guix-package "emacs-which-key" | ||
| 82 | :diminish | ||
| 83 | :config | ||
| 84 | (which-key-mode) | ||
| 85 | (setq which-key-idle-delay 0.3)) | ||
| 86 | |||
| 87 | (use-package all-the-icons | ||
| 88 | :guix-package "emacs-all-the-icons") | ||
| 89 | |||
| 90 | (use-package beacon | ||
| 91 | :guix-package "emacs-beacon" | ||
| 92 | :config | ||
| 93 | (beacon-mode 1)) | ||
| 94 | |||
| 95 | (setq display-time-string-forms | ||
| 96 | '(" " 24-hours ":" minutes " ")) | ||
| 97 | |||
| 98 | (when jd/exwm-p | ||
| 99 | (display-battery-mode) | ||
| 100 | (display-time-mode)) | ||
| 101 | |||
| 102 | (provide 'jd-ui) | ||
| 103 | |||
| 104 | ;;; jd-ui.el ends here | ||
diff --git a/files/.gitignore b/files/.gitignore new file mode 100644 index 0000000..f3fe7e5 --- /dev/null +++ b/files/.gitignore | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | __pycache__/ | ||
| 2 | elpa/ | ||
| 3 | auto-save-list/ | ||
| 4 | eln-cache/ | ||
| 5 | url/ | ||
| 6 | **/#* | ||
| 7 | **/*~ | ||
diff --git a/files/.guile b/files/.guile new file mode 100644 index 0000000..2076bd2 --- /dev/null +++ b/files/.guile | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | (use-modules (ice-9 readline)) | ||
| 2 | (activate-readline) \ No newline at end of file | ||
diff --git a/files/.mbsyncrc b/files/.mbsyncrc new file mode 100644 index 0000000..20a8692 --- /dev/null +++ b/files/.mbsyncrc | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | IMAPStore abaks-remote | ||
| 2 | Host imap.abaks.pl | ||
| 3 | Port 143 | ||
| 4 | SSLType None | ||
| 5 | AuthMechs LOGIN | ||
| 6 | User jakub@abaks.pl | ||
| 7 | PassCmd "pass email/jakub@abaks.pl" | ||
| 8 | CertificateFile /etc/ssl/certs/ca-certificates.crt | ||
| 9 | |||
| 10 | MaildirStore abaks-local | ||
| 11 | Path ~/Mail/abaks/ | ||
| 12 | Inbox ~/Mail/abaks/INBOX | ||
| 13 | Subfolders Verbatim | ||
| 14 | |||
| 15 | Channel abaks | ||
| 16 | Far :abaks-remote: | ||
| 17 | Near :abaks-local: | ||
| 18 | Patterns INBOX * !Sync* | ||
| 19 | Expunge None | ||
| 20 | CopyArrivalDate yes | ||
| 21 | Sync All | ||
| 22 | Create Near | ||
| 23 | SyncState * | ||
| 24 | |||
| 25 | IMAPStore gmail-remote | ||
| 26 | Host imap.gmail.com | ||
| 27 | Port 993 | ||
| 28 | SSLType IMAPS | ||
| 29 | AuthMechs LOGIN | ||
| 30 | User jdlugosz963@gmail.com | ||
| 31 | PassCmd "pass email/jdlugosz963@gmail.com" | ||
| 32 | CertificateFile /etc/ssl/certs/ca-certificates.crt | ||
| 33 | |||
| 34 | MaildirStore gmail-local | ||
| 35 | Path ~/Mail/gmail/ | ||
| 36 | Inbox ~/Mail/gmail/INBOX | ||
| 37 | Subfolders Verbatim | ||
| 38 | |||
| 39 | Channel gmail | ||
| 40 | Far :gmail-remote: | ||
| 41 | Near :gmail-local: | ||
| 42 | Patterns INBOX * !Sync* | ||
| 43 | Expunge None | ||
| 44 | CopyArrivalDate yes | ||
| 45 | Sync All | ||
| 46 | Create Near | ||
| 47 | SyncState * | ||
diff --git a/files/.nix-channels b/files/.nix-channels new file mode 100644 index 0000000..46c3d72 --- /dev/null +++ b/files/.nix-channels | |||
| @@ -0,0 +1 @@ | |||
| https://nixos.org/channels/nixos-23.11 nixos | |||
diff --git a/files/.stumpwm.d/.gitignore b/files/.stumpwm.d/.gitignore new file mode 100644 index 0000000..4c478cf --- /dev/null +++ b/files/.stumpwm.d/.gitignore | |||
| @@ -0,0 +1 @@ | |||
| stumpwm.log* \ No newline at end of file | |||
diff --git a/files/.stumpwm.d/init.lisp b/files/.stumpwm.d/init.lisp new file mode 100755 index 0000000..0970718 --- /dev/null +++ b/files/.stumpwm.d/init.lisp | |||
| @@ -0,0 +1,360 @@ | |||
| 1 | (in-package :stumpwm) | ||
| 2 | |||
| 3 | |||
| 4 | (setq *message-window-gravity* :center) | ||
| 5 | (setq *message-window-input-gravity* :center) | ||
| 6 | (setq *input-window-gravity* :center) | ||
| 7 | (setq *window-border-style* :none) | ||
| 8 | |||
| 9 | (set-bg-color :gray10) | ||
| 10 | (setq *mode-line-background-color* "Gray10") | ||
| 11 | |||
| 12 | (set-prefix-key (kbd "C-z")) | ||
| 13 | (setq *float-window-modifier* :super) | ||
| 14 | |||
| 15 | (define-key *top-map* (kbd "s-w") "gselect") | ||
| 16 | |||
| 17 | (defcommand lock () () | ||
| 18 | (run-shell-command "slock")) | ||
| 19 | |||
| 20 | (define-key *top-map* (kbd "s-l") "lock") | ||
| 21 | |||
| 22 | (defcommand server-start () () | ||
| 23 | (slynk:create-server :port 4005) | ||
| 24 | (message "server started at port: \"4005\"!")) | ||
| 25 | |||
| 26 | |||
| 27 | (define-key *root-map* (kbd "C-q") "send-raw-key") | ||
| 28 | |||
| 29 | (define-key *root-map* (kbd "M") "mode-line") | ||
| 30 | (define-key *root-map* (kbd "C-n") "fnext") | ||
| 31 | (define-key *root-map* (kbd "C-p") "fprev") | ||
| 32 | (define-key *root-map* (kbd "b") "windowlist") | ||
| 33 | |||
| 34 | |||
| 35 | |||
| 36 | ;; (run-commands "gnew Code" | ||
| 37 | ;; "gnew Web" | ||
| 38 | ;; "gnew Music" | ||
| 39 | ;; "gnew Game" | ||
| 40 | ;; "gnew School") | ||
| 41 | |||
| 42 | (define-remapped-keys | ||
| 43 | '(("(Firefox|Chrome|qutebrowser)" | ||
| 44 | ("C-n" . "Down") | ||
| 45 | ("C-p" . "Up") | ||
| 46 | ("C-f" . "Right") | ||
| 47 | ("C-b" . "Left") | ||
| 48 | ("C-v" . "Next") | ||
| 49 | ("M-v" . "Prior") | ||
| 50 | ("M-w" . "C-c") | ||
| 51 | ("C-w" . "C-x") | ||
| 52 | ("C-y" . "C-v") | ||
| 53 | ("M-<" . "Home") | ||
| 54 | ("M->" . "End") | ||
| 55 | ("C-a" . "Home") | ||
| 56 | ("C-e" . "End") | ||
| 57 | ("C-M-b" . "M-Left") | ||
| 58 | ("C-M-f" . "M-Right") | ||
| 59 | ("C-g" . "ESC") | ||
| 60 | ("C-k" . ("C-S-End" "C-x"))))) | ||
| 61 | |||
| 62 | (define-frame-preference "chat" | ||
| 63 | (0 NIL T :create T :class "quassel") | ||
| 64 | (1 NIL T :create T :class "discord") | ||
| 65 | (2 NIL T :create T :class "nheko")) | ||
| 66 | |||
| 67 | (define-frame-preference "vm" | ||
| 68 | (0 NIL T :create T :class ".virt-manager-real")) | ||
| 69 | |||
| 70 | (run-shell-command "~/.fehbg") | ||
| 71 | |||
| 72 | (require :pamixer) | ||
| 73 | (require :pass) | ||
| 74 | |||
| 75 | (require :screenshot) | ||
| 76 | (pamixer:volume-down 10) | ||
| 77 | |||
| 78 | (defun get-brightness () | ||
| 79 | (let ((c (parse-integer (string-trim | ||
| 80 | (string #\newline) | ||
| 81 | (run-shell-command "brightnessctl g" t)))) | ||
| 82 | (m (parse-integer (string-trim | ||
| 83 | (string #\newline) | ||
| 84 | (run-shell-command "brightnessctl m" t))))) | ||
| 85 | (format nil "~3,1f%" (* (/ c m) 100)))) | ||
| 86 | |||
| 87 | (defun set-brightness (x) | ||
| 88 | (run-shell-command (concat "brightnessctl s " x)) | ||
| 89 | (message (concat "Brightness: " (get-brightness)))) | ||
| 90 | |||
| 91 | (defcommand my-volume-down () () | ||
| 92 | (pamixer:volume-down 5) | ||
| 93 | (message (format nil "Volume: ~s%" (pamixer:get-volume)))) | ||
| 94 | |||
| 95 | (defcommand my-volume-up () () | ||
| 96 | (pamixer:volume-up 5) | ||
| 97 | (message (format nil "Volume: ~s%" (pamixer:get-volume)))) | ||
| 98 | |||
| 99 | (defcommand my-toggle-mute () () | ||
| 100 | (pamixer:toggle-mute) | ||
| 101 | (if (pamixer:get-mute) | ||
| 102 | (message "Mute: ^2ON") | ||
| 103 | (message "Mute: ^1OFF"))) | ||
| 104 | |||
| 105 | (defcommand my-brightness-up () () | ||
| 106 | (set-brightness "+5%")) | ||
| 107 | |||
| 108 | (defcommand my-brightness-down () () | ||
| 109 | (set-brightness "5%-")) | ||
| 110 | |||
| 111 | (defcommand my-brightness-one () () | ||
| 112 | (set-brightness "1")) | ||
| 113 | |||
| 114 | |||
| 115 | (define-key *top-map* (kbd "XF86AudioMute") "my-toggle-mute") | ||
| 116 | (define-key *top-map* (kbd "XF86AudioRaiseVolume") "my-volume-up") | ||
| 117 | (define-key *top-map* (kbd "XF86AudioLowerVolume") "my-volume-down") | ||
| 118 | |||
| 119 | (define-key *top-map* (kbd "XF86MonBrightnessUp") "my-brightness-up") | ||
| 120 | (define-key *top-map* (kbd "XF86MonBrightnessDown") "my-brightness-down") | ||
| 121 | |||
| 122 | (defun my-screenshoot-command-wrapper (screenshot-command ss-name) | ||
| 123 | (apply screenshot-command (list (concat | ||
| 124 | "~/Pictures/Screenshots/" | ||
| 125 | (string-trim | ||
| 126 | (string #\newline) | ||
| 127 | (run-shell-command "date +%Y-%M-%d-%T" t)) | ||
| 128 | "-" (or ss-name "untitled") | ||
| 129 | ".png")))) | ||
| 130 | |||
| 131 | |||
| 132 | (defcommand my-screenshot-area (ss-name) | ||
| 133 | ((:string "Screenshot name: ")) | ||
| 134 | (my-screenshoot-command-wrapper #'screenshot:screenshot-area ss-name)) | ||
| 135 | |||
| 136 | (defcommand my-screenshot-window (ss-name) | ||
| 137 | ((:string "Screenshot name: ")) | ||
| 138 | (my-screenshoot-command-wrapper #'screenshot:screenshot-window ss-name)) | ||
| 139 | |||
| 140 | (defcommand my-screenshot (ss-name) | ||
| 141 | ((:string "Screenshot name: ")) | ||
| 142 | (my-screenshoot-command-wrapper #'screenshot:screenshot ss-name)) | ||
| 143 | |||
| 144 | (defvar *misc-keymap* | ||
| 145 | (let ((m (make-sparse-keymap))) | ||
| 146 | (define-key m (kbd "0") "my-toggle-mute") | ||
| 147 | (define-key m (kbd "+") "my-volume-up") | ||
| 148 | (define-key m (kbd "=") "my-volume-up") | ||
| 149 | (define-key m (kbd "-") "my-volume-down") | ||
| 150 | |||
| 151 | (define-key m (kbd "p") "pass-copy-menu") | ||
| 152 | (define-key m (kbd "C-p") "pass-copy-menu") | ||
| 153 | (define-key m (kbd "g") "pass-generate") | ||
| 154 | (define-key m (kbd "C-g") "pass-generate") | ||
| 155 | |||
| 156 | (define-key m (kbd "C-a") "my-screenshot-area") | ||
| 157 | (define-key m (kbd "a") "my-screenshot-area") | ||
| 158 | (define-key m (kbd "C-w") "my-screenshot-window") | ||
| 159 | (define-key m (kbd "w") "my-screenshot-window") | ||
| 160 | (define-key m (kbd "C-s") "my-screenshot") | ||
| 161 | (define-key m (kbd "s") "my-screenshot") | ||
| 162 | |||
| 163 | m)) | ||
| 164 | |||
| 165 | |||
| 166 | |||
| 167 | |||
| 168 | (define-key *root-map* (kbd "C-m") '*misc-keymap*) | ||
| 169 | |||
| 170 | ;; | ||
| 171 | ;; ;;; MODE-LINE | ||
| 172 | (require :cpu) | ||
| 173 | (require :mem) | ||
| 174 | (require :net) | ||
| 175 | |||
| 176 | (require :stumptray) | ||
| 177 | (stumptray:add-mode-line-hooks) | ||
| 178 | |||
| 179 | (defun update-stumptray-position (&rest args) | ||
| 180 | (setf (symbol-value (find-symbol "*TRAY-HEAD-SELECTION-FN*" :stumptray)) | ||
| 181 | (if (>= (list-length (stumpwm:screen-heads (stumpwm:current-screen))) 2) | ||
| 182 | #'second | ||
| 183 | #'first))) | ||
| 184 | |||
| 185 | (stumpwm:add-hook stumpwm:*new-head-hook* 'update-stumptray-position) | ||
| 186 | (update-stumptray-position) | ||
| 187 | |||
| 188 | (defun get-battery-status () | ||
| 189 | (let* ((state (string-trim | ||
| 190 | (string #\newline) | ||
| 191 | (run-shell-command | ||
| 192 | (concat "upower -i /org/freedesktop/UPower/devices/battery_BAT0 " | ||
| 193 | "| grep state: " | ||
| 194 | "| awk '{print $2}'") | ||
| 195 | t))) | ||
| 196 | (perc (string-trim | ||
| 197 | (string #\newline) | ||
| 198 | (run-shell-command (concat | ||
| 199 | "upower -i /org/freedesktop/UPower/devices/battery_BAT0 " | ||
| 200 | "| grep perc " | ||
| 201 | "| awk '{print $2}'") | ||
| 202 | t))) | ||
| 203 | (perc-num (parse-integer (aref (nth-value 1 (cl-ppcre:scan-to-strings "^(.*)\%$" perc)) 0)))) | ||
| 204 | (format | ||
| 205 | nil | ||
| 206 | (concat | ||
| 207 | "BAT: " | ||
| 208 | (cond | ||
| 209 | ((and (equal state "discharging") | ||
| 210 | (<= perc-num 20)) | ||
| 211 | "^1[-~a]^]") | ||
| 212 | ((equal state "discharging") "[-~a]") | ||
| 213 | ((equal state "charging") "[+~a]") | ||
| 214 | ((equal state "fully-charged") "[~a]") | ||
| 215 | (t (concat state " [~a]")))) | ||
| 216 | perc))) | ||
| 217 | |||
| 218 | |||
| 219 | |||
| 220 | (setq *screen-mode-line-format* (list "[^B%n^b] %W ^> %C | %M | %l | " | ||
| 221 | '(:eval (get-battery-status)) | ||
| 222 | " " ;; empty space for stumptray icons | ||
| 223 | )) | ||
| 224 | |||
| 225 | (require :yason) ;; json parser | ||
| 226 | (require :drakma) ;; http client | ||
| 227 | |||
| 228 | |||
| 229 | (defcommand kto-hakuje-p () () | ||
| 230 | (let* ((response (yason:parse | ||
| 231 | (flexi-streams:octets-to-string | ||
| 232 | (drakma:http-request "https://whois.at.hsp.sh/api/now")))) | ||
| 233 | (users (gethash "users" response)) | ||
| 234 | (unknown-devices (gethash "unknown_devices" response))) | ||
| 235 | (message (cond | ||
| 236 | ((and (= (list-length users) 0) | ||
| 237 | (= unknown-devices 0)) | ||
| 238 | "Spejs jest pusty!") | ||
| 239 | ((and (= (list-length users) 0) | ||
| 240 | (> unknown-devices 0)) | ||
| 241 | (format nil "W spejsie jest nieznanych ~a urzadzen." unknown-devices)) | ||
| 242 | ((and (> (list-length users) 0) | ||
| 243 | (= unknown-devices 0)) | ||
| 244 | (format nil "W spejsie jest ~a." users)) | ||
| 245 | ((and (> (list-length users) 0) | ||
| 246 | (> unknown-devices 0)) | ||
| 247 | (format nil "W spejsie jest ~a oraz ~a nieznane urzadzenia." users unknown-devices)))))) | ||
| 248 | |||
| 249 | |||
| 250 | (define-key *misc-keymap* (kbd "h") "kto-hakuje-p") | ||
| 251 | (define-key *misc-keymap* (kbd "C-h") "kto-hakuje-p") | ||
| 252 | |||
| 253 | |||
| 254 | (defun emacs-server-p () | ||
| 255 | (let ((status-code (caddr | ||
| 256 | (multiple-value-list | ||
| 257 | (uiop:run-program "ls /run/user/$(id -u)/emacs/server" | ||
| 258 | :ignore-error-status T))))) | ||
| 259 | (= status-code 0))) | ||
| 260 | |||
| 261 | (stumpwm:defcommand emacs-start-server (&optional (show-message T) (wait-for-start NIL)) () | ||
| 262 | (let ((mess (if (not (emacs-server-p)) | ||
| 263 | (progn (stumpwm:run-shell-command "emacs --daemon" wait-for-start) | ||
| 264 | "Emacs server is starting....") | ||
| 265 | "Emacs server is running already!"))) | ||
| 266 | (when show-message (message mess)))) | ||
| 267 | |||
| 268 | (stumpwm:defcommand emacs-stop-server (&optional (show-message T)) () | ||
| 269 | (let ((mess (if (emacs-server-p) | ||
| 270 | (progn (stumpwm:run-shell-command "emacsclient -e \"(server-force-delete)\"") | ||
| 271 | "Emacs server gone away :(....") | ||
| 272 | "Emacs server wasn't alive!"))) | ||
| 273 | (when show-message (message mess)))) | ||
| 274 | |||
| 275 | |||
| 276 | (stumpwm:defcommand emacs-restart-server (&optional (show-message T)) () | ||
| 277 | (emacs-stop-server NIL) | ||
| 278 | (emacs-start-server show-message)) | ||
| 279 | |||
| 280 | (defun postwalk (fun tree) | ||
| 281 | (if (consp tree) | ||
| 282 | (loop :for a :in tree | ||
| 283 | :if (consp a) | ||
| 284 | :collect (postwalk fun a) | ||
| 285 | :else | ||
| 286 | :collect (funcall fun a)) | ||
| 287 | (funcall fun tree))) | ||
| 288 | |||
| 289 | (defmacro eval-emacs-sexp (sexp | ||
| 290 | &key (create-new-frame NIL)) | ||
| 291 | `(stumpwm:run-shell-command | ||
| 292 | (format nil "emacsclient~{ ~A~} '~A'" | ||
| 293 | (list ,(if create-new-frame "-c" "") | ||
| 294 | "-e") | ||
| 295 | (postwalk (lambda (x) | ||
| 296 | (cond | ||
| 297 | ((stringp x) (concat "\"" x "\"")) | ||
| 298 | ((symbolp x) (string-downcase (string x))) | ||
| 299 | (T x))) | ||
| 300 | ,sexp)) | ||
| 301 | ,(not create-new-frame))) | ||
| 302 | |||
| 303 | |||
| 304 | (defmacro defcommand-from-emacs (name | ||
| 305 | (&rest args) | ||
| 306 | (&rest interactive-args) | ||
| 307 | (&key (create-new-frame T) (output-wrapper NIL)) | ||
| 308 | &body body) | ||
| 309 | `(stumpwm:defcommand ,name ,args ,interactive-args | ||
| 310 | (when (not (emacs-server-p)) | ||
| 311 | (emacs-start-server NIL T)) | ||
| 312 | |||
| 313 | ,(let ((x `(eval-emacs-sexp (progn ,@body) | ||
| 314 | :create-new-frame ,create-new-frame))) | ||
| 315 | (cond | ||
| 316 | ((and create-new-frame output-wrapper) | ||
| 317 | (error "Cannot wrap the output, becaouse create-new-frame is T.")) | ||
| 318 | (output-wrapper `(funcall ,output-wrapper ,x)) | ||
| 319 | (T `(funcall (lambda (x) (progn x nil)) ,x)))))) | ||
| 320 | |||
| 321 | |||
| 322 | (defcommand-from-emacs emacs-client () () () | ||
| 323 | nil) | ||
| 324 | |||
| 325 | (defcommand-from-emacs emacs-calc () () () | ||
| 326 | '(full-calc)) | ||
| 327 | |||
| 328 | (defcommand-from-emacs emacs-org-agenda () () () | ||
| 329 | '(org-agenda-list)) | ||
| 330 | |||
| 331 | (defcommand-from-emacs emacs-mu4e () () () | ||
| 332 | '(mu4e)) | ||
| 333 | |||
| 334 | (defcommand-from-emacs emacs-shell () () () | ||
| 335 | '(shell)) | ||
| 336 | |||
| 337 | (defcommand-from-emacs emacs-eshell () () () | ||
| 338 | '(eshell)) | ||
| 339 | |||
| 340 | (defvar *emacs-keymap* | ||
| 341 | (let ((e (make-sparse-keymap))) | ||
| 342 | (define-key e (kbd "a") "emacs-org-agenda") | ||
| 343 | (define-key e (kbd "C-a") "emacs-org-agenda") | ||
| 344 | (define-key e (kbd "c") "emacs-calc") | ||
| 345 | (define-key e (kbd "C-c") "emacs-calc") | ||
| 346 | (define-key e (kbd "m") "emacs-mu4e") | ||
| 347 | (define-key e (kbd "C-m") "emacs-mu4e") | ||
| 348 | |||
| 349 | e)) | ||
| 350 | |||
| 351 | |||
| 352 | |||
| 353 | |||
| 354 | (define-key *root-map* (kbd "C-e") '*emacs-keymap*) | ||
| 355 | (define-key *root-map* (kbd "e") "emacs-client") | ||
| 356 | (define-key *root-map* (kbd "c") "emacs-shell") | ||
| 357 | (define-key *root-map* (kbd "C") "emacs-eshell") | ||
| 358 | |||
| 359 | |||
| 360 | (emacs-start-server nil) | ||
