Merge branch '67-switch-organization-to-gnu-stow' into 'master'

Resolve "Switch organization to GNU stow"

Closes #67

See merge request marty-oehme/dotfiles!26
This commit is contained in:
Marty Oehme 2019-12-30 10:18:57 +00:00
commit dee7f9096b
139 changed files with 39427 additions and 185 deletions

View file

@ -1,111 +0,0 @@
###############################################################################
# ceerious i3 status config
# see "man i3status" for documentation.
#
# It is important that this file is edited as UTF-8.
# The following line should contain a sharp s:
# ß
# If the above line is not correctly displayed, fix your editor first!
###############################################################################
general {
interval = 1
colors = true
color_good = '#88b090'
color_degraded = '#ccdc90'
color_bad = '#e89393'
}
order += "volume master"
order += "disk /"
#order += "disk /data"
#order += "disk /home"
#order += "run_watch DHCP"
#order += "ipv6"
#order += "run_watch VPN"
order += "wireless wlp4s0"
#order += "ethernet enp5s0"
order += "battery 0"
order += "cpu_temperature 0"
order += "cpu_usage 0"
order += "load"
order += "tztime local"
#wireless wlp4s0 {
# format_up = "%quality  %essid %ip"
# format_down = ""
#}
#ethernet enp5s0 {
# # if you use %speed, i3status requires root privileges
# format_up = "%ip (%speed)"
# format_down = ""
#}
battery 0 {
format = "%status %percentage %remaining"
format_down = ""
last_full_capacity = true
integer_battery_capacity = true
low_threshold = 11
threshold_type = percentage
hide_seconds = true
status_chr = " "
status_bat = " "
status_unk = " "
status_full = " "
}
run_watch DHCP {
pidfile = "/var/run/dhclient*.pid"
}
run_watch VPN {
pidfile = "/var/run/vpnc/pid"
}
#%Y-%m-%d %H:%M:%S'
tztime local {
format = " %d/%m/%Y  %H:%M"
}
load {
format = " %1min"
}
cpu_usage {
format = " %usage"
}
cpu_temperature 0 {
format = " %degrees°C"
}
disk "/" {
format = " %avail"
prefix_type = custom
low_threshold = 20
threshold_type = percentage_avail
}
#disk "/data" {
# format = " %avail"
# prefix_type = custom
# low_threshold = 20
# threshold_type = percentage_avail
#}
#disk "/data" {
# format = " %avail"
# prefix_type = custom
# low_threshold = 20
# threshold_type = percentage_avail
#}
volume master {
format = "%volume  "
format_muted = " "
device = "default"
mixer = "Master"
mixer_idx = 0
}

View file

@ -1,29 +0,0 @@
[settings]
default-library = academia
opentool = xdg-open
file-browser = vifm
ref-format = {doc[author_list][0][surname]}{doc[year]}
add-confirm = True
add-name = {doc[author]}-{doc[title]}
add-folder-name = {doc[author]}-{doc[title]}
file-name = {doc[author]}_{doc[year]}_{doc[title]}
add-file-name = {doc[author]}_{doc[year]}_{doc[title]}
mark-header-format = {mark[value]}: {mark[name]}
mark-opener-format = zathura --page {mark[value]}
notes-name = notes.Rmd
[tui]
editmode = vi
options_list.selected_margin_style = bg:ansiwhite fg:ansiblack
options_list.unselected_margin_style = bg:ansiblack
[test]
dir = ~/documents/library
[academia]
dir = ~/Nextcloud/Library/academia

View file

@ -1,25 +0,0 @@
#!/bin/sh
# enables git management through dot command
alias dot='/usr/bin/git --git-dir=/home/marty/.dotfiles/ --work-tree=/home/marty'
# The following commands are run on your git repo if you installed through the script
# You can invoke them manually, but it's not recommended to keep them active in here.
# Otherwise each time a shell starts up, *whatever directory you are in*, the commands
# will be re-run.
#
## Make git assume the readme is not changing (essentially ignore it).
#
# This means you can safely remove the README.md file from your home dir
# without git trying to delete it from the repository.
# If you WANT to make changes to the README.md, you will have to make git
# watch it again with the commented out command
#
# Read more: https://stackoverflow.com/questions/4308610/how-to-ignore-certain-files-in-git
# and: https://stackoverflow.com/questions/653454/how-do-you-make-git-ignore-files-without-using-gitignore
#
#dot update-index --no-assume-unchanged README.md
#dot update-index --assume-unchanged README.md
## Make git not show untracked files (i.e. ALL other files in your home dir)
#dot config status.showUntrackedFiles no

View file

@ -1,6 +1,52 @@
# dotfiles Read-Me and Roadmap # dotfiles Read-Me and Roadmap
__ **THE BELOW README IS OUT OF DATE DO NOT FOLLOW ITS INSTALL INSTRUCTIONS** __
## What's in these dotfiles
* [x] vim configuration for simple programming tasks (especially go/typescript/python/bash) and prose
* [x] academic workflow tools, to allow quick citation, pdf compilation, and preview
* [x] simple, efficient polybar with package update notification, and spotify integration
* [x] tmux session management through `tm` and `tl` tools
* [x] quick terminal-wide color management through `sd`/`sD`/`sl`/`sL` commands, allowing two light and dark color-schemes
* [x] many vim color-schemes with quick light/dark switching (`F8`) and theme switch (`<Space>+F8`)
* [x] quick directory jumping using z, with fzf integration
* [x] fzf integrations for bibtex citation, vim buffer management, most recently used switching, shell command history, and more
## Quick-Start
The dotfiles are based on a bare-repository residing in your home directory. To enable a faster usage of the dotfile git commands, a `dot` command is supplied which mirrors the usual `git` functionality, but solely applies it to your dotfiles.
To install you need git on your system; to effectively use the dotfiles you should be using zsh (`chsh -s /bin/zsh` to switch your current user to the shell).
Clone the bare repo, rename it and force a checkout with the following command - **NOTE** this WILL **OVERWRITE YOUR EXISTING FILES**, so have a look at what is contained beforehand.
`git clone https://gitlab.com/marty-oehme/dotfiles.git df && cp -rf df/.git ~/.dotfiles && rm -rf df && cd ~ && git --git-dir=$HOME/.dotfiles/ checkout -f master`
It will clone your dotfiles into the .dotfiles directory in your home directory and then force a checkout of the current master branch. Open a new terminal window and you should live in the dotfiles.
## What's in these dotfiles
* [x] vim configuration for simple programming tasks (especially go/typescript/python/bash) and prose
* [x] academic workflow tools, to allow quick citation, pdf compilation, and preview
* [x] simple, efficient polybar with package update notification, and spotify integration
* [x] tmux session management through `tm` and `tl` tools
* [x] quick terminal-wide color management through `sd`/`sD`/`sl`/`sL` commands, allowing two light and dark color-schemes
* [x] many vim color-schemes with quick light/dark switching (`F8`) and theme switch (`<Space>+F8`)
* [x] quick directory jumping using z, with fzf integration
* [x] fzf integrations for bibtex citation, vim buffer management, most recently used switching, shell command history, and more
## Notable Folders
* generally, most configuration for applications follows the XDG specifications, keeping configuration in .config directory and supplementary files in .local/share directory
* `.config/shell` contains all the general zsh/bash/sh configuration and environment variables usually contained in .zshrc/.zprofile/..; it is divided in login shell config (loginrc.d), general shell config (rc.d) and zsh specific (zsh.d)
* `.config/rofi` contains additional scripts and a simple theming framework for rofi and should probably be migrated into the correct directories at some point
* `.local/bin` contains most executable user scripts
* `.local/share/pandoc` contains configuration for academic latex (pandoc, really) writing and is of interest if you want to use this functionality
* `.xinitrc` is used for x initialization and program startup, customize to your needs
* `.gitlab-ci.yml` is only used for simple CI code linting and static analysis on gitlab, can be deleted on individual deployments
NOTE:
**THE BELOW README IS OUT OF DATE DO NOT FOLLOW ITS INSTALL INSTRUCTIONS**
At some point I will get around to updating it At some point I will get around to updating it

100
bootstrap/autostow.sh Executable file
View file

@ -0,0 +1,100 @@
#!/usr/bin/env bash
#
# autostow.sh
#
# Stow automatic symlinking script
#
# Invokes stow for every folder within this repository, and that's it.
ignore="${AUTOSTOW_IGNORED_DIRS:-"bootstrap:assets"}"
main() {
case "$1" in
-s | --stow)
have_stow
echo "Creating dotfile symlinks ................................................."
stow_dirs
echo "Done creating symlinks ...................................................."
exit 0
;;
-d | --delete)
have_stow
echo "Removing dotfile symlinks ................................................."
unstow_dirs
echo "Done removing symlinks ...................................................."
exit 0
;;
-v | --version)
printf "System bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.2\n"
;;
-h | --help | *)
usage
exit 0
;;
esac
shift
}
stow_dirs() {
for d in */; do
if is_ignored "$d"; then
printf "ignoring %s\n" "$d"
continue
fi
printf "stowing %s\n" "$d"
stow -S -t ~ "$d"
done
}
unstow_dirs() {
for d in */; do
if is_ignored "$d"; then
printf "ignoring %s\n" "$d"
continue
fi
printf "unstowing %s\n" "$d"
stow -D -t ~ "$d"
done
}
is_ignored() {
IFS=":"
for ign in $ignore; do
if [ "$ign" == "$1" ] || [ "$ign/" == "$1" ]; then
return 0
fi
done
return 1
}
have_stow() {
if ! type stow >/dev/null 2>&1; then
printf "GNU stow needs to be installed for this script to function. Please install stow through your package manager.\n"
exit 1
fi
}
usage() {
printf "%s\n" \
"" \
" autostow.sh - Automatically stow your dotfiles." \
" Uses GNU stow to set up automatic links to any dotfiles in subdirectories of this directory." \
"" \
" Usage: stow.sh -dhs" \
"" \
" Options:" \
"" \
" -h Print out this help." \
"" \
" -s Install dotfiles, by symlinking any directory found next to stow.sh using GNU stow." \
"" \
" -d Remove dotfiles, by unlinking any directory found next to stow.sh using GNU stow." \
"" \
""
}
main "$@"

View file

@ -7,13 +7,15 @@
# DESCRIPTION: Display usage information for this script. # DESCRIPTION: Display usage information for this script.
# PARAMETERS: see usage function # PARAMETERS: see usage function
#============================================================================== #==============================================================================
packages="${BOOTSTRAP_PACKAGES:-packages.csv}"
main() { main() {
local cmd="" local cmd=""
local ret=0 local ret=0
case "$1" in case "$1" in
-v | --version) -v | --version)
printf "Package bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.1\n" printf "Package bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.3\n"
;; ;;
-h | --help) -h | --help)
printf "Usage: install [-f|--force][-v|--version][-h|--help]\n\n-f Do not ask for any confirmations but force update and installation.\n" printf "Usage: install [-f|--force][-v|--version][-h|--help]\n\n-f Do not ask for any confirmations but force update and installation.\n"
@ -58,9 +60,9 @@ update_repos() {
install_packages() { install_packages() {
unattended="$1" unattended="$1"
if "$unattended"; then if "$unattended"; then
yay -Squ --noconfirm --needed - <packages.csv yay -Squ --noconfirm --needed - <"$packages"
else else
yay -Su --needed - <packages.csv yay -Su --needed - <"$packages"
fi fi
} }
@ -71,12 +73,11 @@ check_consent() {
echo "Exiting." echo "Exiting."
exit exit
fi fi
} }
install() { install() {
unattended=$1 unattended=$1
echo "Beginning boostrap ........................................................" echo "Beginning package bootstrap ..............................................."
if ! "$unattended"; then if ! "$unattended"; then
check_consent check_consent
fi fi

View file

@ -4,10 +4,10 @@ bash
bibtool bibtool
bison bison
bzip2 bzip2
chromium
dhcpcd dhcpcd
dialog dialog
docker docker
dunst
exa exa
fasd fasd
feh feh
@ -15,26 +15,23 @@ flashfocus-git
fzf fzf
gawk gawk
git git
git-lfs
gnome-keyring gnome-keyring
gopass gopass
grep grep
gzip gzip
hugo hugo
i3-gaps i3-gaps
i3blocks
i3lock i3lock
i3status
jabref-latest jabref-latest
jpdftweak
keybase-bin keybase-bin
less less
libnotify
libtool libtool
littler littler
logrotate logrotate
mopidy lynx
mopidy-podcast
mopidy-scrobbler
mopidy-spotify
mopidy-spotify-tunigo
mosh mosh
mpv mpv
nano nano
@ -42,6 +39,7 @@ neovim
nerd-fonts-fira-code nerd-fonts-fira-code
nerd-fonts-iosevka nerd-fonts-iosevka
nextcloud-client nextcloud-client
ntfs-3g
nvidia nvidia
nvidia-utils nvidia-utils
openssh openssh
@ -49,9 +47,8 @@ os-prober
pacman pacman
pandoc pandoc
pandoc-citeproc pandoc-citeproc
papis
picom picom
pkgconf playerctl
polybar polybar
pulseaudio pulseaudio
pulseaudio-alsa pulseaudio-alsa
@ -59,7 +56,6 @@ pulsemixer
python-pip python-pip
python-pybtex python-pybtex
python-pynvim python-pynvim
python-pywal
qutebrowser qutebrowser
r r
redshift redshift
@ -70,8 +66,9 @@ rofi-dmenu
rofi-greenclip rofi-greenclip
rofimoji rofimoji
scrot scrot
shellcheck-static spotify
shfmt sshfs
stow
surfraw surfraw
sxhkd sxhkd
tar tar
@ -100,7 +97,6 @@ unzip
vagrant vagrant
vifm vifm
virtualbox virtualbox
weechat
wget wget
which which
xcape xcape
1 alacritty
4 bibtool
5 bison
6 bzip2
chromium
7 dhcpcd
8 dialog
9 docker
10 dunst
11 exa
12 fasd
13 feh
15 fzf
16 gawk
17 git
18 git-lfs
19 gnome-keyring
20 gopass
21 grep
22 gzip
23 hugo
24 i3-gaps
i3blocks
25 i3lock
i3status
26 jabref-latest
27 jpdftweak
28 keybase-bin
29 less
30 libnotify
31 libtool
32 littler
33 logrotate
34 mopidy lynx
mopidy-podcast
mopidy-scrobbler
mopidy-spotify
mopidy-spotify-tunigo
35 mosh
36 mpv
37 nano
39 nerd-fonts-fira-code
40 nerd-fonts-iosevka
41 nextcloud-client
42 ntfs-3g
43 nvidia
44 nvidia-utils
45 openssh
47 pacman
48 pandoc
49 pandoc-citeproc
papis
50 picom
51 pkgconf playerctl
52 polybar
53 pulseaudio
54 pulseaudio-alsa
56 python-pip
57 python-pybtex
58 python-pynvim
python-pywal
59 qutebrowser
60 r
61 redshift
66 rofi-greenclip
67 rofimoji
68 scrot
69 shellcheck-static spotify
70 shfmt sshfs
71 stow
72 surfraw
73 sxhkd
74 tar
97 vagrant
98 vifm
99 virtualbox
weechat
100 wget
101 which
102 xcape

View file

67
install.sh Executable file
View file

@ -0,0 +1,67 @@
#!/usr/bin/env bash
#
# install.sh
#
# Installs dotfiles and packages for my setup
#
# Will first install yay, then all my used packages (read from bootstrap/packages.csv)
#
# Will symlink all my dotfiles into their correct places using autostow.sh
main() {
local cmd=""
local ret=0
case "$1" in
-v | --version)
printf "Personal system bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.1\n"
;;
-h | --help)
printf "Usage: install [-f|--force][-v|--version][-h|--help]\n\n-f Do not ask for any confirmations but force update and installation.\n"
;;
-f | --force)
install true
;;
*)
install false
;;
esac
shift
$cmd "$@"
ret=$((ret + $?))
exit $ret
}
check_consent() {
echo "This will take a while, install many packages and link dotfiles all over the place. Proceed [y/N]?"
read -r yes
if [[ "$yes" != y* ]]; then
echo "Exiting."
exit
fi
}
install() {
unattended=$1
if ! "$unattended"; then
check_consent
fi
echo "====================== BEGINNING INSTALLATION ============================="
if ! "$unattended"; then
export BOOTSTRAP_PACKAGES="bootstrap/packages.csv"
./bootstrap/install_packages.sh
else
export BOOTSTRAP_PACKAGES="bootstrap/packages.csv"
./bootstrap/install_packages.sh -f
fi
unset BOOTSTRAP_PACKAGES
echo "=================== BEGINNING DOTFILE MANAGEMENT =========================="
./bootstrap/autostow.sh -s
echo "====================== INSTALLATION FINISHED =============================="
}
main "$@"

View file

@ -0,0 +1 @@
colo nord

View file

@ -0,0 +1,22 @@
function CompileDoc()
:execute(":w!")
:execute(":!compile \"%\"")
endfunction
function CompileDocNoOutput()
:execute(":w!")
:execute(":silent !compile \"%\"")
endfunction
function CompiledOpen()
:execute(":silent !open-compiled \"%\"")
endfunction
function CompileDocAndOpen()
call CompileDocNoOutput()
call CompiledOpen()
endfunction
command CompileDoc call CompileDoc()
command CompileOpen call CompiledOpen()
command CompileDocAndOpen call CompileDocAndOpen()

View file

@ -0,0 +1,16 @@
local w = vim.loop.new_fs_event()
local function on_change(err, fname, status)
-- Do work...
vim.api.nvim_command('checktime')
-- Debounce: stop/start.
w:stop()
watch_file(fname)
end
function watch_file(fname)
local fullpath = vim.api.nvim_call_function(
'fnamemodify', {fname, ':p'})
w:start(fullpath, {}, vim.schedule_wrap(function(...)
on_change(...) end))
end
vim.api.nvim_command(
"command! -nargs=1 Watch call luaeval('watch_file(_A)', expand('<args>'))")

View file

@ -0,0 +1,403 @@
[colors]
;background = ${xrdb:color0:#222}
background = #222
background-alt = #444
;foreground = ${xrdb:color7:#222}
foreground = #dfdfdf
foreground-alt = #555
primary = #ffb52a
secondary = #e60053
alert = #bd2c40
[bar/example]
;monitor = ${env:MONITOR:HDMI-1}
width = 100%
height = 27
;offset-x = 1%
;offset-y = 1%
radius = 6.0
fixed-center = false
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 3
line-color = #f00
border-size = 0
border-color = #00000000
padding-left = 15
padding-right = 15
module-margin-left = 1
module-margin-right = 2
font-0 = fixed:pixelsize=10;1
font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
font-2 = siji:pixelsize=10;1
modules-left = bspwm i3
modules-center = mpd
modules-right = filesystem xbacklight alsa pulseaudio xkeyboard memory cpu wlan eth battery temperature powermenu date
tray-position = right
tray-padding = 2
tray-background = #0063ff
;wm-restack = bspwm
;wm-restack = i3
;override-redirect = true
;scroll-up = bspwm-desknext
;scroll-down = bspwm-deskprev
scroll-up = i3wm-wsnext
scroll-down = i3wm-wsprev
cursor-click = pointer
cursor-scroll = ns-resize
[module/xwindow]
type = internal/xwindow
label = %title:0:30:...%
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.secondary}
label-layout = %layout%
label-layout-underline = ${colors.secondary}
label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-background = ${colors.secondary}
label-indicator-underline = ${colors.secondary}
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.foreground-alt}
[module/bspwm]
type = internal/bspwm
label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2
label-occupied = %index%
label-occupied-padding = 2
label-urgent = %index%!
label-urgent-background = ${colors.alert}
label-urgent-padding = 2
label-empty = %index%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2
; Separator in between workspaces
; label-separator = |
[module/i3]
type = internal/i3
format = <label-state> <label-mode>
index-sort = true
wrapping-scroll = false
; Only show workspaces on the same output as the bar
;pin-workspaces = true
label-mode-padding = 2
label-mode-foreground = #000
label-mode-background = ${colors.primary}
; focused = Active workspace on focused monitor
label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2
; unfocused = Inactive workspace on any monitor
label-unfocused = %index%
label-unfocused-padding = 2
; visible = Active workspace on unfocused monitor
label-visible = %index%
label-visible-background = ${self.label-focused-background}
label-visible-underline = ${self.label-focused-underline}
label-visible-padding = ${self.label-focused-padding}
; urgent = Workspace with urgency hint set
label-urgent = %index%
label-urgent-background = ${colors.alert}
label-urgent-padding = 2
; Separator in between workspaces
; label-separator = |
[module/mpd]
type = internal/mpd
format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next>
icon-prev = 
icon-stop = 
icon-play = 
icon-pause = 
icon-next = 
label-song-maxlen = 25
label-song-ellipsis = true
[module/xbacklight]
type = internal/xbacklight
format = <label> <bar>
label = BL
bar-width = 10
bar-indicator = |
bar-indicator-foreground = #fff
bar-indicator-font = 2
bar-fill = ─
bar-fill-font = 2
bar-fill-foreground = #9f78e1
bar-empty = ─
bar-empty-font = 2
bar-empty-foreground = ${colors.foreground-alt}
[module/backlight-acpi]
inherit = module/xbacklight
type = internal/backlight
card = intel_backlight
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #f90000
label = %percentage:2%%
[module/memory]
type = internal/memory
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #4bffdc
label = %percentage_used%%
[module/wlan]
type = internal/network
interface = wlp0s29u1u1
interval = 3.0
format-connected = <ramp-signal> <label-connected>
format-connected-underline = #9f78e1
label-connected = %essid%
format-disconnected =
;format-disconnected = <label-disconnected>
;format-disconnected-underline = ${self.format-connected-underline}
;label-disconnected = %ifname% disconnected
;label-disconnected-foreground = ${colors.foreground-alt}
ramp-signal-0 = 
ramp-signal-1 = 
ramp-signal-2 = 
ramp-signal-3 = 
ramp-signal-4 = 
ramp-signal-foreground = ${colors.foreground-alt}
[module/eth]
type = internal/network
interface = enp6s0
interval = 3.0
format-connected-underline = #55aa55
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = %local_ip%
format-disconnected =
;format-disconnected = <label-disconnected>
;format-disconnected-underline = ${self.format-connected-underline}
;label-disconnected = %ifname% disconnected
;label-disconnected-foreground = ${colors.foreground-alt}
[module/date]
type = internal/date
interval = 5
date =
date-alt = " %Y-%m-%d"
time = %H:%M
time-alt = %H:%M:%S
format-prefix = 
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #0a6cf5
label = %date% %time%
[module/pulseaudio]
type = internal/pulseaudio
format-volume = <label-volume> <bar-volume>
label-volume = VOL %percentage%%
label-volume-foreground = ${root.foreground}
label-muted = 🔇 muted
label-muted-foreground = #666
bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 2
bar-volume-fill = ─
bar-volume-fill-font = 2
bar-volume-empty = ─
bar-volume-empty-font = 2
bar-volume-empty-foreground = ${colors.foreground-alt}
[module/alsa]
type = internal/alsa
format-volume = <label-volume> <bar-volume>
label-volume = VOL
label-volume-foreground = ${root.foreground}
format-muted-prefix = " "
format-muted-foreground = ${colors.foreground-alt}
label-muted = sound muted
bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 2
bar-volume-fill = ─
bar-volume-fill-font = 2
bar-volume-empty = ─
bar-volume-empty-font = 2
bar-volume-empty-foreground = ${colors.foreground-alt}
[module/battery]
type = internal/battery
battery = BAT0
adapter = ADP1
full-at = 98
format-charging = <animation-charging> <label-charging>
format-charging-underline = #ffb52a
format-discharging = <animation-discharging> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}
format-full-prefix = " "
format-full-prefix-foreground = ${colors.foreground-alt}
format-full-underline = ${self.format-charging-underline}
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-foreground = ${colors.foreground-alt}
animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-foreground = ${colors.foreground-alt}
animation-charging-framerate = 750
animation-discharging-0 = 
animation-discharging-1 = 
animation-discharging-2 = 
animation-discharging-foreground = ${colors.foreground-alt}
animation-discharging-framerate = 750
[module/temperature]
type = internal/temperature
thermal-zone = 0
warn-temperature = 60
format = <ramp> <label>
format-underline = #f50a4d
format-warn = <ramp> <label-warn>
format-warn-underline = ${self.format-underline}
label = %temperature-c%
label-warn = %temperature-c%
label-warn-foreground = ${colors.secondary}
ramp-0 = 
ramp-1 = 
ramp-2 = 
ramp-foreground = ${colors.foreground-alt}
[module/powermenu]
type = custom/menu
expand-right = true
format-spacing = 1
label-open = 
label-open-foreground = ${colors.secondary}
label-close =  cancel
label-close-foreground = ${colors.secondary}
label-separator = |
label-separator-foreground = ${colors.foreground-alt}
menu-0-0 = reboot
menu-0-0-exec = menu-open-1
menu-0-1 = power off
menu-0-1-exec = menu-open-2
menu-1-0 = cancel
menu-1-0-exec = menu-open-0
menu-1-1 = reboot
menu-1-1-exec = sudo reboot
menu-2-0 = power off
menu-2-0-exec = sudo poweroff
menu-2-1 = cancel
menu-2-1-exec = menu-open-0
[settings]
screenchange-reload = true
;compositing-background = xor
;compositing-background = screen
;compositing-foreground = source
;compositing-border = over
;pseudo-transparency = false
[global/wm]
margin-top = 5
margin-bottom = 5

View file

@ -0,0 +1,9 @@
dot https://gitlab.com/marty-oehme/dotfiles
l https://links.martyoeh.me/
todo https://todoist.com/app?lang=de#start
mail https://mail.google.com/mail/u/0/#inbox
rss https://rss.martyoeh.me/
files http://files.martyoeh.me/
read https://read.martyoeh.me/
arch https://wiki.archlinux.org/
toggl https://toggl.com/app/timer

File diff suppressed because it is too large Load diff

73
rofi/.config/rofi/modes/gopass Executable file
View file

@ -0,0 +1,73 @@
#!/usr/bin/env sh
# Custom key bindings do not work in script-mode, use a wrapper instead
# Script at .local/bin/rofi-gopass
OLD_GOPASS_GPG_OPTS="$GOPASS_GPG_OPTS"
break_out() {
if [ "$1" -eq 1 ]; then
exit
fi
}
has_xclip() {
if (type xclip >/dev/null 2>&1); then
printf "Your system does not appear to support pasting to clipboard via xclip."
exit 1
else
return 0
fi
}
to_clipboard() {
has_xclip
value="$(gopass show "$1" "$2")"
printf "%s" "$value" | xclip -selection clipboard
notify-send "Password" "Copied pass for $2 to clipboard.\n"
exit
}
show_secrets() {
printf "%s" "$(gopass ls -fo)"
}
# get_key() {
# return echo "$*" | gpg --passphrase-fd 0 --pinentry-mode loopback --batch --export-secret-keys 2>&1
# }
# check_gpg_key() {
# check_keyphrase=$(echo "$*" | gpg --passphrase-fd 0 --pinentry-mode loopback --batch --export-secret-keys 2>&1)
# if echo "$check_keyphrase" | grep -q -e '.*<.*@.*>'; then
# printf "\x00prompt\x1fLogin> \n"
# show_secrets
# elif echo "$check_keyphrase" | grep -q -e "can't get input" - || echo "$check_keyphrase" | grep -q -e "error receiving key" -; then
# printf "\x00prompt\x1fMaster Passphrase> \n"
# printf "%s" "$check_keyphrase"
# else
# echo "passphrase successfully input, $check_keyphrase"
# fi
# }
# has_selected_login() {
# echo "this is passed to ls: $*"
# echo "grep reveals: $(gopass ls -f | grep -e "$*" -)"
# if grep "$(gopass ls -f | grep -q -e "$*" -)"; then
# echo "ls found something"
# true
# else
# false
# fi
# }
# if [ -z "$*" ]; then
# check_gpg_key "$*"
# elif has_selected_login "$*"; then
# echo "has selected login $*"
# else
# check_gpg_key "$*"
# fi
main() {
show_secrets
}
main

View file

@ -0,0 +1,28 @@
#!/usr/bin/env bash
rofi_command="rofi"
original_args=("$@")
for ((i = 0; i <= "${#original_args[@]}"; i++)); do
if [ "${original_args[i]}" == "-color" ]; then
for ((j = 0; j <= "${#original_args[@]}"; j++)); do
if [ "${original_args[j]}" == "-theme" ]; then
echo "with theme: $i : ${original_args[i]} ${original_args[i + 1]}"
fi
done
fi
done
# for ((index = 0; index <= ${#lines_ary[@]}; index++)); do
# if [ "${lines_ary[index]}" == "Release:" ]; then
# echo "${lines_ary[index + 1]}"
# fi
# done
$rofi_command "${original_args[@]}"
# if [ -z "${color}" ]; then
# command rofi "${original_args[@]}"
# fi
# echo "color = ${color}"

View file

@ -0,0 +1,209 @@
#!/bin/bash
# rofi wrapper. Add custom settings here.
_rofi () {
rofi -dmenu -no-auto-select -i "$@"
}
# default settings
backend=ydotool
dotool_delay=200
daemon_wait=2
autotype_delay=2
key_autotype="Return"
key_usertype="Alt+2"
key_passtype="Alt+3"
key_actions="Alt+a"
key_clipboard="Alt+1"
key_fieldtype="Return"
# read config file
get_config_file () {
configs=("$ROFI_PASS_CONFIG"
"$HOME/.config/rofi-pass/rofi-gopass.conf"
"/etc/rofi-gopass.conf")
# return the first config file with a valid path
for config in "${configs[@]}"; do
# '! -z' is needed in case ROFI_PASS_CONFIG is not set
if [[ ! -z "${config}" && -f "${config}" ]]; then
printf "%s" "$config"
return
fi
done
}
# Make sure ESC will always end the programm.
# Call this function with "exit_check $?" after each rofi call.
exit_check () {
exit_value=$1
if [[ "${exit_value}" == "1" ]]; then
exit
fi
}
clipboard () {
local entry
local key
local value
entry="${1}"
key="${2}"
value="$(gopass show "${entry}" "${key}")"
printf '%s' "${value}" | xclip -sel clip
notify-send "rofi-gopass" "Copied ${key} to clipboard\nClearing in 45 seconds."
(sleep 45; printf '%s' "" | xclip; printf '%s' "" | xclip -selection clipboard | notify-send "rofi-gopass" "Clipboard cleared") &
exit
}
_ydotoold () {
if ! pgrep -x "ydotoold" >/dev/null; then
# ydotoold blocks the terminal, so we need to background it.
# Sadly this way we never know when the process finished starting up.
# Until ydotoold receives proper daemonizing we add a sleep value here.
ydotoold&
sleep "${daemon_wait}"
fi
}
_dotool () {
local mode
local key
mode="${1}"
key="${2:-null}"
case "${mode}" in
"type")
case "${backend}" in
"xdotool") xdotool type --delay "${dotool_delay}" --file - ;;
"ydotool") _ydotoold; ydotool type --delay "${dotool_delay}" --file - ;;
esac ;;
"key")
case "${backend}" in
"xdotool") xdotool key "${key}" ;;
"ydotool") _ydotoold; ydotool key "${key}" ;;
esac ;;
esac
}
list_passwords () {
gopass list --flat
}
autopass () {
local entry
local autotype
entry="${1}"
autotype="$(gopass show "${entry}" autotype)"
autotype="${autotype:-user :tab pass}"
for word in ${autotype}; do
case "$word" in
":tab") _dotool key Tab;;
":space") _dotool key " ";;
":delay") sleep "${autotype_delay}";;
":enter") _dotool key enter;;
"pass") printf '%s' "$(gopass show --password "${entry}")" | _dotool type ;;
*) printf '%s' "$(gopass show "${entry}" "${word}")" | _dotool type ;;
esac
done
}
list_keys () {
# gopass has no option to only list keys, so we need to build the list ourselves.
local entry
local keys
entry="${1}"
keys="$(gopass show "${entry}")"
printf '%s\n' "${keys}" | while read -r line; do
if [[ "${line}" == *": "* ]]; then
printf '%s\n' "${line%: *}"
fi
done
}
edit_key () {
local entry
local keys
entry="${1}"
keys="$(list_keys "${entry}")"
key_name=$(printf '%s\n' "${keys}" | _rofi -mesg "Enter new key or chose existing one")
exit_check $?
value_name=$(printf '%s' "" | _rofi -mesg "Enter Value for key \"${key_name}\"")
exit_check $?
if [[ -z "${key_name}" ]]; then
printf '%s' "${value_name}" | gopass insert -a "${entry}" "${key_name}"
else
printf '%s' "${value_name}" | gopass insert "${entry}" "${key_name}"
fi
}
# For dangerous operations call this function first. You can provide a message as argument.
# Example: confirm "Are you sure you want to delete entry?"
confirm () {
local message
message="${1}"
confirm_content=(
"Yes"
"No")
confirm_menu=$(printf '%s\n' "${confirm_content[@]}" | _rofi -mesg "${message}")
exit_check $?
case "${confirm_menu}" in
"Yes") : ;;
"No") exit ;;
esac
}
custom_type () {
local entry
local keys
entry="${1}"
keys="$(list_keys "${entry}")"
key_name=$(printf '%s\n' "${keys}" | _rofi -kb-accept-entry "" -no-custom -kb-custom-1 "${key_clipboard}" -kb-custom-2 "${key_fieldtype}" -mesg "${key_clipboard}: Copy to Clipboard | ${key_fieldtype}: Type Field")
local exit_value=$?
exit_check "${exit_value}"
case "${exit_value}" in
"10") clipboard "${entry}" "${key_name}" ;;
"11") printf '%s' "$(gopass show "${entry}" "${key_name}")" | _dotool type; exit ;;
esac
}
do_menu () {
local entry
entry="${1}"
action_menu_content=(
"< Go Back"
"---"
"Show Fields"
"Add/Edit Keys"
"Generate New Password"
"Delete Entry"
)
action_menu="$(printf '%s\n' "${action_menu_content[@]}" | _rofi -no-custom -mesg "Selected Entry: ${entry}" -p '> ')"
exit_value=$?
exit_check "${exit_value}"
case "${action_menu}" in
"< Go Back") main ;;
"Show Fields") custom_type "${entry}" ;;
"Add/Edit Keys") edit_key "${entry}" ;;
"Delete Entry") confirm "Delete ${entry}?"; gopass rm -f "${entry}" ;;
"Generate New Password") confirm "Generate a new password for ${entry}?"; gopass generate -f "${entry}" ;;
esac
}
main () {
entry="$(list_passwords | _rofi -kb-accept-entry "" -kb-custom-1 "${key_autotype}" -kb-custom-2 "${key_usertype}" -kb-custom-3 "${key_passtype}" -kb-custom-4 "${key_actions}" -mesg "${key_autotype}: Autotype | ${key_usertype}: Type User | ${key_passtype}: Type Pass | ${key_actions}: More Actions")"
exit_value=$?
exit_check "${exit_value}"
case "${exit_value}" in
"10") autopass "${entry}"; exit ;;
"11") printf '%s' "$(gopass show "${entry}" user)" | _dotool type; exit ;;
"12") printf '%s' "$(gopass show --password "${entry}")" | _dotool type; exit ;
esac
do_menu "${entry}"
}
main

99
rofi/.config/rofi/modes/test Executable file
View file

@ -0,0 +1,99 @@
#!/usr/bin/env sh
# POSIX COMPLIANT EXAMPLE ROFI MODE SCRIPT
#### Options ###
power_off_btn=""
reboot_btn=""
lock_btn=""
suspend_btn="鈴"
logout_btn=""
# find out what the user has input
# pad both values with a simple p in front
# if query is empty it tries to compare nothing with quit otherwise
# i.e. the [ operator, which will error out
if [ p"$*" = p"quit" ]; then
exit 0
fi
if [ x"$*" = x"noot" ]; then
rofi-powermenu
exit 0
fi
# another way to see what the user has input
# grep -a since it assumes with our nullcodes etc that this is a binary file
# grep -o to only leave the things we grep for
case $(echo "$*" | grep -a -o -e "Shutdown" -e "Reboot" -e "Lockscreen" -e "Logout" -e "Suspend") in
"Shutdown")
# do shutdown
;;
"Reboot")
# do shutdown
;;
"Lockscreen")
# do shutdown
;;
"Logout")
# do shutdown
;;
"Suspend")
# do shutdown
;;
esac
if [ "$@" ]; then
# Override the previously set prompt.
printf "\x00prompt\x1fChange prompt\n"
for a in 1 2 3 4 5 6 7 8 9 10; do
echo "$a"
done
echo "quit"
else
printf "\x00prompt\x1fPower> \n"
# we can use pango markup to hide text which we can then search. Neat!
printf "\0markup-rows\x1ftrue\n"
# echo -en "\0urgent\x1f0,2\n"
# echo -en "\0active\x1f1\n"
# echo -en "\0message\x1fSpecial <b>bold</b>message\n"
printf "aap\0icon\x1ffolder\n"
printf "<!-- Shutdown Poweroff --> %s\0icon\x1fstart-here\n" "$power_off_btn"
printf "<!-- Reboot Restart --> %s\n" "$reboot_btn"
printf "<!-- Lockscreen --> %s\n" "$lock_btn"
printf "<!-- Suspend Sleep --> %s\n" "$suspend_btn"
printf "<!-- Exit X Logout --> %s\n" "$logout_btn"
echo "<b>Bold</b>"
echo "quit"
fi
##!/usr/bin/env sh
#### Options ###
#power_off=""
#reboot=""
#lock=""
#suspend_btn="鈴"
#logout_btn=""
## Variable passed to rofi
#chosen="$(printf "%s\n%s\n%s\n%s\n%s" "$power_off" "$reboot" "$lock" "$suspend_btn" "$logout_btn" | $rofi_command -dmenu -selected-row 2)"
#case $chosen in
#$power_off)
# systemctl poweroff
# ;;
#$reboot)
# systemctl reboot
# ;;
#$lock)
# lockscreen
# ;;
#$suspend_btn)
# systemctl suspend
# ;;
#$logout_btn)
# i3-msg exit
# ;;
#esac

View file

Can't render this file because it contains an unexpected character in line 2 and column 33.

Some files were not shown because too many files have changed in this diff Show more