holy moly we're almost there

This commit is contained in:
Anish Lakhwara
2022-09-19 08:13:50 +10:00
commit 3693732aac
203 changed files with 17247 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
{ hmUsers, pkgs, ... }:
{
#home-manager.users = { inherit (hmUsers) anish; };
users.users.anish = {
description = "Personal user for Anish";
hashedPassword = "MVHHpy9gbe3ow";
shell = pkgs.zsh;
isNormalUser = true;
extraGroups = [ "wheel" "audio" ];
openssh.authorizedKeys.keys = [
# Curve
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve"
# Line
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost"
];
};
# home-manager.users.anish.programs.git = {
# userName = "Anish Lakhwara";
# userEmail = "anish+git@lakhwara.com";
# delta.enable = true;
# };
#home-manager.users.anish = { suites, ... }: {
# imports = suites.gui;
#};
}
View File
+12
View File
@@ -0,0 +1,12 @@
{ hmUsers, ... }:
{
home-manager.users = { inherit (hmUsers) nixos; };
users.users.nixos = {
uid = 1000;
password = "nixos";
description = "default";
isNormalUser = true;
extraGroups = [ "wheel" ];
};
}
+24
View File
@@ -0,0 +1,24 @@
#: Ayu theme for kitty
#: Stolen from https://codeberg.org/Raimu/kitty-ayu-color-scheme/src/branch/main/ayu-Mirage.conf
background #1F2430
foreground #CBCCC6
cursor #FFCC66
selection_background #33415E
color0 #000000
color8 #4D5566
color1 #FF3333
color9 #F27983
color2 #BAE67E
color10 #A6CC70
color3 #FFA759
color11 #F29E74
color4 #73D0FF
color12 #77A8D9
color5 #D4BFFF
color13 #A37ACC
color6 #95E6CB
color14 #4CBF99
color7 #ffffff
color15 #F0F0F0
selection_foreground #CBCCC6
+98
View File
@@ -0,0 +1,98 @@
{ pkgs, config, age, ... }:
{
home.packages = with pkgs; [
khal
khard
vdirsyncer
];
xdg.configFile = {
"vdirsyncer/config".text = ''
[general]
status_path = "/home/anish/.config/vdirsyncer/status/"
[pair contacts]
a = "contacts_local"
b = "contacts_remote"
collections = ["from b"]
metadata = ["displayname"]
[storage contacts_local]
type = "filesystem"
path = "~/.contacts/"
fileext = ".vcf"
[storage contacts_remote]
type = "carddav"
url = "http://mossnet.lan:5252/anish"
username = "anish"
password.fetch = ["command", "echo", "acceptsanypassword"]
[pair calendar]
a = "calendar_local"
b = "calendar_remote"
collections = ["from b"]
metadata = ["displayname"]
[storage calendar_local]
type = "filesystem"
path = "~/.calendar/"
fileext = ".ics"
[storage calendar_remote]
type = "caldav"
url = "http://mossnet.lan:5252/anish"
username = "anish"
password.fetch = ["command", "echo", "allpasswordsaccepted"]
'';
"khal/config".text = ''
[calendars]
[[calendar_local]]
path = ~/.calendar/*
type = discover
[[contacts_local]]
path = ~/.contacts/*
type = birthdays
[locale]
timeformat = %H:%M
dateformat = %Y-%m-%d
longdateformat = %Y-%m-%d
datetimeformat = %Y-%m-%d %H:%M
longdatetimeformat = %Y-%m-%d %H:%M
'';
"khard/khard.conf".text = ''
[addressbooks]
[[personal]]
path = ~/.contacts/*
[general]
debug = no
default_action = list
editor = nvim, -i, NONE
merge_editor = nvim, -d
[contact table]
display = first_name
group_by_addressbook = no
reverse = no
show_nicknames = yes
show_uids = no
sort = last_name
localize_dates = yes
preferred_phone_number_type = pref, cell, home
preferred_email_address_type = pref, home, work
[vcard]
private_objects = Jabber,
preferred_version = 3.0
search_in_source_files = no
skip_unparsable = no
'';
};
}
+256
View File
@@ -0,0 +1,256 @@
{ self, lib, pkgs, config, ... }:
{
home.packages = with pkgs; [
binutils
coreutils
dnsutils
dosfstools
#git
bottom
gptfdisk
starship
iputils
jq
manix
moreutils
nix-index
cached-nix-shell
nmap
ripgrep
skim
tealdeer
usbutils
utillinux
whois
iftop
wget
curl
exa
bat
fd
ncdu
duf
trash-cli
nix-index
silver-searcher
tcpdump
mtr
file
lsof
atool
strace
zip
unzip
rsync
tmux
pwgen
glow
pass
less
gdb
xxd
taskwarrior
yt-dlp
gnupg
syncthing
dijo
#ssb-patchwork
fontconfig
pandoc
];
programs.zsh = {
enable = true;
enableCompletion = true;
enableAutosuggestions = true;
initExtra = ''
bindkey -v
flakify() {
if [ ! -e flake.nix ]; then
nix flake new -t github:nix-community/nix-direnv .
elif [ ! -e .envrc ]; then
echo "use flake" > .envrc
direnv allow
fi
vim flake.nix
}
autopair-init
'';
sessionVariables = {
EDITOR = "nvim";
TERMINFO_DIRS = "${pkgs.kitty.terminfo.outPath}/share/terminfo"; # Needed to run home-manager switch on non-nixOS
};
plugins = [
# {
# name = "zsh-autocomplete";
# src = pkgs.fetchFromGitHub {
# owner = "marlonrichert";
# repo = "zsh-autocomplete";
# rev = "22.01.21";
# sha256 = "+UziTYsjgpiumSulrLojuqHtDrgvuG91+XNiaMD7wIs=";
# };
# }
{
name = "zsh-autopair";
src = pkgs.fetchFromGitHub {
owner = "hlissner";
repo = "zsh-autopair";
rev = "34a8bca0c18fcf3ab1561caef9790abffc1d3d49";
sha256 = "1h0vm2dgrmb8i2pvsgis3lshc5b0ad846836m62y8h3rdb3zmpy1";
};
file = "autopair.zsh";
}
{
name = "zsh-syntax-highlighting";
src = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-syntax-highlighting";
rev = "0.6.0";
sha256 = "0zmq66dzasmr5pwribyh4kbkk23jxbpdw4rjxx0i7dx8jjp2lzl4";
};
file = "zsh-syntax-highlighting.zsh";
}
{
name = "zsh-autoquoter";
src = pkgs.fetchFromGitHub {
owner = "ianthehenry";
repo = "zsh-autoquoter";
rev = "819a615fbfd2ad25c5d311080e3a325696b45de7";
sha256 = "r0jdo+YFTOejvNMTqzXi5ftcLzDpuKejX0wMFwqKdJY=";
};
file = "zsh-autoquoter.zsh";
}
{
name = "zsh-nix-shell";
file = "nix-shell.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "v0.5.0";
sha256 = "0za4aiwwrlawnia4f29msk822rj9bgcygw6a8a6iikiwzjjz0g91";
};
}
];
};
programs.starship = {
enable = true;
enableZshIntegration = true;
};
programs.fzf = {
enable = true;
enableZshIntegration = true;
};
programs.direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
# nix-direnv.enableFlakes = true; always enabled
};
programs.zoxide = {
enable = true;
enableZshIntegration = true;
};
services.kdeconnect.enable = true;
home.shellAliases = {
# quick cd
".." = "cd ..";
"..." = "cd ../..";
"...." = "cd ../../..";
"....." = "cd ../../../..";
# kitaab recents
kr = "cd /home/anish/kitaab/vimwiki; ls --sort=modified --reverse | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 {}'";
# modern cli tools
ls = "exa --icons";
l = "exa -l --icons";
la = "exa -la --icons";
tree = "ls --tree --icons";
cat = "bat";
unzip = "aunpack";
copy = "xclip -selection clipboard";
paste = "xclip -selection clipboard -o";
rm = "echo USE TRASH, FOOL: trash ";
trash = "trash-put";
# task warrior
# TODO: make blocked a context?
t = "task -BLOCKED";
tun = "task -BLOCKED -wait";
tr = "task newest limit:page";
tu = "task unblocked -wait";
tl = "task list";
ta = "task add";
tn = "task-note";
tm = "task limit:page";
te = "task edit";
ts = "task sync";
scrot = "flameshot screen -c -p ~/screenshots/";
scrotgui = "flameshot gui -p ~/screenshots/";
# git
g = "git";
# grep
grep = "rg";
gi = "grep -i";
# internet ip
myip = "dig +short myip.opendns.com @208.67.222.222 2>&1";
# nix
n = "nix";
np = "n profile";
ni = "np install";
nr = "np remove";
ns = "n search --no-update-lock-file";
nf = "n flake";
nfl = "nf lock";
nepl = "n repl '<nixpkgs>'";
srch = "ns nixos";
orch = "ns override";
nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/etc/nixos/#curve'; cd $OLDPWD";
nrt = "cd /tmp; sudo nixos-rebuild test --flake '/etc/nixos/#curve'; cd $OLDPWD";
ned = "cd /etc/nixos; vim; cd $OLDPWD";
ncd = "cd /etc/nixos";
mn = ''
manix "" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | sk --preview="manix '{}'" | xargs manix
'';
# fix nixos-option
nixos-option = "nixos-option -I nixpkgs=${self}/lib/compat";
# sudo
s = "sudo -E ";
pls = "s";
si = "sudo -i";
se = "sudoedit";
# top
top = "btm";
# systemd
ctl = "systemctl";
stl = "s systemctl";
utl = "systemctl --user";
ut = "systemctl --user start";
un = "systemctl --user stop";
up = "s systemctl start";
dn = "s systemctl stop";
jtl = "journalctl";
# quick ssh
kssh = "kitten +kitty ssh";
smm = "ssh 10.0.69.4"; # box over wireguard
sm = "ssh mossnet.lan"; # box regular
ss = "ssh sealight.xyz"; # helix
# sl = "ssh 69.61.38.225"; # lituus has become helix
};
}
+92
View File
@@ -0,0 +1,92 @@
[aws]
symbol = " "
[character]
success_symbol = "[](bold purple)"
vicmd_symbol = "[](bold purple)"
[battery]
full_symbol = " "
charging_symbol = " "
discharging_symbol = " "
[conda]
symbol = " "
[directory]
style = "cyan"
read_only = " 🔒"
[docker_context]
symbol = " "
[elixir]
symbol = " "
[elm]
symbol = " "
[git_branch]
format = "[$symbol$branch]($style) "
symbol = " "
style = "bold dimmed white"
[git_status]
format = '([「$all_status$ahead_behind」]($style) )'
conflicted = "⚠️"
ahead = "⟫${count} "
behind = "⟪${count}"
diverged = "🔀 "
untracked = "📁 "
stashed = "↪ "
modified = "𝚫 "
staged = "✔ "
renamed = "⇆ "
deleted = "✘ "
style = "bold bright-white"
[golang]
symbol = " "
[hg_branch]
symbol = " "
[java]
symbol = " "
[julia]
symbol = " "
[memory_usage]
symbol = " "
disabled = false
[nim]
symbol = " "
[nix_shell]
format = '[$symbol$state]($style) '
symbol = " "
pure_msg = "λ"
impure_msg = "⎔"
[nodejs]
symbol = " "
[package]
symbol = " "
[php]
symbol = " "
[python]
symbol = " "
[ruby]
symbol = " "
[rust]
symbol = " "
[status]
disabled = false
+80
View File
@@ -0,0 +1,80 @@
!! Colors
#define blk #1F2430
#define bblk #F28779
#define red #A6CC70
#define bred #FFCC66
#define grn #5CCFE6
#define bgrn #F29E74
#define ylw #77A8D9
#define bylw #5C6773
#define blu #707A8C
#define bblu #F27983
#define mag #BAE67E
#define bmag #FFD580
#define cyn #73D0FF
#define bcyn #FFA759
#define wht #95E6CB
#define bwht #CBCCC6
#define bg blk
#define fg wht
*.foreground: fg
*.background: bg
*.cursorColor: mag
*.color0: blk
*.color8: bblk
*.color1: red
*.color9: bred
*.color2: grn
*.color10: bgrn
*.color3: ylw
*.color11: bylw
*.color4: blu
*.color12: bblu
*.color5: mag
*.color13: bmag
*.color6: cyn
*.color14: bcyn
*.color7: wht
*.color15: bwht
! greys
*.color234: #1E2029
*.color235: #282a36
*.color236: #373844
*.color237: #44475a
*.color239: #565761
*.color240: #6272a4
*.color241: #b6b6b2
!! general
st.scratch.font: JetBrainsMono:pixelsize=16
!! xst
st.font: JetBrainsMono:pixelsize=12
st.borderpx: 10
!! urxvt
URxvt*depth: 32
URxvt*.background: blk
URxvt*.borderless: 1
URxvt*.buffered: true
URxvt*.cursorBlink: true
URxvt*.font: xft:Fira Code:pixelsize=12
URxvt*.internalBorder: 10
URxvt*.letterSpace: 0
URxvt*.lineSpace: 0
URxvt*.loginShell: false
URxvt*.matcher.button: 1
URxvt*.matcher.rend.0: Uline Bold fg5
URxvt*.saveLines: 5000
URxvt*.scrollBar: false
URxvt*.underlineColor: grey
URxvt.clipboard.autocopy: true
URxvt.iso14755: false
URxvt.iso14755_52: false
URxvt.perl-ext-common: default,matcher
+44
View File
@@ -0,0 +1,44 @@
!
! Generated with :
! XRDB2Xreources.py
!
*.foreground: #1F2430
*.background: #0f1419
*.cursorColor: #f29718
!
! Black
*.color0: #000000
*.color8: #323232
!
! Red
*.color1: #ff3333
*.color9: #ff6565
!
! Green
*.color2: #b8cc52
*.color10: #eafe84
!
! Yellow
*.color3: #e7c547
*.color11: #fff779
!
! Blue
*.color4: #36a3d9
*.color12: #68d5ff
!
! Magenta
*.color5: #f07178
*.color13: #ffa3aa
!
! Cyan
*.color6: #95e6cb
*.color14: #c7fffd
!
! White
*.color7: #ffffff
*.color15: #ffffff
!
! Bold, Italic, Underline
*.colorBD: #e6e1cf
!*.colorIT:
!*.colorUL:
@@ -0,0 +1,23 @@
background #0A0E14
foreground #B3B1AD
cursor #E6B450
selection_background #273747
color0 #000000
color8 #4D5566
color1 #FF3333
color9 #D96C75
color2 #C2D94C
color10 #91B362
color3 #FF8F40
color11 #F29668
color4 #59C2FF
color12 #6994BF
color5 #D4BFFF
color13 #A37ACC
color6 #95E6CB
color14 #4CBF99
color7 #ffffff
color15 #F0F0F0
selection_foreground #B3B1AD
+25
View File
@@ -0,0 +1,25 @@
#: This is a port of ayu Mirage color scheme
#: based on :
#: https://github.com/ayu-theme/ayu-colors
background #1F2430
foreground #CBCCC6
cursor #FFCC66
selection_background #33415E
color0 #000000
color8 #4D5566
color1 #FF3333
color9 #F27983
color2 #BAE67E
color10 #A6CC70
color3 #FFA759
color11 #F29E74
color4 #73D0FF
color12 #77A8D9
color5 #D4BFFF
color13 #A37ACC
color6 #95E6CB
color14 #4CBF99
color7 #ffffff
color15 #F0F0F0
selection_foreground #CBCCC6
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

+11
View File
@@ -0,0 +1,11 @@
#! /usr/bin/env bash
connect() {
xrandr --output HDMI-2 --same-as eDP-1
}
disconnect() {
xrandr --output HDMI-2 --off
}
xrandr | grep "HDMI-2 connected" &>>/dev/null && connect || disconnect
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
URL="$(xclip -selection clipboard -o)"
mpv $URL
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Prompts for a pass entry, then for a specific field. Similar to passmenu, but
# uses rofi, and can resume from a previous session.
#
# Example: passmenu [RESUME]
ROFI_CMD='rofi -dmenu -theme theme/passmenu.rasi'
MSG_CMD='notify-send'
set -e
shopt -s nullglob globstar
for prog in xclip pass; do
if ! command -v "$prog" >/dev/null; then
>&2 echo "$prog not installed, aborting"
exit 1
fi
done
if [[ $1 == -r ]]; then
resume=1; shift
fi
url=
# Get qutebrowser's current url
win=$(xdotool getactivewindow)
if [[ -n $win ]]; then
winname=$(xdotool getwindowname $win)
if [[ $winname =~ " - Mozilla Firefox$" ]]; then
url=${winname% - Mozilla*}
url=${url##* - }
while (( ${#url//[^.]/} > 1 )); do
url=${url#*.}
done
fi
fi
LAST_ENTRY_FILE=/tmp/_upm
if [[ -n $resume && -f $LAST_ENTRY_FILE ]]; then
entry="$(<$LAST_ENTRY_FILE)"
else
prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files=( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )
entry=$(printf "%s\n" "${password_files[@]}" | $ROFI_CMD -p "..." -filter "$url")
fi
if [[ -z $entry ]]; then
$MSG_CMD "Error!" "Failed to select $entry"
exit 1
fi
echo "$entry" >/tmp/_upm
secrets="$(pass show "$entry")"
if [[ -n $secrets ]]; then
fields=$(awk -F': ' 'NR>1 && !/^otpauth:/ {print $1}' <<<"$secrets")
field=$(printf "password\n%s\notp\n" "${fields[@]}" | $ROFI_CMD -p "$entry")
case $field in
password) pass -c "$entry" ;;
otp) printf "%s" "$(pass otp -c "$entry")" ;;
*) printf "%s" "$(awk -v "key=$field:" '$1 == key {print $2}' <<<"$secrets")" | xclip -selection clipboard -in ;;
esac
$MSG_CMD "Success!" "Copied <b>$entry/$field</b> to clipboard for 45s"
else
$MSG_CMD "Error!" "Failed to retrieve $entry"
exit 2
fi
+31
View File
@@ -0,0 +1,31 @@
#!/usr/bin/env sh
rofi_command="rofi -theme theme/powermenu.rasi"
### Options ###
power_off="\tShutdown"
reboot="\tReboot"
lock="\tLock"
suspend="鈴\tSleep"
log_out="\tLogout"
# Variable passed to rofi
options="$power_off\n$reboot\n$lock\n$suspend\n$log_out"
case "$(echo -e "$options" | $rofi_command -dmenu)" in
" Shutdown")
systemctl poweroff
;;
" Reboot")
systemctl reboot
;;
" Lock")
dm-tool lock
;;
"鈴 Sleep")
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
systemctl suspend
;;
" Logout")
bspc quit
;;
esac
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
timer=5
# Options
select="麗"
window="类"
screen=""
delay=""
cancel=""
# Variable passed to rofi
options="$select\n$window\n$screen\n$delay\n$cancel"
rofi_command="rofi -theme theme/screenshotmenu.rasi"
setFilename() {
directory="/tmp/"
filename="IMG_$(date +%Y%m%d_%H%M%S).jpg"
filepath=$directory$filename
}
notify() {
dunstify "Screenshot saved and copied to clipboard" -i accessories-screenshot
}
chosen="$(echo -e "$options" | $rofi_command -dmenu)"
case $chosen in
$select)
setFilename
maim -Buosd 0.25 \
| tee $filepath | xclip -selection c -t image/png
notify
;;
$window)
setFilename
maim -Buod 0.25 -i $(xdotool getactivewindow) \
| tee $filepath | xclip -selection c -t image/png
notify
;;
$screen)
setFilename
maim -Buod 0.25 \
| tee $filepath | xclip -selection c -t image/png
notify
;;
$delay)
setFilename
maim -Buod $timer \
| tee $filepath | xclip -selection c -t image/png
notify
;;
esac
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env bash
# case $HOSTNAME in
# kuro) export LAN=eno1 ;;
# shiro) export LAN=wlp3s0 ;;
# esac
export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1)
export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) )
MONITOR=${MONITOR:-${MONITORS[0]}}
# Only have workspaces for primary monitor
bspc monitor $MONITOR -d {1,2,3,4,5}
bspc config remove_disabled_monitors true
bspc config remove_unplugged_monitors true
bspc config borderless_monocle true
bspc config gapless_monocle true
bspc config border_width 1
bspc config window_gap 4
bspc config normal_border_color "#181a23"
bspc config active_border_color "#181a23"
bspc config focused_border_color "#bd93f9"
bspc config presel_feedback_color "#bd93f9"
# Extra padding for polybar
bspc config -m primary top_padding 34
bspc config -m primary bottom_padding 0
# Rules
bspc rule -r '*'
bspc rule -a Pinentry state=floating center=on
bspc rule -a Emacs split_ratio=0.28 state=tiled
bspc rule -a Firefox split_ratio=0.32
bspc rule -a feh state=fullscreen
bspc rule -a 'Emacs:org*' state=floating
bspc rule -a 'Emacs:scratch' state=floating
bspc rule -a 'Emacs:emacs-everywhere' state=floating sticky=on
bspc rule -a '*:scratch' state=floating sticky=on center=on border=off rectangle=1000x800+0+0
# polybar
for file in $XDG_CONFIG_HOME/bspwm/rc.d/*; do
source "$file"
done
+151
View File
@@ -0,0 +1,151 @@
{ pkgs, config, lib, ... }:
let
dracula-gtk = pkgs.fetchFromGitHub {
owner = "dracula";
repo = "gtk";
rev = "502f212d83bc67e8f0499574546b99ec6c8e16f9";
sha256 = "1wx9nzq7cqyvpaq4j60bs8g7gh4jk8qg4016yi4c331l4iw1ymsa";
};
in
{
home.pointerCursor = {
x11.enable = true;
package = pkgs.capitaine-cursors;
name = "capitaine-cursors";
};
# Install themes
home.packages = with pkgs; [
ayu-theme-gtk
dracula-theme
capitaine-cursors
paper-icon-theme
papirus-icon-theme
libsForQt5.qtstyleplugin-kvantum
qt5ct
gtk-engine-murrine
gtk_engines
maim
kitty
libreoffice
inotify-tools
];
xresources.properties = {
"*.foreground" = "#95E6CB";
"*.background" = "#1F2430";
"*.cursorColor" = "#BAE67E";
# Black
"*.color0" = "#1F2430";
"*.color8" = "#F28779";
# Red
"*.color1" = "#A6CC70";
"*.color9" = "#FFCC66";
# Green
"*.color2" = "#5CCFE6";
"*.color10" = "#F29E74";
# Yellow
"*.color3" = "#77A8D9";
"*.color11" = "#5C6773";
# Blue
"*.color4" = "#707A8C";
"*.color12" = "#F27983";
# Magenta
"*.color5" = "#BAE67E";
"*.color13" = "#FFD580";
# Cyan
"*.color6" = "#73D0FF";
"*.color14" = "#FFA759";
# White
"*.color7" = "#95E6CB";
"*.color15" = "#CBCCC6";
# Bold, Italic, Underline
"*.colorBD" = "#e6e1cf";
};
# Move required config files around
xdg.enable = true; # This doesn't seem to do anything so we have below
xdg.configHome = "/home/anish/.config"; # TODO bad hardcode
xdg.configFile = {
"Kvantum/Dracula/Dracula.kvconfig".source = "${dracula-gtk}/kde/kvantum/Dracula-purple-solid/Dracula-purple-solid.kvconfig";
"Kvantum/Dracula/Dracula.svg".source = "${dracula-gtk}/kde/kvantum/Dracula-purple-solid/Dracula-purple-solid.svg";
"Kvantum/kvantum.kvconfig".text = "[General]\ntheme=Dracula";
};
home.file = {
".config/bspwm/rc.d/polybar".source = ./run.sh;
".config/bspwm/bspwmrc".source = ./bspwmrc;
".config/sxhkdrc".source = ./sxhkdrc;
".config/rofi/theme" = {
source = ./rofi;
recursive = true;
};
".config/polybar" = {
source = ./polybar;
recursive = true;
};
".config/dunst/dunstrc".source = ./dunstrc;
".config/kitty/kitty.conf".source = ./kitty.conf;
".config/kitty/ayu.conf".source = ./ayu-kitty.conf;
".config/zathura/zathurarc".source = ./zathurarc;
".background-image".source = ./background.jpg;
# gtk3 theme
".config/gtk-3.0/settings.ini".text = ''
[Settings]
gtk-theme-name=Dracula
gtk-icon-theme-name=Paper
gtk-cursor-theme-name=Capitaine Cursors - White
gtk-fallback-icon-theme=gnome
gtk-application-prefer-dark-theme=true
gtk-xft-hinting=1
gtk-xft-hintstyle=hintfull
gtk-xft-rgba=none
'';
# GTK2 global theme (widget and icon theme)
".config/gtk-2.0/gtkrc".text = ''
gtk-theme-name=Ayu-Mirage
gtk-icon-theme-name=Capitaine Cursors - White
gtk-font-name="Sans 10"
'';
# TODO hardcoded
".local/bin/passmenu".source = ./bin/passmenu;
".local/bin/powermenu".source = ./bin/powermenu;
".local/bin/screenshot".source = ./bin/screenshot;
".local/bin/mpv-ify".source = ./bin/mpv-ify;
".config/eww/eww.yuck".source = ./eww/eww.yuck;
".config/eww/eww.scss".source = ./eww/eww.scss;
".config/eww/widgets.yuck".source = ./eww/widgets.yuck;
# ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh;
};
qt = {
enable = true;
platformTheme = "gtk";
style = { name = "qt5ct-style"; };
};
# Compositor
services.picom = {
enable = true;
fade = true;
fadeDelta = 1;
fadeSteps = [ "0.01" "0.022" ];
shadow = true;
shadowOffsets = [ (-10) (-10) ];
shadowOpacity = "0.22";
# activeOpacity = "1.00";
# inactiveOpacity = "0.92";
extraOptions = ''
shadow-radius = 12;
# blur-background = true;
# blur-background-frame = true;
# blur-background-fixed = true;
blur-kern = "7x7box";
blur-strength = 320;
corner-radius = 3
'';
};
programs.autorandr.enable = true;
services.udiskie.automount = true;
services.mpris-proxy.enable = true; # bluetooth media control
}
+49
View File
@@ -0,0 +1,49 @@
[global]
alignment = left
bounce_freq = 0
browser = firefox -new-tab
corner_radius = 2
dmenu = rofi -dmenu -p dunst:
follow = none
font = Fira Sans 11
format = "<b>%s</b>\n%b"
frame_color = "#1a1c25"
frame_width = 1
# geometry [{width}]x{height}][+/-{x}+/-{y}]
geometry = "440x15-26+26"
history_length = 20
horizontal_padding = 16
icon_position = right
idle_threshold = 120
ignore_newline = no
indicate_hidden = yes
line_height = 0
markup = full
max_icon_size = 64
monitor = 0
padding = 20
separator_color = auto
separator_height = 4
show_age_threshold = 60
show_indicators = yes
shrink = no
sort = yes
startup_notification = false
sticky_history = yes
transparency = 5
word_wrap = yes
[urgency_low]
background = "#1E2029"
foreground = "#bbc2cf"
timeout = 8
[urgency_normal]
background = "#2a2d39"
foreground = "#bbc2cf"
timeout = 14
[urgency_critical]
background = "#cc6666"
foreground = "#1E2029"
timeout = 0
+50
View File
@@ -0,0 +1,50 @@
* {
all: unset;
color: #cdd6f4;
}
/* Calendar */
.cal-box {
background-color: #181825;
border-radius: 8px;
font-family: JetBrainsMono Nerd Font;
font-size: 1.2em;
.cal-inner-box {
padding: 1rem 1rem .3rem 1rem;
.cal {
&.highlight {
padding: 10rem;
}
padding: .8rem .25rem 0rem;
margin-left: 10px;
}
}
}
calendar:selected {
color: #9ece6a;
}
calendar.header {
color: #ad8ee6;
font-weight: bold;
}
calendar.button {
color: #449dab;
}
calendar.highlight {
color: #7aa2f7;
font-weight: bold;
}
calendar:indeterminate {
color: #8C8C8C;
}
+13
View File
@@ -0,0 +1,13 @@
; includes:
;widgets
(include "widgets.yuck")
;; Calendar Windows ;;
(defwindow calendar
:geometry (geometry :x "-19px"
:y "50px"
:width "270px"
:height "60px"
:anchor "top right")
(cal))
+20
View File
@@ -0,0 +1,20 @@
; widgets
(defpoll time0 :interval "10s" "date '+%H':%M")
(defpoll date :interval "10s" "date '+%b %d'")
;; Calendar Widgets ;;
(defwidget cal []
(box :class "cal-box"
:orientation "v"
(box :class "cal-inner-box"
(calendar :class "cal"
:day calendar_day
:month calendar_month
:year calendar_year))))
(defpoll calendar_day :interval "10h"
"date '+%d'")
(defpoll calendar_month :interval "10h"
"calendar")
(defpoll calendar_year :interval "10h"
"date '+%Y'")
+7
View File
@@ -0,0 +1,7 @@
include ayu.conf
font_family Hermit
bold_font auto
italic_font auto
bold_italic_font auto
open_url_with default
mouse_map left click ungrabbed mouse_click_url_or_select
+385
View File
@@ -0,0 +1,385 @@
[colors]
black = ${xrdb:color0}
bblack = ${xrdb:color8}
red = ${xrdb:color1}
bred = ${xrdb:color9}
green = ${xrdb:color2}
bgreen = ${xrdb:color10}
yellow = ${xrdb:color3}
byellow = ${xrdb:color11}
blue = ${xrdb:color4}
bblue = ${xrdb:color12}
magenta = ${xrdb:color5}
bmagenta = ${xrdb:color13}
cyan = ${xrdb:color6}
bcyan = ${xrdb:color14}
white = ${xrdb:color7}
bwhite = ${xrdb:color15}
bg = ${xrdb:background}
fg = ${colors.magenta}
bg-alt = #1E2029
fg-alt = #373844
bg-dark = #181a23
alert = ${colors.yellow}
accent = #604c7e
[global/wm]
margin-top = 0
margin-bottom = 34
[bar/main]
monitor = ${env:MONITOR}
monitor-strict = true
enable-ipc = true
wm-restack = bspwm
# REQUIRED to move the window with hideit.sh
override-redirect = true
fixed-center = true
background = ${colors.bg}
foreground = ${colors.fg}
width = 100%
height = 34
offset-x = 0
offset-y = 0
# bottom = true
overline-size = 0
overline-color = #f00
underline-size = 0
underline-color = #00f
border-bottom-size = 0
border-top-size = 1
border-color = ${colors.bg-dark}
padding-left = 2
padding-right = 2
module-margin-left = 0
module-margin-right = 0
font-0 = "Fira Code:pixelsize=9;2"
font-1 = "Wuncon Siji:pixelsize=12;2"
font-2 = "Siji:pixelsize=10;2"
; modules-left = volume pad cpu memory pad pkg mail
modules-left = pulseaudio pad cpu memory pad fs
modules-center = bspwm
modules-right = syncthing redshift wlan pad network-up pad network-down pad battery pad date
;tray-position = center
;tray-padding = 2
;tray-transparent = true
;tray-background = #0063ff
[module/bspwm]
type = internal/bspwm
pin-workspaces = true
enable-click = true
# ws-icon-0 = 1;
# ws-icon-1 = 2;
# ws-icon-2 = 3;
# ws-icon-3 = 4;
# ws-icon-4 = 5;
# ws-icon-5 = 6;
ws-icon-default = 
format = <label-state> <label-mode>
label-padding = 1
label-focused = %icon%
label-focused-background = ${colors.bg-dark}
label-focused-foreground = ${colors.fg}
# label-focused-underline = ${colors.magenta}
; label-focused-foreground = ${xrdb:color2}
label-focused-padding = 1
label-occupied = %icon%
label-occupied-foreground = ${colors.accent}
label-occupied-padding = 1
; label-urgent = %icon%
label-urgent-foreground = ${colors.alert}
; label-urgent-background = ${colors.alert}
label-urgent-padding = 1
label-empty = %icon%
label-empty-foreground = ${colors.fg-alt}
label-empty-padding = 1
[module/date]
type = internal/date
interval = 5
label = %date% %time%
date = %A, %h %d
date-alt = %Y-%m-%d
time = %I:%M %p
time-alt = %H:%M:%S
format-prefix = ""
format-prefix-padding = 1
; format-prefix-background = ${colors.bg-alt}
format-prefix-foreground = ${colors.accent}
; format-underline = ${xrdb:color4}
[module/fs]
type = internal/fs
mount-0 = /
mount-1 = /mnt/projects ; for desktops
mount-2 = /home ; for laptop
interval = 30
; Available tags:
; <label-mounted> (default)
; <bar-free>
; <bar-used>
; <ramp-capacity>
format-mounted = "<bar-used>"
format-mounted-foreground = ${colors.accent}
; Available tokens:
; %mountpoint%
; %type%
; %fsname%
; %percentage_free%
; %percentage_used%
; %total%
; %free%
; %used%
; Default: %mountpoint% %percentage_free%%
; Available tags:
; <label-unmounted> (default)
format-unmounted =
label-unmounted =
label-unmounted-foreground = ${colors.fg-alt}
bar-used-indicator =
bar-used-width = 8
bar-used-foreground-0 = ${colors.fg}
bar-used-foreground-1 = ${colors.fg}
bar-used-foreground-2 = ${colors.yellow}
bar-used-foreground-3 = ${colors.alert}
bar-used-foreground-4 = ${colors.alert}
bar-used-fill = |
bar-used-empty = ¦
bar-used-empty-foreground = ${colors.fg-alt}
[module/xwindow]
type = internal/xwindow
label = %title:0:80:...%
label-padding-left = 2
; [module/mpd]
; type = internal/mpd
; host = /home/hlissner/.config/mpd/mpd.sock
;
; format-online = <label-song> <toggle>
; format-padding = 5
;
; label-song-maxlen = 45
; label-song-ellipsis = true
;
; icon-prev = 
; icon-seekb = 
; icon-stop = 
; icon-play = 
; icon-pause = 
; icon-next = 
; icon-seekf = 
;
; icon-random = 
; icon-repeat = 
;
; toggle-on-foreground = ${colors.fg}
; toggle-off-foreground = #66
[module/cpu]
type = internal/cpu
interval = 2
format = <bar-load>
format-prefix = ""
format-foreground = ${colors.accent}
; format-underline = #f90000
; label = %percentage%%
format-padding = 1
bar-load-indicator =
bar-load-width = 8
bar-load-foreground-0 = ${colors.fg}
bar-load-foreground-1 = ${colors.fg}
bar-load-foreground-2 = ${colors.yellow}
bar-load-foreground-3 = ${colors.alert}
bar-load-foreground-4 = ${colors.alert}
bar-load-fill = |
bar-load-empty = ¦
bar-load-empty-foreground = ${colors.fg-alt}
[module/memory]
type = internal/memory
interval = 3
format = <bar-used>
format-prefix = ""
format-prefix-foreground = ${colors.accent}
; format-underline = #4bffdc
; label = %percentage_used%%
format-padding-left = 1
; Only applies if <bar-used> is used
bar-used-indicator =
bar-used-width = 8
bar-used-foreground-0 = ${colors.fg}
bar-used-foreground-1 = ${colors.fg}
bar-used-foreground-2 = ${colors.yellow}
bar-used-foreground-3 = ${colors.alert}
bar-used-foreground-4 = ${colors.alert}
bar-used-fill = |
bar-used-empty = ¦
bar-used-empty-foreground = ${colors.fg-alt}
[module/wlan]
type = internal/network
interface = ${env:WLP:wlp3s0}
interval = 3.0
format-connected = <ramp-signal>
format-disconnected =
format-disconnected-foreground =
; label-connected =
; label-disconnected = !
; label-disconnected-foreground = ${colors.red}
ramp-signal-0 = 
ramp-signal-0-foreground = ${colors.yellow}
ramp-signal-1 = 
ramp-signal-1-foreground = ${colors.yellow}
ramp-signal-2 = 
ramp-signal-2-foreground = ${colors.yellow}
ramp-signal-3 = 
ramp-signal-3-foreground = ${colors.accent}
ramp-signal-4 = 
ramp-signal-4-foreground = ${colors.fg}
[module/network-up]
type = internal/network
interface = ${env:LAN:eno1}
interval = 4.0
label-connected = "%upspeed%"
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.accent}
format-connected-foreground = ${colors.fg}
format-connected-background =
format-connected-underline =
format-disconnected-prefix = " "
format-disconnected-prefix-foreground = ${colors.alert}
format-disconnected-foreground = ${colors.alert}
[module/network-down]
type = internal/network
interface = ${env:LAN:eno1}
interval = 4.0
label-connected = "%downspeed%"
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.accent}
format-connected-foreground = ${colors.fg}
format-connected-background =
format-connected-underline =
format-disconnected-prefix = " "
format-disconnected-prefix-foreground = ${colors.alert}
format-disconnected-foreground = ${colors.alert}
[module/pulseaudio]
type = internal/pulseaudio
; format-volume = <label-volume> <bar-volume>
format-volume = <ramp-volume> <bar-volume>
; label-volume = " "
label-volume-foreground = ${colors.accent}
; format-muted-prefix = " "
format-muted-foreground = ${colors.alert}
label-muted = 
bar-volume-width = 8
# bar-volume-foreground-0 = ${colors.magenta}
# bar-volume-foreground-1 = ${colors.magenta}
# bar-volume-foreground-2 = ${colors.magenta}
# bar-volume-foreground-3 = ${colors.magenta}
# bar-volume-foreground-4 = ${colors.magenta}
# bar-volume-foreground-5 = ${colors.magenta}
# bar-volume-foreground-6 = ${colors.magenta}
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 1
bar-volume-indicator-foreground = #ff
bar-volume-fill = ─
bar-volume-fill-font = 1
bar-volume-empty = ─
bar-volume-empty-font = 1
bar-volume-empty-foreground = ${colors.fg-alt}
; Only applies if <ramp-volume> is used
ramp-volume-0 = 
ramp-volume-1 = 
ramp-volume-2 = 
[module/battery]
type = internal/battery
battery = BAT2
adapter = ADP1
full-at = 98
format-charging = <animation-charging> <label-charging>
format-charging-underline = #ffb52a
format-discharging = <ramp-capacity> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}
format-full-prefix = " "
format-full-prefix-foreground = ${colors.fg-alt}
format-full-underline = ${self.format-charging-underline}
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-0-foreground = ${colors.red}
ramp-capacity-1-foreground = #575864
ramp-capacity-2-foreground = ${colors.fg-alt}
animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-framerate = 1000
animation-charging-foreground = ${colors.fg}
;=====================================================
; Custom scripts
;=====================================================
[module/pad]
type = custom/text
content = " "
content-foreground = ${colors.fg-alt}
[module/redshift]
type = custom/script
exec = ~/.config/polybar/modules/redshift
exec-if = pgrep -x redshift
interval = 60
format-padding = 1
[module/syncthing]
type = custom/script
exec = echo 1
exec-if = systemctl is-active syncthing
format = ""
format-foreground = ${colors.fg}
interval = 30
; vim:ft=dosini
+411
View File
@@ -0,0 +1,411 @@
[colors]
yellow = #ffd580
orange = #fe8019
blue = #73d0ff
green = #bae67e
red = #ff3333
bg = #1f2430
fg = #bfbab0
icons = #bae67e
cyan = #95e6cb
text = ${xrdb:color2}
unfocus = ${xrdb:color1}
accent = #604c7e
sky = #73d0ff
mauve = #bae67e
alert = ${colors.yellow}
bg-alt = #1E2029
fg-alt = #373844
bg-dark = #181a23
[bar/mybar]
; monitor = VGA-1
override-redirect = false
; Put the bar at the bottom of the screen
bottom = false
; Prefer fixed center position for the `modules-center` block
fixed-center = true
width = 100%
height = 34
offset-x =
offset-y =
; Background ARGB color (e.g. #f00, #ff992a, #ddff1023)
background = ${colors.bg}
; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023)
foreground = ${colors.fg}
line-size = 0
line-color = #fff
; Number of spaces to add at the beginning/end of the bar
; Individual side values can be defined using:
; padding-{left,right}
padding-right = 1
padding-left = 0
; Number of spaces to add before/after each module
; Individual side values can be defined using:
; module-margin-{left,right}
module-margin = 0
margin-bottom = 34
font-0 = "Iosevka Term:pixelsize=13;4"
font-1 = "Iosevka Term:pixelsize=6;1"
font-2 = "Fira Code:pixelsize=13;2"
font-3 = "Siji:pixelsize=8;2"
; Add module mpd for artist - title info
modules-left = bspwm sps volume
modules-center = title
modules-right = wireless-network sps battery sps memory sps cpu sps date
; The separator will be inserted between the output of each module
separator =
; This value is used to add extra spacing between elements
; @deprecated: This parameter will be removed in an upcoming version
spacing = 0
; Opacity value between 0.0 and 1.0 used on fade in/out
dim-value = 1.0
wm-name = bspwm
tray-position = right
; If true, the bar will not shift its
; contents when the tray changes
tray-detached = false
; Tray icon max size
tray-maxsize = 16
tray-background = ${colors.bg}
;offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
tray-offset-x = 0
tray-offset-y = 0
; Pad the sides of each tray icon
tray-padding = 0
; Scale factor for tray clients
tray-scale = 1.0
wm-restack = bspwm
dpi-x = 133
dpi-y = 133
enable-ipc = false
; Fallback click handlers that will be called if
; there's no matching module handler found.
[module/bspwm]
type = internal/bspwm
pin-workspaces = true
enable-click = true
ws-icon-0 = 1;%{T1}%{T-}
ws-icon-1 = 2;%{T1}%{T-}
ws-icon-2 = 3;%{T1}%{T-}
ws-icon-3 = 4;%{T1}%{T-}
ws-icon-4 = 5;%{T1}%{T-}
ws-icon-default = 
; fuzzy-match = true
format = <label-state> <label-mode>
label-padding = 1
label-foreground = ${colors.green}
label-focused = %icon%
label-focused-background = ${colors.yellow}
label-focused-foreground = ${colors.bg}
# label-focused-underline = ${colors.magenta}
; label-focused-foreground = ${xrdb:color2}
label-focused-padding = 1
label-occupied = %icon%
label-occupied-foreground = ${colors.accent}
label-occupied-padding = 1
label-urgent = %icon%
label-urgent-foreground = ${colors.alert}
; label-urgent-background = ${colors.alert}
label-urgent-padding = 1
; label-urgent-font = 3
label-empty = %icon%
label-empty-foreground = ${colors.fg-alt}
label-empty-padding = 1
[module/date]
type = internal/date
; Seconds to sleep between updates
interval = 1.0
; See "http://en.cppreference.com/w/cpp/io/manip/put_time" for details on how to format the date string
; NOTE: if you want to use syntax tags here you need to use %%{...}
date = %{T1}%{T-}%{T2} %d/%a%{T-}
; Optional time format
time = %{T2} %H:%M%{T-}
; if `date-alt` or `time-alt` is defined, clicking
; the module will toggle between formats
date-alt = %{T1}%{T-}%{T2} %a, %d %b %y%{T-}
time-alt = %{T2} %H:%M:%S%{T-}
label = %date%%time%
label-font = 0
label-foreground = ${colors.green}
[module/wireless-network]
type = internal/network
interface = wlp3s0
label-connected = %essid%
label-connected-font = 2
format-connected = <ramp-signal><label-connected>
label-connected-foreground = #82b414
format-disconnected = <label-disconnected>
label-disconnected = "睊"
label-disconnected-foreground = #f92672
ramp-signal-foreground = #82b414
ramp-signal-0 = " "
ramp-signal-1 = " "
ramp-signal-2 = " "
ramp-signal-3 = " "
ramp-signal-4 = " "
ramp-signal-5 = " "
[module/cpu]
type = internal/cpu
; Seconds to sleep between updates
; Default: 1
interval = 0.5
label = %{T1}%{T-}%{T2} %percentage:2%%%{T-}
label-foreground = ${colors.cyan}
[module/memory]
type = internal/memory
; Seconds to sleep between updates
; Default: 1
interval = 0.5
format = <label>
; Available tokens:
; %percentage_used% (default)
; %percentage_free%
; %gb_used%
; %gb_free%
; %gb_total%
; %mb_used%
; %mb_free%
; %mb_total%
; %percentage_swap_used%
; %percentage_swap_free%
; %mb_swap_total%
; %mb_swap_free%
; %mb_swap_used%
; %gb_swap_total%
; %gb_swap_free%
; %gb_swap_used%
label = %{T1}%{T-}%{T2} %gb_used%%{T-}
label-foreground = ${colors.cyan}
[module/mpd]
type = internal/mpd
host = 0.0.0.0
port = 6600
interval = 2
format-online = <label-song>
format-online-background = ${colors.bg}
format-online-foreground = ${colors.yellow}
#format-online-padding = 20
label-song = %{T2}%artist% - %title%%{T-}
label-song-maxlen = 55
label-song-ellipsis = true
label-offline = "MPD is offline"
[module/mpd_i]
type = internal/mpd
interval = 2
format-online = <icon-prev> <toggle> <icon-next>
format-online-background = ${colors.bg}
format-online-foreground = ${colors.yellow}
#format-online-padding = 2
label-offline = "MPD is offline"
; Only applies if <icon-X> is used
icon-play = %{T1}奈%{T-}
icon-pause = %{T1}%{T-}
icon-stop = %{T1}%{T-}
icon-prev = %{T1}ﭣ%{T-}
icon-next = %{T1}ﭡ%{T-}
;An empty module used to add 1 unit spacings whenever needed
[module/sps]
type = custom/text
content = " "
content-padding = 0
[module/network]
type = internal/network
interface = wlp3s0
;enp0s29u1u2
interval = 1.0
label-connected = "%{T1}龍%{T-}%{T2} %downspeed% | %upspeed%%{T-}"
label-disconnected = "%{T2}0/0%{T-}"
label-connected-background = ${colors.bg}
label-connected-foreground = ${colors.blue}
label-disconnected-foreground = ${colors.red}
[module/title]
type = internal/xwindow
; Available tags:
; <label> (default)
format = <label>
format-background = ${colors.bg}
format-foreground = ${colors.green}
format-padding = 4
; Available tokens:
; %title%
; Default: %title%
label = "%{T1}类%{T-}%{T2} %title%%{T-}"
label-maxlen = 65
; Used instead of label when there is no window title
; Available tokens:
; None
label-empty =%{T2}Empty%{T-}
label-empty-foreground = #707880
[module/volume]
type = internal/pulseaudio
use-ui-max = false
interval = 5
format-volume = <ramp-volume><bar-volume>
format-muted = <label-muted>
format-muted-prefix = "  "
format-muted-prefix-font = 2
format-muted-prefix-foreground = ${colors.mauve}
label-volume = "%percentage%% "
label-muted = "Mute"
label-volume-foreground = ${colors.mauve}
label-muted-foreground = ${colors.mauve}
bar-volume-width = 8
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 2
bar-volume-indicator-foreground = ${colors.mauve}
bar-volume-fill = ─
bar-volume-fill-font = 2
bar-volume-fill-foreground = ${colors.mauve}
bar-volume-empty = ─
bar-volume-empty-font = 2
bar-volume-empty-foreground = ${colors.fg-alt}
ramp-volume-0 = "  "
ramp-volume-1 = "  "
ramp-volume-2 = "  "
ramp-volume-3 = "  "
ramp-volume-4 = "  "
ramp-volume-5 = "  "
ramp-volume-6 = "  "
ramp-volume-7 = "  "
ramp-volume-8 = "  "
ramp-volume-9 = "  "
ramp-volume-font = 1
ramp-volume-foreground = ${colors.mauve}
ramp-headphones-0 = 
ramp-headphones-1 = 
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
[module/battery]
type = internal/battery
full-at = 99
adapter = ACAD
battery = BAT0
poll-interval = 2
time-format = %H:%M
format-charging = <animation-charging><label-charging>
format-charging-prefix =
format-discharging = <ramp-capacity><label-discharging>
format-full = <label-full>
format-full-prefix = " "
format-full-prefix-font = 1
format-full-prefix-foreground = ${colors.sky}
label-charging = "%percentage%% "
label-discharging = "%percentage%% "
label-full = "%percentage%% "
label-charging-foreground = ${colors.sky}
label-discharging-foreground = ${colors.sky}
label-charging-font = 2
label-discharging-font = 2
label-full-foreground = ${colors.sky}
label-full-font = 2
ramp-capacity-0 = " "
ramp-capacity-1 = " "
ramp-capacity-2 = " "
ramp-capacity-3 = " "
ramp-capacity-4 = " "
ramp-capacity-font = 1
ramp-capacity-foreground = ${colors.sky}
animation-charging-0 = " "
animation-charging-1 = " "
animation-charging-2 = " "
animation-charging-3 = " "
animation-charging-4 = " "
animation-charging-font = 1
animation-charging-foreground = ${colors.sky}
animation-charging-framerate = 750
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+387
View File
@@ -0,0 +1,387 @@
[colors]
black = ${xrdb:color0}
bblack = ${xrdb:color8}
red = ${xrdb:color1}
bred = ${xrdb:color9}
green = ${xrdb:color2}
bgreen = ${xrdb:color10}
yellow = ${xrdb:color3}
byellow = ${xrdb:color11}
blue = ${xrdb:color4}
bblue = ${xrdb:color12}
magenta = ${xrdb:color5}
bmagenta = ${xrdb:color13}
cyan = ${xrdb:color6}
bcyan = ${xrdb:color14}
white = ${xrdb:color7}
bwhite = ${xrdb:color15}
bg = ${xrdb:background}
fg = ${colors.magenta}
bg-alt = #1E2029
fg-alt = #373844
bg-dark = #181a23
alert = ${colors.yellow}
accent = #604c7e
[global/wm]
margin-top = 0
margin-bottom = 34
[bar/main]
monitor = ${env:MONITOR}
monitor-strict = true
enable-ipc = true
wm-restack = bspwm
# REQUIRED to move the window with hideit.sh
override-redirect = true
fixed-center = true
background = ${colors.bg}
foreground = ${colors.fg}
width = 100%
height = 34
offset-x = 0
offset-y = 0
# bottom = true
overline-size = 0
overline-color = #f00
underline-size = 0
underline-color = #00f
border-bottom-size = 0
border-top-size = 1
border-color = ${colors.bg-dark}
padding-left = 2
padding-right = 2
module-margin-left = 0
module-margin-right = 0
font-0 = "Fira Code:pixelsize=13;2"
font-1 = "Wuncon Siji:pixelsize=16;2"
font-2 = "Siji:pixelsize=10;2"
; modules-left = volume pad cpu memory pad pkg mail
modules-left = pulseaudio pad cpu memory pad fs
modules-center = bspwm
modules-right = syncthing redshift wlan pad network-up pad network-down pad battery pad date
;tray-position = center
;tray-padding = 2
;tray-transparent = true
;tray-background = #0063ff
[module/bspwm]
type = internal/bspwm
pin-workspaces = true
enable-click = true
# ws-icon-0 = 1;
# ws-icon-1 = 2;
# ws-icon-2 = 3;
# ws-icon-3 = 4;
# ws-icon-4 = 5;
# ws-icon-5 = 6;
ws-icon-default = 
fuzzy-match = true
format = <label-state> <label-mode>
label-padding = 1
label-focused = %icon%
label-focused-background = ${colors.bg-dark}
label-focused-foreground = ${colors.fg}
# label-focused-underline = ${colors.magenta}
; label-focused-foreground = ${xrdb:color2}
label-focused-padding = 1
label-occupied = %icon%
label-occupied-foreground = ${colors.accent}
label-occupied-padding = 1
; label-urgent = %icon%
label-urgent-foreground = ${colors.alert}
; label-urgent-background = ${colors.alert}
label-urgent-padding = 1
label-empty = %icon%
label-empty-foreground = ${colors.fg-alt}
label-empty-padding = 1
[module/date]
type = internal/date
interval = 5
label = %date% %time%
date = %A, %h %d
date-alt = %Y-%m-%d
time = %I:%M %p
time-alt = %H:%M:%S
format-prefix = ""
format-prefix-padding = 1
; format-prefix-background = ${colors.bg-alt}
format-prefix-foreground = ${colors.accent}
; format-underline = ${xrdb:color4}
[module/fs]
type = internal/fs
mount-0 = /
# mount-1 = /mnt/projects ; for desktops
mount-2 = /home/anish
interval = 30
; Available tags:
; <label-mounted> (default)
; <bar-free>
; <bar-used>
; <ramp-capacity>
format-mounted = "<bar-used>"
format-mounted-foreground = ${colors.accent}
; Available tokens:
; %mountpoint%
; %type%
; %fsname%
; %percentage_free%
; %percentage_used%
; %total%
; %free%
; %used%
; Default: %mountpoint% %percentage_free%%
; Available tags:
; <label-unmounted> (default)
format-unmounted =
label-unmounted =
label-unmounted-foreground = ${colors.fg-alt}
bar-used-indicator =
bar-used-width = 8
bar-used-foreground-0 = ${colors.fg}
bar-used-foreground-1 = ${colors.fg}
bar-used-foreground-2 = ${colors.yellow}
bar-used-foreground-3 = ${colors.alert}
bar-used-foreground-4 = ${colors.alert}
bar-used-fill = |
bar-used-empty = ¦
bar-used-empty-foreground = ${colors.fg-alt}
[module/xwindow]
type = internal/xwindow
label = %title:0:80:...%
label-padding-left = 2
; [module/mpd]
; type = internal/mpd
; host = /home/hlissner/.config/mpd/mpd.sock
;
; format-online = <label-song> <toggle>
; format-padding = 5
;
; label-song-maxlen = 45
; label-song-ellipsis = true
;
; icon-prev = 
; icon-seekb = 
; icon-stop = 
; icon-play = 
; icon-pause = 
; icon-next = 
; icon-seekf = 
;
; icon-random = 
; icon-repeat = 
;
; toggle-on-foreground = ${colors.fg}
; toggle-off-foreground = #66
[module/cpu]
type = internal/cpu
interval = 2
format = <bar-load>
format-prefix = ""
format-foreground = ${colors.accent}
; format-underline = #f90000
; label = %percentage%%
format-padding = 1
bar-load-indicator =
bar-load-width = 8
bar-load-foreground-0 = ${colors.fg}
bar-load-foreground-1 = ${colors.fg}
bar-load-foreground-2 = ${colors.yellow}
bar-load-foreground-3 = ${colors.alert}
bar-load-foreground-4 = ${colors.alert}
bar-load-fill = |
bar-load-empty = ¦
bar-load-empty-foreground = ${colors.fg-alt}
[module/memory]
type = internal/memory
interval = 3
format = <bar-used>
format-prefix = ""
format-prefix-foreground = ${colors.accent}
; format-underline = #4bffdc
; label = %percentage_used%%
format-padding-left = 1
; Only applies if <bar-used> is used
bar-used-indicator =
bar-used-width = 8
bar-used-foreground-0 = ${colors.fg}
bar-used-foreground-1 = ${colors.fg}
bar-used-foreground-2 = ${colors.yellow}
bar-used-foreground-3 = ${colors.alert}
bar-used-foreground-4 = ${colors.alert}
bar-used-fill = |
bar-used-empty = ¦
bar-used-empty-foreground = ${colors.fg-alt}
[module/wlan]
type = internal/network
interface = ${env:WLP:wlp3s0}
interval = 3.0
format-connected = <ramp-signal>
format-disconnected =
format-disconnected-foreground =
; label-connected =
; label-disconnected = !
; label-disconnected-foreground = ${colors.red}
ramp-signal-0 = 
ramp-signal-0-foreground = ${colors.yellow}
ramp-signal-1 = 
ramp-signal-1-foreground = ${colors.yellow}
ramp-signal-2 = 
ramp-signal-2-foreground = ${colors.yellow}
ramp-signal-3 = 
ramp-signal-3-foreground = ${colors.accent}
ramp-signal-4 = 
ramp-signal-4-foreground = ${colors.fg}
[module/network-up]
type = internal/network
interface = ${env:LAN:eno1}
interval = 4.0
label-connected = "%upspeed%"
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.accent}
format-connected-foreground = ${colors.fg}
format-connected-background =
format-connected-underline =
format-disconnected-prefix = " "
format-disconnected-prefix-foreground = ${colors.alert}
format-disconnected-foreground = ${colors.alert}
[module/network-down]
type = internal/network
interface = ${env:LAN:eno1}
interval = 4.0
label-connected = "%downspeed%"
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.accent}
format-connected-foreground = ${colors.fg}
format-connected-background =
format-connected-underline =
format-disconnected-prefix = " "
format-disconnected-prefix-foreground = ${colors.alert}
format-disconnected-foreground = ${colors.alert}
[module/pulseaudio]
type = internal/pulseaudio
; format-volume = <label-volume> <bar-volume>
format-volume = <ramp-volume> <bar-volume>
; label-volume = " "
label-volume-foreground = ${colors.accent}
; format-muted-prefix = " "
format-muted-foreground = ${colors.alert}
label-muted = 
bar-volume-width = 8
# bar-volume-foreground-0 = ${colors.magenta}
# bar-volume-foreground-1 = ${colors.magenta}
# bar-volume-foreground-2 = ${colors.magenta}
# bar-volume-foreground-3 = ${colors.magenta}
# bar-volume-foreground-4 = ${colors.magenta}
# bar-volume-foreground-5 = ${colors.magenta}
# bar-volume-foreground-6 = ${colors.magenta}
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 1
bar-volume-indicator-foreground = #ff
bar-volume-fill = ─
bar-volume-fill-font = 1
bar-volume-empty = ─
bar-volume-empty-font = 1
bar-volume-empty-foreground = ${colors.fg-alt}
; Only applies if <ramp-volume> is used
ramp-volume-0 = 
ramp-volume-1 = 
ramp-volume-2 = 
[module/battery]
type = internal/battery
battery = BAT0
adapter = ADP1
full-at = 98
format-charging = <animation-charging> <label-charging>
format-charging-underline = #ffb52a
format-discharging = <ramp-capacity> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}
format-full-prefix = " "
format-full-prefix-foreground = ${colors.fg-alt}
format-full-underline = ${self.format-charging-underline}
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-0-foreground = ${colors.red}
ramp-capacity-1-foreground = #575864
ramp-capacity-2-foreground = ${colors.fg-alt}
animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-framerate = 1000
animation-charging-foreground = ${colors.fg}
;=====================================================
; Custom scripts
;=====================================================
[module/pad]
type = custom/text
content = " "
content-foreground = ${colors.fg-alt}
[module/redshift]
type = custom/script
exec = ~/.config/polybar/modules/redshift
exec-if = pgrep -x redshift
interval = 60
format-padding = 1
[module/syncthing]
type = custom/script
exec = echo 1
exec-if = systemctl is-active syncthing
format = ""
format-foreground = ${colors.fg}
interval = 30
; vim:ft=dosini
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# Specifying the icon(s) in the script
# This allows us to change its appearance conditionally
pgrep -x redshift &> /dev/null
if [[ $? -eq 0 ]]; then
temp=$(redshift -p 2>/dev/null | grep temp | cut -d' ' -f3)
temp=${temp//K/}
fi
icon=""
# OPTIONAL: Append ' ${temp}K' after $icon
if [[ -z $temp ]]; then
echo "%{F#65737E}$icon" # Greyed out (not running)
elif [[ $temp -ge 5000 ]]; then
echo "%{F#8FA1B3}$icon" # Blue
elif [[ $temp -ge 4000 ]]; then
echo "%{F#EBCB8B}$icon" # Yellow
else
echo "%{F#D08770}$icon" # Orange
fi
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
pkill -u $UID -x polybar
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
polybar main >$XDG_DATA_HOME/polybar.log 2>&1 &
echo 'Polybar launched...'
+10
View File
@@ -0,0 +1,10 @@
/* -*- mode: css; -*- */
@import "config.rasi"
textbox-icon {
str: "  ";
}
prompt {
enabled: false;
}
@@ -0,0 +1,21 @@
/* -*- mode: css; -*- */
@import "config.rasi"
window {
y-offset: 0;
children: [ listview ];
width: 500px;
}
listview {
scrollbar: false;
}
element {
padding: 30px;
background-color: @bg-light;
}
element.selected {
background-color: @accent;
text-color: @bg;
}
@@ -0,0 +1,14 @@
/* -*- mode: css; -*- */
@import "config.rasi"
listview {
columns: 1;
}
textbox-icon {
str: "  ";
}
prompt {
enabled: false;
}
+142
View File
@@ -0,0 +1,142 @@
/* -*- mode: css; -*- */
configuration {
icon-theme: "Paper";
cycle: true;
disable-history: false;
monitor: "-4";
/* Vim-esque C-j/C-k as up/down in rofi */
kb-accept-entry: "Return,Control+m,KP_Enter";
kb-row-down: "Down,Control+n,Control+j";
kb-remove-to-eol: "";
kb-row-up: "Up,Control+p,Control+k";
}
* {
bg-light: #1c1c1c;
bg-focus: #282a36;
bg-dark: #181a23;
fg-list: #bbc2cf;
on: #8BD49C;
off: #cc6666;
accent: #ffcc66;
bg: #1f2430f3;
separatorcolor: transparent;
fg: #bfbab0;
selectioncolor: #fafafa;
text-color: @foregroundcolor;
magenta: #bd93f9;
blue: #61bfff;
text-font: "Fira Sans 15";
text-mono-font: "Fira Code 13";
/* icon-font: "Hurmit Nerd Font Mono 26"; */
icon-font: "FontAwesome 20";
background-color: transparent;
text-color: @fg-list;
font: @text-font;
border-color: @bg-dark;
}
/**** Layout ****/
window {
width: 1000px;
y-offset: -150px;
anchor: north;
location: center;
border: 1px;
border-radius: 6px 6px 0 0;
children: [ inputbar, listview ];
}
listview {
lines: 12;
fixed-height: false;
/* reverse: true; */
columns: 2;
scrollbar: true;
spacing: 1px;
/* Remove strange gap between listview and inputbar */
margin: -2px 0 0;
}
/*
TODO Not supported in stable branch of rofi
@media only (max-height: 1080px) {
window {
y-offset: -30%;
}
listview {
lines: 14;
}
}
*/
scrollbar {
handle-width: 1px;
}
inputbar {
children: [ textbox-icon, prompt, entry ];
border: 0 0 0;
}
textbox-icon, prompt {
padding: 11px;
expand: false;
border: 0 1px 0 0;
margin: 0 -2px 0 0;
}
textbox-icon {
padding: 7px 4px 0;
}
entry, element {
padding: 10px 13px;
}
textbox {
padding: 24px;
margin: 20px;
}
/**** Looks ****/
scrollbar {
background-color: @bg-dark;
handle-color: @accent;
border-color: @bg-dark;
}
listview, inputbar {
background-color: @bg;
}
textbox-icon, prompt, entry {
text-color: @accent;
}
prompt, entry {
background-color: @bg;
}
textbox-icon, prompt {
background-color: #2f313d;
}
prompt {
background-color: @bg-focus;
}
textbox-icon {
font: @icon-font;
}
entry {
font: @text-font-mono;
text-color: @fg;
}
element {
background-color: @bg;
text-color: @fg;
}
element selected {
background-color: @bg-dark;
text-color: @accent;
}
@@ -0,0 +1,15 @@
/* -*- mode: css; -*- */
@import "config.rasi"
listview {
columns: 4;
}
textbox-icon {
str: "🎑";
}
prompt {
enabled: false;
}
+11
View File
@@ -0,0 +1,11 @@
/* -*- mode: css; -*- */
@import "config.rasi"
textbox-icon {
str: "  ";
}
prompt {
enabled: true;
}
+43
View File
@@ -0,0 +1,43 @@
@import "config.rasi"
* {
icon-font : "Iosevka Nerd Font Mono 24";
text-color : @fg;
background-color : @bg;
margin : 0px;
padding : 0px;
spacing : 0px;
}
window {
location : north;
children : [mainbox];
}
mainbox {
children : [listview];
}
listview {
columns : 8;
lines : 1;
}
element {
children : [element-text];
}
element-text {
font : @icon-font;
cursor : pointer;
padding : 4px;
vertical-align : 0.5;
horizontal-align : 0.5;
}
element-text selected {
text-color : @bg;
background-color : @accent;
}
+10
View File
@@ -0,0 +1,10 @@
/* -*- mode: css; -*- */
@import "config.rasi"
listview {
columns: 1;
}
textbox-icon {
str: "  ";
}
@@ -0,0 +1,23 @@
/** -*- mode: css; -*-
* This theme is intended for a 5 items wide menu on a 1920x1080 pixels resolution.
* You may have to tweak values such as the window padding if you have a different resolution.
*/
@import "appmenu.rasi"
window {
children: [ listview ];
width: 500px;
}
listview {
scrollbar: false;
}
element {
padding: 30px;
background-color: @bg;
}
element.selected {
background-color: @off;
text-color: @bg;
}
@@ -0,0 +1,22 @@
@import "appmenu.rasi"
window {
children: [ listview ];
width: 264px;
y-offset: -540px;
border-radius: 5px 5px 5px 5px;
}
listview {
scrollbar: false;
lines: 1;
columns: 6;
}
element {
background-color: @bg;
}
element.selected {
background-color: @off;
text-color: @bg;
}
@@ -0,0 +1,27 @@
/* -*- mode: css; -*- */
@import "config.rasi"
listview {
columns: 1;
}
inputbar {
width: 1100px;
}
textbox-icon {
str: "  ";
}
prompt {
enabled: false;
}
/**
* Elements are tab-delimited, which look weird in the default variable-pitch
* font, so use a monospace one.
*/
element {
font: "Fira Code 12";
}
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
pkill -u $UID -x polybar
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
polybar mybar >$XDG_DATA_HOME/polybar.log 2>&1 &
+131
View File
@@ -0,0 +1,131 @@
super + alt + Escape
bspc quit
super + {_,shift + }q
bspc node -{c,k}
super + t
bspc desktop -l next
super + apostrophe
bspc window -s last
# Attach to a detached session. If none is available create a new one, rather
# than attach to one that is already attached to elsewhere.
super + Return
kitty
ctrl + super + Return
xst -e bash -c "(tmux ls | grep -qEv 'attached|scratch' && tmux at) || tmux"
# Open a disposable, floating terminal window, for quick shell commands.
super + grave
scratch
# Open a disposable scratch buffer in a floating Emacs window, to run arbitrary
# code or quickly note something down.
super + shift + grave
emacsclient --eval "(open-scratch-frame)"
super + space
rofi -show drun -modi drun,run -show-icons -theme theme/appmenu.rasi
super + Tab
rofi -show window -show-icons -theme theme/windowmenu.rasi
super + e
rofimoji --rofi-args "-theme theme/emojimenu.rasi" --skin-tone moderate --action copy
super + p
passmenu
super + s
powermenu
super + o
screenshot
super + Escape
pkill -USR1 -x sxhkd
super + n
xkblayout-state set +1
#
##
## Toggle floating/fullscreen
super + {_,ctrl + }f
bspc node -t ~{floating,fullscreen}
super + {_,shift + }{h,j,k,l}
bspc node -{f,s} {west,south,north,east}
super + ctrl + {h,j,k,l}
bspc node -p {west,south,north,east}
## Resize by preselection
super + alt + {1-9}
$DOTFLES/bin/bspwm/presel 0.{1-9}
super + alt + {h,j,k,l}
bspc node -p {west,south,north,east}
super + alt + Return
$DOTFILES/bin/bspwm/subtract-presel
super + alt + Delete
bspc node -p cancel
super + {_,shift +}{1-9,0}
bspc {desktop -f,node -d} {1-9,10};
# expand a window by moving one of its side outward
super + {Left,Down,Up,Right}
bspc node -z {left -40 0,bottom 0 40,top 0 -40,right 40 0}
# contract a window by moving one of its side inward
super + ctrl + {Left,Down,Up,Right}
bspc node -z {right -40 0,top 0 40,bottom 0 -40,left 40 0}
# move a floating window
super + shift + {Left,Down,Up,Right}
bspc node -v {-40 0,0 40,0 -40,40 0}
#
## Media keys
super + u
mpv-ify
# screenshot region
Print
scrcap
# screencast region to mp4
super + Print
scrrec -s ~/recordings/$(date +%F-%T).mp4
# screencast region to gif
super + ctrl + Print
scrrec -s ~/recordings/$(date +%F-%T).gif
XF86MonBrightnessUp
light -A 5
XF86MonBrightnessDown
light -U 5
XF86AudioMute
amixer -q set Master toggle
XF86AudioLowerVolume
amixer -q set Master 10%- unmute
XF86AudioRaiseVolume
amixer -q set Master 10%+ unmute
XF86Audio{Play,Pause}
spt-send toggle
XF86AudioNext
spt-send next
XF86AudioPrev
spt-send prev
# X86Search
+50
View File
@@ -0,0 +1,50 @@
# xdg.nix
#
# Set up and enforce XDG compliance. Other modules will take care of their own,
# but this takes care of the general cases.
{ config, home-manager, ... }:
{
### A tidy $HOME is a tidy mind
home-manager.users.anish.xdg.enable = true;
environment = {
sessionVariables = {
# These are the defaults, and xdg.enable does set them, but due to load
# order, they're not set before environment.variables are set, which could
# cause race conditions.
XDG_CACHE_HOME = "$HOME/.cache";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_BIN_HOME = "$HOME/.local/bin";
};
variables = {
# Conform more programs to XDG conventions. The rest are handled by their
# respective modules.
__GL_SHADER_DISK_CACHE_PATH = "$XDG_CACHE_HOME/nv";
ASPELL_CONF = ''
per-conf $XDG_CONFIG_HOME/aspell/aspell.conf;
personal $XDG_CONFIG_HOME/aspell/en_US.pws;
repl $XDG_CONFIG_HOME/aspell/en.prepl;
'';
#CUDA_CACHE_PATH = "$XDG_CACHE_HOME/nv";
HISTFILE = "$XDG_DATA_HOME/bash/history";
INPUTRC = "$XDG_CONFIG_HOME/readline/inputrc";
LESSHISTFILE = "$XDG_CACHE_HOME/lesshst";
WGETRC = "$XDG_CONFIG_HOME/wgetrc";
# Tools I don't use
# SUBVERSION_HOME = "$XDG_CONFIG_HOME/subversion";
# BZRPATH = "$XDG_CONFIG_HOME/bazaar";
# BZR_PLUGIN_PATH = "$XDG_DATA_HOME/bazaar";
# BZR_HOME = "$XDG_CACHE_HOME/bazaar";
# ICEAUTHORITY = "$XDG_CACHE_HOME/ICEauthority";
};
# Move ~/.Xauthority out of $HOME (setting XAUTHORITY early isn't enough)
#extraInit = ''
# export XAUTHORITY=/tmp/Xauthority
# [ -e ~/.Xauthority ] && mv -f ~/.Xauthority "$XAUTHORITY"
#'';
};
}
+41
View File
@@ -0,0 +1,41 @@
set notification-error-bg "#1f2430"
set notification-error-fg "#fb4934"
set notification-warning-bg "#1f2430"
set notification-warning-fg "#fabd2f"
set notification-bg "#1f2430"
set notification-fg "#b8bb26"
set completion-bg "#1f2430"
set completion-fg "#bfbab0"
set completion-group-bg "#3c3836"
set completion-group-fg "#928374"
set completion-highlight-bg "#83a598"
set completion-highlight-fg "#504945"
# Define the color in index mode
set index-bg "#1f2430"
set index-fg "#bfbab0"
set index-active-bg "#83a598"
set index-active-fg "#504945"
set inputbar-bg "#1f2430"
set inputbar-fg "#bfbab0"
set statusbar-bg "#1f2430"
set statusbar-fg "#bfbab0"
set highlight-color "#fabd2f"
set highlight-active-color "#fe8019"
set default-bg "#1f2430"
set default-fg "#bfbab0"
set render-loading true
set render-loading-bg "#1f2430"
set render-loading-fg "#bfbab0"
# Recolor book content's color
set recolor-lightcolor "#1f2430"
set recolor-darkcolor "#bfbab0"
set recolor "true"
# set recolor-keephue true # keep original color
+9
View File
@@ -0,0 +1,9 @@
{
programs.direnv = {
enable = true;
nix-direnv = {
enable = true;
# enableFlakes = true;
};
};
}
+303
View File
@@ -0,0 +1,303 @@
{ pkgs, ... }:
{
#age.secrets.fastmail.file = "/etc/nixos/secrets/fastmail.age";
#age.secrets.fastmail.owner = "anish";
home.packages = with pkgs; [
neomutt
imapfilter
];
services.mbsync = {
enable = true;
frequency = "*:0/30";
#postExec = "${pkgs.notmuch}/bin/notmuch new";
};
services.imapnotify.enable = true;
programs.mbsync.enable = true;
programs.msmtp.enable = true;
programs.notmuch.enable = true;
home.file.".mailcap".text = ''
text/html; firefox %s
application/pdf; zathura %s
image/png; feh %s
image/jpeg; feh %s
'';
programs.neomutt = {
enable = true;
extraConfig = ''
# Shamelessly Stolen from https://gideonwolfe.com/posts/workflow/neomutt/intro/
# set editor to neovim
set editor = "nvim +':set textwidth=0'"
#set virtual_spoolfile=yes
set folder="~/Mail/anish"
set mbox_type = Maildir
mailboxes `find ~/Mail/anish/* -maxdepth 0 -type d | grep -v "Trash\|Spam\|tmp\|new\|cur" | sed 's|/home/anish/Mail/anish|=\"|g' | sed 's|$|\"|g' | tr '\n' ' '`
## Folder with emails
#set folder = "~/Mail/anish"
# Type of mailbox
# Directory to poll for new mail
#set spoolfile = +Inbox
# Directory to save sent messages into
#set record = +Sent
# Sets the drafts folder
set postponed = ~/Mail/anish/Drafts
# File that headers will be cached
# set header_cache = ~/.cache/mutt
set my_name = "Anish"
set imap_check_subscribed
# Set preffered view modes
auto_view text/html text/calendar application/ics # view html automatically
alternative_order text/plain text/enriched text/html text/*
# main options
set use_from
set from="anish@lakhwara.com"
set sendmail="msmtpq" # send from default account using msmtp
set sendmail_wait=-1
set edit_headers # show headers when composing
set fast_reply # skip to compose when replying
#set askcc # ask for CC:
set fcc_attach # save attachments with the body
set forward_format = "Fwd: %s" # format of subject when forwarding
set forward_decode # decode when forwarding
set attribution = "On %d, %n wrote:" # format of quoting header
set reply_to # reply to Reply to: field
set reverse_name # reply as whomever it was to
set include # include message in replies
set forward_quote # include message in forwards
set text_flowed
set ssl_force_tls
set fast_reply
#unset sig_dashes # no dashes before sig
#unset mime_forward # forward attachments as part of body
#unset help # No help bar at the top of index
set status_on_top # Status bar on top of index
#set tmpdir = ~/Programs/neomutt/temp # where to keep temp files
unset confirmappend # don't ask, just do!
set quit # don't ask, just do!!
unset mark_old # read/new is good enough for me
set pipe_decode # strip headers and eval mimes when piping
set thorough_search # strip headers and eval mimes before searching
set timeout = 0
# status bar, date format, finding stuff etc.
set status_chars = " *%A"
set status_format = "[ Folder: %f ] [%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]%>%?p?( %p postponed )?"
set date_format = "%d.%m.%Y %H:%M"
set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"
set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set send_charset = "utf-8:iso-8859-1:us-ascii"
set charset = "utf-8"
set arrow_cursor = "no" # Change `color indicator` depending
# notmuch shortcuts
# Points to the notmuch directory
set nm_default_url = "notmuch://$HOME/Mail/anish"
# Makes notmuch return threads rather than messages
set nm_query_type = "threads"
# Binding for notmuch search
macro index,pager S "<vfolder-from-query>" "Search mailbox"
# Pager View Options
set pager_index_lines = 10 # Shows 10 lines of index when pager is active
set pager_context = 3
set pager_stop
set menu_scroll
set tilde
set mail_check_stats
unset markers
#set header_cache = "~/.cache/mutt"
#set message_cachedir = "~/.cache/mutt"
set query_command = "khard email --parsable --search-in-source-files '%s'"
### Mappings Settings
# General rebindings
bind attach <return> view-mailcap
bind attach l view-mailcap
bind editor <space> noop
bind pager c imap-fetch-mail
bind index G last-entry
bind index g noop
bind index gg first-entry
bind pager,attach h exit
bind pager j next-line
bind pager k previous-line
bind pager l view-attachments
bind index D delete-message
bind index U undelete-message
bind index L limit
bind index h noop
bind index l display-message
bind browser h goto-parent
bind browser l select-entry
bind pager,browser gg top-page
bind pager,browser G bottom-page
bind index,pager,browser d half-down
bind index,pager,browser u half-up
# bind index,pager R group-reply
bind index \031 previous-undeleted # Mouse wheel
bind index \005 next-undeleted # Mouse wheel
bind pager \031 previous-line # Mouse wheel
bind pager \005 next-line # Mouse wheel
bind editor <Tab> complete-query
# sidebar mappings
set sidebar_short_path=yes
set sidebar_delim_chars='/'
bind index,pager \Ck sidebar-prev
bind index,pager \Cj sidebar-next
bind index,pager \Co sidebar-open
bind index,pager \Cp sidebar-prev-new
bind index,pager \Cn sidebar-next-new
bind index,pager B sidebar-toggle-visible
# global index and pager shortcuts
bind index,pager @ compose-to-sender
bind index,pager D purge-message
bind index <tab> sync-mailbox
bind index <space> collapse-thread
# Email completion bindings
bind editor <Tab> complete-query
bind editor ^T complete
# Press A to archive
macro index,pager A "<clear-flag>N<save-message>=/Archive" "mark message as Archived"
# Press C to add contact to Khard address book
macro index,pager C \
"<pipe-message>khard add-email<return>" \
"add the sender email address to khard"
### Color Settings
# Header colors:
color header blue default ".*"
color header brightmagenta default "^(From)"
color header brightcyan default "^(Subject)"
color header brightwhite default "^(CC|BCC)"
mono bold bold
mono underline underline
mono indicator reverse
mono error bold
color normal default default
color indicator brightyellow default # currently selected message. default makes bar clear, disabled arrow to save space.
color sidebar_highlight red default
color sidebar_divider brightblack black
color sidebar_flagged red black
color sidebar_new green black
color normal brightyellow default
color error red default
color tilde black default
color message cyan default
color markers red white
color attachment white default
color search brightmagenta default
color status brightyellow black
color hdrdefault brightgreen default
color quoted green default
color quoted1 blue default
color quoted2 cyan default
color quoted3 yellow default
color quoted4 red default
color quoted5 brightred default
color signature brightgreen default
color bold black default
color underline black default
color normal default default
color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body green default "\`[^\`]*\`" # Green text between ` and `
color body brightblue default "^# \.*" # Headings as bold blue
color body brightcyan default "^## \.*" # Subheadings as bold cyan
color body brightgreen default "^### \.*" # Subsubheadings as bold green
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
color body brightcyan default "[;:][-o][)/(|]" # emoticons
color body brightcyan default "[;:][)(|]" # emoticons
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
color body red default "(BAD signature)"
color body cyan default "(Good signature)"
color body brightblack default "^gpg: Good signature .*"
color body brightyellow default "^gpg: "
color body brightyellow red "^gpg: BAD signature from.*"
mono body bold "^gpg: Good signature"
mono body bold "^gpg: BAD signature from.*"
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
# Default index colors:
color index yellow default '.*'
color index_author red default '.*'
color index_number blue default
color index_subject cyan default '.*'
# For new mail:
color index brightyellow black "~N"
color index_author brightred black "~N"
color index_subject brightcyan black "~N"
color progress black cyan
'';
};
accounts.email = {
accounts.anish = {
primary = true;
address = "anish@lakhwara.com";
#alias = [ "*@lakhwara.com" ];
#gpg = {
# key = "";
# signByDefault = true;
#};
imap.host = "imap.fastmail.com";
mbsync = {
enable = true;
create = "both";
expunge = "both";
remove = "both";
extraConfig.local.subFolders = "Verbatim";
};
imapnotify = {
enable = true;
boxes = [ "Inbox" ];
onNotify = "${pkgs.isync}/bin/mbsync anish && ${pkgs.notmuch}/bin/notmuch index";
onNotifyPost = {
mail = "${pkgs.libnotify}/bin/notify-send -a mail 'email: new in %s'";
#update = "${pkgs.libnotify}/bin/notify-send -a mail 'email: update %s'";
#expunge = "${pkgs.libnotify}/bin/notify-send -a mail 'email: expunge %s'";
};
};
msmtp.enable = true;
msmtp.extraConfig = {
"port" = "465";
};
notmuch.enable = true;
realName = "Anish Lakhwara";
signature = {
text = ''
Thanks,
Anish
'';
showSignature = "append";
};
passwordCommand = "${pkgs.coreutils}/bin/cat /run/agenix/fastmail";
smtp = {
host = "smtp.fastmail.com";
};
userName = "anish@lakhwara.com";
neomutt = {
enable = true;
};
};
};
}
+120
View File
@@ -0,0 +1,120 @@
{ pkgs, ... }:
{
programs.browserpass.enable = true;
programs.browserpass.browsers = [ "firefox" ];
#env.XDG_DEXSTOP_DIR = "$HOME/";
programs.firefox.profiles.anish.userChrome = (builtins.readFile ./userChrome.css);
programs.firefox.profiles.anish.settings = {
"devtools.theme" = "dark";
# Enable userContent.css and userChrome.css for our theme modules
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
# Stop creating ~/Downloads!
"browser.download.dir" = "/home/anish/downloads"; # TODO Don't hardcode this!
# Don't use the built-in password manager; a nixos user is more likely
# using an external one (you are using one, right?).
#"signon.rememberSignons" = false;
# Do not check if Firefox is the default browser
"browser.shell.checkDefaultBrowser" = false;
# Disable the "new tab page" feature and show a blank tab instead
# https://wiki.mozilla.org/Privacy/Reviews/New_Tab
# https://support.mozilla.org/en-US/kb/new-tab-page-show-hide-and-customize-top-sites#w_how-do-i-turn-the-new-tab-page-off
"browser.newtabpage.enabled" = false;
"browser.newtab.url" = "about:blank";
# Disable Activity Stream
# https://wiki.mozilla.org/Firefox/Activity_Stream
"browser.newtabpage.activity-stream.enabled" = false;
# Disable new tab tile ads & preload
# http://www.thewindowsclub.com/disable-remove-ad-tiles-from-firefox
# http://forums.mozillazine.org/viewtopic.php?p=13876331#p13876331
# https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
# https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-source
# https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-ping
"browser.newtabpage.enhanced" = false;
"browser.newtab.preload" = false;
"browser.newtabpage.directory.ping" = "";
"browser.newtabpage.directory.source" = "data:text/plain,{}";
# Disable some not so useful functionality.
"media.videocontrols.picture-in-picture.video-toggle.enabled" = false;
"extensions.htmlaboutaddons.recommendations.enabled" = false;
"extensions.htmlaboutaddons.discover.enabled" = false;
"extensions.pocket.enabled" = false;
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
"extensions.shield-recipe-client.enabled" = false;
"app.shield.optoutstudies.enabled" = false;
# Disable battery API
# https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager
# https://bugzilla.mozilla.org/show_bug.cgi?id=1313580
"dom.battery.enabled" = false;
# Disable "beacon" asynchronous HTTP transfers (used for analytics)
# https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon
"beacon.enabled" = false;
# Disable pinging URIs specified in HTML <a> ping= attributes
# http://kb.mozillazine.org/Browser.send_pings
"browser.send_pings" = false;
# Disable gamepad API to prevent USB device enumeration
# https://www.w3.org/TR/gamepad/
# https://trac.torproject.org/projects/tor/ticket/13023
"dom.gamepad.enabled" = false;
# Don't try to guess domain names when entering an invalid domain name in URL bar
# http://www-archive.mozilla.org/docs/end-user/domain-guessing.html
"browser.fixup.alternate.enabled" = false;
# Disable telemetry
# https://wiki.mozilla.org/Platform/Features/Telemetry
# https://wiki.mozilla.org/Privacy/Reviews/Telemetry
# https://wiki.mozilla.org/Telemetry
# https://www.mozilla.org/en-US/legal/privacy/firefox.html#telemetry
# https://support.mozilla.org/t5/Firefox-crashes/Mozilla-Crash-Reporter/ta-p/1715
# https://wiki.mozilla.org/Security/Reviews/Firefox6/ReviewNotes/telemetry
# https://gecko.readthedocs.io/en/latest/browser/experiments/experiments/manifest.html
# https://wiki.mozilla.org/Telemetry/Experiments
# https://support.mozilla.org/en-US/questions/1197144
# https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html#id1
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.archive.enabled" = false;
"experiments.supported" = false;
"experiments.enabled" = false;
"experiments.manifest.uri" = "";
# Disable health reports (basically more telemetry)
# https://support.mozilla.org/en-US/kb/firefox-health-report-understand-your-browser-perf
# https://gecko.readthedocs.org/en/latest/toolkit/components/telemetry/telemetry/preferences.html
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.healthreport.service.enabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
# Pipewire optimizations
# https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Performance-tuning#firefox
"reader.parse-on-load.enabled" = false;
"media.webspeech.synth.enabled" = false;
};
# Override?
home.packages = with pkgs; [
firefox-bin
# TODO something changed in 22.05, needs to be a list?
# (makeDesktopItem {
# name = "firefox-private";
# desktopName = "Firefox (Private)";
# genericName = "Open a private Firefox window";
# icon = "firefox";
# exec = "${firefox-bin}/bin/firefox --private-window";
# categories = "Network";
# })
];
home.file = let cfgPath = ".mozilla/firefox"; in
{
"${cfgPath}/profiles.ini".text = ''
[Profile0]
Name=default
IsRelative=1
Path=anish.default
Default=1
[General]
StartWithLastProfile=1
Version=2
'';
"${cfgPath}/anish.default/chrome/userChrome.css".source = ./userChrome.css;
};
}
+276
View File
@@ -0,0 +1,276 @@
/* @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); */
@-moz-document url(chrome://browser/content/browser.xul),
url(chrome://browser/content/browser.xhtml)
{
/*** TREE STYLE TABS ***/
/* Hide main tabs toolbar */
#TabsToolbar {
visibility: collapse !important;
}
/* Sidebar min and max width removal */
:root {
/* expanded width of the sidebar.
used for userChrome-static, and hover */
--sidebar-width: 250px;
/* initial width of the sidebar.
advised not to change since tst css relies on this value*/
--sidebar-collapsed-width: 60px;
}
#sidebar-box {
z-index: 1000 !important;
position: relative !important;
min-width: var(--sidebar-collapsed-width) !important;
max-width: var(--sidebar-collapsed-width) !important;
}
#sidebar-header,
#sidebar-splitter {
display: none !important;
}
/* inner width = expanded width & move inner to only show initial-width long section */
#sidebar-box #sidebar {
position: absolute !important;
min-width: var(--sidebar-width) !important;
max-width: var(--sidebar-width) !important;
width: var(--sidebar-width) !important;
transform: translateX(calc(var(--sidebar-collapsed-width) - var(--sidebar-width)));
transition: all var(--transition-time) var(--ease-out);
}
/* move inner to show entire sidebar */
#sidebar-box #sidebar:hover {
transform: translateX(0) !important;
box-shadow: 2px 0 33px -3px var(--sidebar-shadow-color);
}
#sidebar-box[sidebarcommand="viewBookmarksSidebar"] #sidebar {
transform: translateX(0) !important;
box-shadow: 2px 0 33px -3px var(--sidebar-shadow-color);
}
/* hide sidebar header for tree style tabs sidebar */
#sidebar-box #sidebar-header {
display: none;
}
#sidebar {
border-right: solid var(--dividers) var(--sidebar-shadow-color) !important;
}
toolbar {
border: none !important;
}
#tabbrowser-arrowscrollbox {
margin: 7px 14px 7px 14px;
}
.tabbrowser-tab::after {
border: none !important;
}
.tab-background .tab-line,
.tab-background .tab-bottom-line {
display: none;
}
tab[selected="true"] > .tab-stack > .tab-background {
background: var(--tl-tab-background-gradient, var(--arrowpanel-dimmed-further)) !important;
}
tab:not([selected="true"]) > .tab-stack:hover > .tab-background {
background: var(--arrowpanel-background) !important;
}
.tab-stack {
border-radius: 7px;
margin-right: 5px;
overflow: hidden;
}
.tab-stack .tab-icon-image,
.tab-stack .tab-label-container {
transform: translateX(0px);
transition: all var(--tl-animation-duration) var(--ease-out) !important;
}
.tab-stack .tab-icon-image {
transition-duration: calc(var(--tl-animation-duration) * 2) !important;
}
tab:not([pinned="true"]) .tab-stack:hover .tab-icon-image {
transform: translateX(-25px) !important;
}
.tab-stack:hover .tab-label-container {
transform: translateX(-23px) !important;
}
/* containers */
tab:not([selected="true"]).identity-color-blue > .tab-stack,
tab:not([selected="true"]).identity-color-orange > .tab-stack,
tab:not([selected="true"]).identity-color-green > .tab-stack,
tab:not([selected="true"]).identity-color-pink > .tab-stack{
border-radius: 0 0 7px 7px !important;
}
tab[selected="true"].identity-color-blue > .tab-stack .tab-label-container,
tab[selected="true"].identity-color-orange > .tab-stack .tab-label-container,
tab[selected="true"].identity-color-green > .tab-stack .tab-label-container,
tab[selected="true"].identity-color-pink > .tab-stack .tab-label-container{
color: #000 !important;
}
/* blue */
tab[selected="true"].identity-color-blue > .tab-stack > .tab-background{
background: linear-gradient(to right, #3182CE , #0BC5EA) !important;
}
tab:not([selected="true"]).identity-color-blue > .tab-stack > .tab-background{
border-top: solid 4px #63B3ED !important;
}
/* orange */
tab[selected="true"].identity-color-orange > .tab-stack > .tab-background{
background: linear-gradient(to right, #DD6B20 , #F56565) !important;
}
tab:not([selected="true"]).identity-color-orange > .tab-stack > .tab-background{
border-top: solid 4px #F6AD55 !important;
}
/* green */
tab[selected="true"].identity-color-green > .tab-stack > .tab-background{
background: linear-gradient(to right, #38A169 , #38B2AC) !important;
}
tab:not([selected="true"]).identity-color-green > .tab-stack > .tab-background{
border-top: solid 4px #68D391 !important;
}
/* pink */
tab[selected="true"].identity-color-pink > .tab-stack > .tab-background{
background: linear-gradient(to right, #D53F8C , #9F7AEA) !important;
}
tab:not([selected="true"]).identity-color-pink > .tab-stack > .tab-background{
border-top: solid 4px #F687B3 !important;
}
.tab-stack .tab-close-button {
border-radius: 50%;
margin-left: -20px !important;
background: var(--lwt-text-color);
fill: var(--lwt-accent-color) !important;
transform: translateX(30px) !important;
transition: all var(--tl-animation-duration) var(--ease-out) !important;
}
.tab-stack:hover .tab-close-button {
transform: translateX(0px) !important;
}
#tabbrowser-tabs[closebuttons="activetab"] > #tabbrowser-arrowscrollbox >
.tabbrowser-tab > .tab-stack > .tab-content > .tab-close-button:not([selected="true"]){
display: block !important;
}
/* hide tabs */
.tabbrowser-tab {
display: none;
}
#tabs-newtab-button {
display: none;
}
.titlebar-spacer {
display: none !important;
}
/*** TAB BAR ***/
/* Ensure tab doesn't show through auto-completion popup */
.tabbrowser-tab { z-index: 0 !important; }
/* Ensure tab "spacers" don't show through the completion window */
#tabbrowser-arrowscrollbox > spacer { z-index: -1 !important; }
#mainPopupSet { z-index: 9999 !important; }
/* Hide tabbar if only one tab */
@import url(./css/tabs-hide-if-only-one.css);
/* Remove the colored overline on the focused tab */
.tabbrowser-tab .tab-line { background: none !important; }
/* Replace favicon on tabs with close button on mouse hover */
.tabbrowser-tab:not(:hover) .tab-close-button,
.tabbrowser-tab:not([pinned]):hover .tab-icon-image { display: none !important; }
.tabbrowser-tab:not([pinned]):hover .tab-close-button { display:block !important; }
.tabbrowser-tab:hover .tab-throbber,
.tabbrowser-tab:hover .tab-icon-image,
.tabbrowser-tab:hover .tab-sharing-icon-overlay,
.tabbrowser-tab:hover .tab-icon-overlay,
.tabbrowser-tab:hover .tab-label-container,
.tabbrowser-tab:hover .tab-icon-sound {
-moz-box-ordinal-group: 2 !important;
}
.tabbrowser-tab .tab-close-button {
margin-left: -2px !important;
margin-right: 4px !important;
}
.tab-close-button:hover {
fill-opacity: 0 !important;
}
.tabbrowser-tab::after,
.tabbrowser-tab::before {
border-left: none !important;
border-right: none !important;
}
.scrollbutton-up[orient="horizontal"]~spacer { border-width: 0px; opacity: 0 }
/*** NAV BAR ***/
/* Hide urlbar */
#nav-bar {
position: relative !important;
z-index: 2 !important;
height: 2px !important;
min-height: 2px !important;
margin-bottom: -2px !important;
opacity: 0 !important;
border: none !important;
}
/* But unfocus it when we invoke it with ctrl+L */
#nav-bar:focus-within {
height: auto !important;
margin-bottom: 0px !important;
opacity: 1 !important;
overflow: show !important;
}
#urlbar-container {
min-height: 0 !important;
}
#urlbar {
top: 0 !important;
}
#urlbar-input-container {
height: 28px !important;
}
/*** Load local overrides ***/
@import url(./userChrome.local.css);
}
File diff suppressed because one or more lines are too long
+3
View File
@@ -0,0 +1,3 @@
*.lisp diff=lisp
*.el diff=lisp
*.org diff=org
+48
View File
@@ -0,0 +1,48 @@
[user]
name = Anish Lakhwara
email = anish+git@lakhwara.com
[core]
whitespace = trailing-space
[init]
defaultBranch = main
[github]
user = chickensoupwithrice
[gitlab]
user =
[rebase]
autosquash = true
[push]
default = current
[pull]
rebase = true
[alias]
unadd = reset HEAD
# data analysis
ranked-authors = !git authors | sort | uniq -c | sort -n
emails = !git log --format="%aE" | sort -u
email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u
# pretty log
ls = !git log --graph --abbrev-commit --decorate --color=always --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) - %C(dim red)%an%C(reset)%C(bold yellow)%d%C(reset)' --all
[filter "lfs"]
required = true
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
clean = git-lfs clean -- %f
[url "https://github.com/"]
insteadOf = gh:
[url "git@github.com:"]
insteadOf = ssh+gh:
[url "git@github.com:chickensoupwithrice/"]
insteadOf = gh:/
[url "https://gitlab.com/"]
insteadOf = gl:
[url "https://gist.github.com/"]
insteadOf = gist:
[url "https://bitbucket.org/"]
insteadOf = bb:
[url "https://git.v0.com"]
insteadOf = v0:
[diff "lisp"]
xfuncname = "^(((;;;+ )|\\(|([ \t]+\\(((cl-|el-patch-)?def(un|var|macro|method|custom)|gb/))).*)$"
[diff "org"]
xfuncname = "^(\\*+ +.*)$"
+98
View File
@@ -0,0 +1,98 @@
{
#xdg.configFile = {
# "git/config".source = ./config;
# "git/ignore".source = ./ignore;
# "git/attributes".source = ./attributes;
#};
programs.lazygit.enable = true;
programs.git = {
enable = true;
userName = "Anish Lakhwara";
userEmail = "anish+git@lakhwara.com";
delta.enable = true;
# TODO enable signing
ignores = [
"*~"
"*.*~"
"\\#*"
".\\#*"
"*.swp"
".*.sw[a-z]"
"*.un~"
".netrwhist"
".vim/*"
".DS_Store?"
".DS_Store"
".CFUserTextEncoding"
".Trash"
".Xauthority"
"thumbs.db"
"Thumbs.db"
"Icon?"
".ccls-cache/"
".sass-cache/"
"__pycache__/"
"*.class"
"*.exe"
"*.o"
"*.pyc"
"*.elc"
".nrepl-port"
".envrc"
".lsp/*"
".direnv/*"
".clj-kondo/*"
".cpcache/*"
".tmp"
".direnv"
"result"
];
extraConfig = {
pull.rebase = false;
init.defaultBranch = "main";
};
aliases = {
a = "add -p";
co = "checkout";
cob = "checkout -b";
f = "fetch -p";
c = "commit -v";
p = "push";
# po = "push -u origin "; TODO push current branch to main
ba = "branch -a";
bd = "branch -d";
bD = "branch -D";
d = "diff";
dc = "diff --cached";
ds = "diff --staged";
r = "restore";
rs = "restore --staged";
st = "status -sb";
# reset
soft = "reset --soft";
hard = "reset --hard";
s1ft = "soft HEAD~1";
h1rd = "hard HEAD~1";
# logging
lg =
"log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
plog =
"log --graph --pretty='format:%C(red)%d%C(reset) %C(yellow)%h%C(reset) %ar %C(green)%aN%C(reset) %s'";
tlog =
"log --stat --since='1 Day Ago' --graph --pretty=oneline --abbrev-commit --date=relative";
rank = "shortlog -sn --no-merges";
authors = "authors | sort | uniq -c | sort -n";
ls = "log --graph --abbrev-commit --decorate --color=always --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) - %C(dim red)%an%C(reset)%C(bold yellow)%d%C(reset)' --all";
# delete merged branches
bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d";
};
};
}
+37
View File
@@ -0,0 +1,37 @@
# For emacs:
*~
*.*~
\#*
.\#*
# For vim:
*.swp
.*.sw[a-z]
*.un~
.netrwhist
.vim/*
# OS generated files #
######################
.DS_Store?
.DS_Store
.CFUserTextEncoding
.Trash
.Xauthority
thumbs.db
Thumbs.db
Icon?
# Code stuffs #
###############
.ccls-cache/
.sass-cache/
__pycache__/
# Compiled thangs #
###################
*.class
*.exe
*.o
*.pyc
*.elc
+802
View File
@@ -0,0 +1,802 @@
{ pkgs, ... }:
let
customPlugins = {
vim-zettel = pkgs.vimUtils.buildVimPlugin {
name = "vim-zettel";
src = pkgs.fetchFromGitHub {
owner = "michal-h21";
repo = "vim-zettel";
rev = "929d90eec62e6f693c2702d2b6f76a93f2f1689d";
sha256 = "1fzKmknfVlEYwqeXgbKITbb2/PJ023iJyMz6vak3qh4=";
};
};
lsp-format = pkgs.vimUtils.buildVimPlugin {
name = "lsp-format";
src = pkgs.fetchFromGitHub {
owner = "lukas-reineke";
repo = "lsp-format.nvim";
rev = "84e117b99bb2bc0d0c8122e2b256046f046f8aff";
sha256 = "rs3NTZwWdsmBGXnrgUeVxUiNjbN/ULxJHifPYJD9mT4=";
};
};
nvim-luapad = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "nvim-luapad";
src = pkgs.fetchFromGitHub {
owner = "rafcamlet";
repo = "nvim-luapad";
rev = "9815e2659ce8e2ef4b55e401531cf09b6423e0ea";
sha256 = "gMaS5YFi3+gmUIfkCMEt9vhm8XSgv54Cquv5+WCWeTo=";
};
};
leap = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "leap";
src = pkgs.fetchFromGitHub {
owner = "ggandor";
repo = "leap.nvim";
rev = "1bb1fec369b1e9ae96e6ff1b829ea9272c51f844";
sha256 = "dH0v1D5q5OlMLA/omTDMb/taKyIgQ5VfVMYXJ609k/k=";
};
};
nvim-navic = pkgs.vimUtils.buildVimPlugin {
name = "nvim-navic";
src = pkgs.fetchFromGitHub {
owner = "SmiteshP";
repo = "nvim-navic";
rev = "096b23e73c84a653fd317c0c10261875fa573a6d";
sha256 = "vX7ZVJxgatIicmijehtaRvyHxk1i4gFfXrbPM/+VoFc=";
};
};
my-lualine-nvim = pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "lualine.nvim";
version = "2022-05-13";
src = pkgs.fetchFromGitHub {
owner = "nvim-lualine";
repo = "lualine.nvim";
rev = "a4e4517ac32441dd92ba869944741f0b5f468531";
sha256 = "18q935aicddai7j99ln61wz1di6lhwzs11x8fxgq704kfap1l2fj";
};
meta.homepage = "https://github.com/nvim-lualine/lualine.nvim/";
};
my-which-key-nvim = pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "which-key.nvim";
version = "2022-05-04";
src = pkgs.fetchFromGitHub {
owner = "folke";
repo = "which-key.nvim";
rev = "bd4411a2ed4dd8bb69c125e339d837028a6eea71";
sha256 = "0vf685xgdb967wmvffk1pfrvbhg1jkvzp1kb7r0vs90mg8gpv1aj";
};
meta.homepage = "https://github.com/folke/which-key.nvim/";
};
my-conjure = pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "conjure";
version = "2022-05-04";
src = pkgs.fetchFromGitHub {
owner = "olical";
repo = "conjure";
rev = "2e7f449d06753f2996e186954e96afc60edd5862";
sha256 = "ZV0vPYiZI5/3Isw2l7rrLuiO+kA9G0vrA6OxHFkLTFw=";
};
};
scnvim = pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "scnvim";
version = "2022-06-04";
src = pkgs.fetchFromGitHub {
owner = "davidgranstrom";
repo = "scnvim";
rev = "746cc0db820d02a9c36b8f9ba2eac9725fa73107";
sha256 = "kvSwS6FNUY2Ue84NhWLLcm0ldLMSp4WqQ7s6TUoX6Cc=";
};
};
yuck-vim = pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "yuck.vim";
version = "2021-08-09";
src = pkgs.fetchFromGitHub {
owner = "elkowar";
repo = "yuck.vim";
rev = "6dc3da77c53820c32648cf67cbdbdfb6994f4e08";
sha256 = "lp7qJWkvelVfoLCyI0aAiajTC+0W1BzDhmtta7tnICE=";
};
};
nvim-parinfer = pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "nvim-parinfer";
version = "v1.2.0";
src = pkgs.fetchFromGitHub {
owner = "gpanders";
repo = "nvim-parinfer";
rev = "82bce5798993f4fe5ced20e74003b492490b4fe8";
sha256 = "Dlzfp3CZTzq8zQeHByWf3ER6/Em+KNGYNI4Z17ui8Lc=";
};
};
};
my-python-packages = python-packages: with python-packages; [
tasklib
pynvim
six
python-lsp-server
python-lsp-black
pylsp-mypy
black
# other python packages you want
];
python-with-my-packages = pkgs.python3.withPackages my-python-packages;
in
{
home.sessionVariables.EDITOR = "nvim";
home.shellAliases = {
k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD";
kz = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex -c :ZettelNew; cd $OLDPWD";
};
# Add %update to the highlight clause for vimwiki files
home.file.".config/nvim/after/syntax/vimwiki.vim".text = ''
" match with %update
syntax match VimwikiPlaceholder /^\s*%update\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
'';
#environment.systemPackages = with customPlugins; [ tidal ];
programs.neovim = {
enable = true;
extraConfig = ''
" so our custom files still get included
set runtimepath+=/home/anish/.config/nvim/
set tabstop=2
set showmatch
set shiftwidth=2
set noexpandtab
set autoindent
set undofile
set signcolumn=auto:4
set title
" set foldmethod=indent " fold based on indent
set number
set nocompatible
set relativenumber
set showtabline=2
set noexpandtab
set autowriteall
set list lcs=tab:\|\
filetype plugin on
" include - in word to move across easier in lisp / clojure
set iskeyword+=-
set termguicolors
colorscheme ayu-mirage
" set spell
set spelllang=en_gb
set ignorecase
set smartcase
set incsearch
" if hidden is not set, TextEdit might fail.
set hidden
" Some servers have issues with backup files, see #649
set nobackup
set nowritebackup
" Better display for messages
set cmdheight=2
" You will have bad experience for diagnostic messages when it's default 4000.
set updatetime=300
" don't give |ins-completion-menu| messages.
set shortmess+=c
" always show signcolumns
set signcolumn=yes
" highlight row
set cursorline
let mapleader = "\<Space>"
let maplocalleader = ","
" window
nmap <leader>wh :topleft vnew<CR>
nmap <leader>wl :botright vnew<CR>
nmap <leader>wk :topleft new<CR>
nmap <leader>wj :botright new<CR>
" tabs
nmap <leader>rt :retab!<CR>
vmap <leader>rt :retab!<CR>
" moving splits with vim movements.
:tnoremap <A-h> <C-\><C-N><C-w>h
:tnoremap <A-j> <C-\><C-N><C-w>j
:tnoremap <A-k> <C-\><C-N><C-w>k
:tnoremap <A-l> <C-\><C-N><C-w>l
:inoremap <A-h> <C-\><C-N><C-w>h
:inoremap <A-j> <C-\><C-N><C-w>j
:inoremap <A-k> <C-\><C-N><C-w>k
:inoremap <A-l> <C-\><C-N><C-w>l
:nnoremap <A-h> <leader>h
:nnoremap <A-j> <leader>j
:nnoremap <A-k> <leader>k
:nnoremap <A-l> <leader>l
:nnoremap <F5> "=strftime("%Y-%m-%d %H:%M")<CR>
:inoremap <F5> <C-R>=strftime("%Y-%m-%d %H:%M")<CR>
:inoremap <F4> <C-R>=strftime("%H:%M")<CR>
" tidal nvim terminal
let g:tidal_target = "terminal"
" telescope
" Find files using Telescope command-line sugar.
nnoremap <leader>ff <cmd>Telescope find_files<cr>
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
nnoremap <leader>ft <cmd>Telescope tags<cr>
" exit normal mode in terminal
:tnoremap <C-n> <C-\><C-n>
" Sexp in Conjure (since it's fennel)
let g:sexp_filetypes = "clojure,scheme,lisp,janet,fennel,yuck"
let g:conjure#filetype#fennel = "conjure.client.fennel.stdio"
let g:rainbow_active = 0
autocmd BufReadPost,BufNewFile c,clj,cljs RainbowParenthesesToggleAll
" general commands
map <leader>t :NERDTreeToggle<CR>
map <leader>s :w<CR>
map <leader>q :q<CR>
map <leader>r :RainbowParenthesesToggleAll<CR>
map <leader><BS> :noh<CR>
map Q <Nop>
nnoremap Y y$
nnoremap <leader>n :vnew<CR>
" center moving
nnoremap n nzzzv
nnoremap N Nzzzv
nnoremap J mzJ'z
" undo points
inoremap , ,<c-g>u
inoremap . .<c-g>u
inoremap ? ?<c-g>u
inoremap ! !<c-g>u
inoremap ) )<c-g>u
inoremap [ [<c-g>u
inoremap ] ]<c-g>u
inoremap { {<c-g>u
inoremap ( (<c-g>u
inoremap } }<c-g>u
" moving text
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '>-2<CR>gv=gv
inoremap <c-j> <esc>:m .+1<CR>==
inoremap <c-k> <esc>:m .-2<CR>==
nnoremap <leader>j <esc>:m .+1<CR>==
nnoremap <leader>k <esc>:m .-2<CR>==
" Pasting
:map <leader>sy :!xclip -i<CR><CR>
:vmap <leader>sy "*y
:map <leader>sp :r!xclip -o<CR>
" barbar
nnoremap <silent> gT :BufferPrevious<CR>
nnoremap <silent> gt :BufferNext<CR>
nnoremap <silent> gj :BufferPick<CR>
nnoremap <silent> gq :BufferClose<CR>
" git
nnoremap <leader>ga :G fetch --all
nmap <leader>gs :G<CR>
nmap <leader>gl :diffget //3<CR>
nmap <leader>gh :diffget //2<CR>
nmap <leader>gb :GBranches<CR>
nnoremap <leader>gp :Git! push<CR>
nnoremap <leader>gd :Gdiff<CR>
nnoremap <leader>gc :G commit -v -q %:p<CR>
" kitaab
map <leader>cz :VimwikiIndex<CR>:ZettelNew
map <leader>zs :ZettelSearch<CR>
map <leader>zn :ZettelNew<CR>
map <leader>zo :ZettelOpen<CR>
map <leader>zf :Telescope oldfiles only_cwd=true<CR>
map <leader>wt :VimwikiMakeTomorrowDiaryNote
map <leader>wd :VimwikiMakeYesterdayDiaryNote
map <leader>zd :Goyo<CR>:lua require('cmp').setup.buffer { enabled = false }<CR>
let g:vimwiki_list = [{ 'path': '~/kitaab/vimwiki', 'auto_tags': 1, 'auto_diary_index': 1, 'auto_generate_links': 1 }]
let g:sync_taskwarrior = 0
let g:zettel_format = "%y%m%d-%H%M"
let g:vimwiki_list = [{'path': '~/kitaab/vimwiki', 'nested_syntaxes': {'python': 'python', 'c++': 'cpp', 'nix': 'nix', 'bash': 'sh'}}]
let g:mapleader="\<Space>"
" fzf
" not sure we even use this
let g:fzf_layout = { 'window': { 'width': 0.8, 'height': 0.8 } }
" lsp commands
nnoremap <leader>vd :lua vim.lsp.buf.definition()<CR>
nnoremap <leader>vi :lua require('telescope.builtin').lsp_implementation()<CR>
nnoremap <leader>vsh :lua vim.lsp.buf.signature_help()<CR>
nnoremap <leader>vrr :lua require('telescope.builtin').lsp_references()<CR>
nnoremap <leader>vrn :lua vim.lsp.buf.rename()<CR>
nnoremap <leader>vh :lua vim.lsp.buf.hover()<CR>
nnoremap <leader>vca :lua vim.lsp.buf.code_action()<CR>
nnoremap <leader>vsd :lua rim.lsp.diagnostic.show_line_diagnostics(); vim.lsp.util.show_line_diagnostics()<CR>
nnoremap <leader>vn :lua vim.lsp.diagnostic.goto_next()<CR>
nnoremap <leader>vll :call LspLocationList()<CR>
nnoremap <leader>va :lua require('telescope.builtin').lsp_code_actions(require('telescope.themes').get_cursor())<cr>
" dashboard
let g:dashboard_custom_header = [
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\' ',
\]
let g:dashboard_default_executive = 'telescope'
nmap <Leader>ss :<C-u>SessionSave<CR>
nmap <Leader>sl :<C-u>SessionLoad<CR>
" nnoremap <silent> <Leader>fh :DashboardFindHistory<CR>
" nnoremap <silent> <Leader>fm :DashboardJumpMark<CR>
" nnoremap <silent> <Leader>cn :DashboardNewFile<CR>
autocmd FileType dashboard set showtabline=0 | autocmd WinLeave <buffer> set showtabline=2
let g:dashboard_custom_footer = ["Run wild"]
let g:dashboard_custom_section={
\ 'create_zettel': {
\ 'description': [' Create Zettel SPC c z'],
\ 'command': ':VimwikiIndex' },
\ 'load_session': {
\ 'description': [' Load Session SPC s l'],
\ 'command': 'SessionLoad' }
\ }
let g:scnvim_snippet_format = "luasnip"
" lua config
lua <<EOF
local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end
vim.g.diagnostics_active = true
function _G.toggle_diagnostics()
if vim.g.diagnostics_active then
vim.g.diagnostics_active = false
vim.lsp.diagnostic.clear(0)
vim.lsp.handlers["textDocument/publishDiagnostics"] = function() end
else
vim.g.diagnostics_active = true
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
vim.lsp.diagnostic.on_publish_diagnostics, {
virtual_text = true,
signs = true,
underline = true,
update_in_insert = false,
}
)
end
end
vim.api.nvim_set_keymap('n', '<leader>vt', ':call v:lua.toggle_diagnostics()<CR>', {noremap = true, silent = true})
-- autopairs
require('nvim-autopairs').setup{}
-- marks
require('marks').setup{}
-- Setup nvim-cmp.
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
local lspkind = require("lspkind")
local cmp = require('cmp')
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
local t = function(str)
return vim.api.nvim_replace_termcodes(str, true, true, true)
end
local check_back_space = function()
local col = vim.fn.col(".") - 1
return col == 0 or vim.fn.getline("."):sub(col, col):match("%s") ~= nil
end
cmp.setup {
formatting = {
format = lspkind.cmp_format({
mode = 'symbol_text',
maxwidth = 50,
-- old format
-- format = function(entry, vim_item)
-- -- fancy icons and a name of kind
-- vim_item.kind = require("lspkind").presets.default[vim_item.kind] ..
-- " " .. vim_item.kind
-- -- set a name for each source
-- vim_item.menu = ({
-- buffer = "[Buffer]",
-- nvim_lsp = "[LSP]",
-- look = "[Look]",
-- path = "[Path]",
-- spell = "[Spell]",
-- calc = "[Calc]",
-- })[entry.source.name]
-- return vim_item
-- end
})
},
mapping = {
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Insert,
select = true
}),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, {"i", "s"}),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
},
snippet = {
expand = function(args)
require'luasnip'.lsp_expand(args.body)
end
},
sources = {
{name = 'buffer'}, {name = 'nvim_lsp'},
{name = "look"}, {name = "path"},
{name = "calc"}, {name = "spell"},
{name = 'cmp-conjure'}, {name = "luasnip"},
{name = 'tags'}
},
completion = {completeopt = 'menu,menuone,noinsert'}
}
cmp.event:on( 'confirm_done', cmp_autopairs.on_confirm_done({ map_char = { tex = ' ' } }))
require("luasnip.loaders.from_vscode").lazy_load()
-- null-ls
local null_ls = require "null-ls"
local pyright = {
cmd = { "pyright" },
filetypes = { "python", },
debounce = 250,
debug = false,
default_timeout = 5000,
args = { "-p", "$FILENAME", "--skipunannotated" }
}
local sources = {
pyright,
null_ls.builtins.code_actions.statix,
null_ls.builtins.diagnostics.shellcheck,
-- null_ls.builtins.diagnostics.clj_kondo,
-- null_ls.builtins.formatting.black,
null_ls.builtins.code_actions.proselint,
-- null_ls.builtins.diagnostics.mypy,
}
-- Setup lspconfig
require("lsp-format").setup {}
require("nvim-navic").setup {}
local format = require("lsp-format")
local navic = require("nvim-navic")
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities)
local lspconfig = require('lspconfig')
local servers = { 'clojure_lsp', 'terraform_lsp', 'zls' }
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup {
on_attach = function(client, bufnr)
format.on_attach(client)
navic.attach(client, bufnr)
end,
capabilities = capabilities,
}
end
-- rnix doesn't support gps
require('lspconfig').rnix.setup {
on_attach = function(client, bufnr)
format.on_attach(client)
end,
capabilities = capabilities,
}
require('lspconfig').pylsp.setup {
on_attach = function(client, bufnr)
format.on_attach(client)
navic.attach(client, bufnr)
end,
capabilities = capabilities,
settings = {
pylsp = {
configurationSources = { "flake8", "mypy", "black" },
plugins = {
black = {enabled = true},
jedi_signature_help = {enabled = true},
jedi_completion = { include_params = true },
pylsp_mypy={ enabled = true },
pycodestyle={
enabled=true,
ignore={'E501', 'E231'},
maxLineLength=120,
},
},
},
},
}
require('gitsigns').setup { sign_priority=80 }
-- treesitter
require('nvim-treesitter.configs').setup {
ensure_installed={'nix', 'clojure', 'python', 'fennel', 'lua', 'html', 'css', 'regex', 'supercollider'},
highlight = { enabled = true, additional_vim_regex_highting = true, },
textobjects = { enabled = true },
}
-- 'glsl' needs c++ compiler lol
-- lualine
local navic = require("nvim-navic")
require('lualine').setup {
options = { theme = 'ayu' },
sections = {
lualine_c = {
'filename', { navic.get_location, condition=navic.is_available },
},
lualine_y = {
function()
local msg = 'No Active Lsp'
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
local clients = vim.lsp.get_active_clients()
if next(clients) == nil then
return msg
end
for _, client in ipairs(clients) do
local filetypes = client.config.filetypes
if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
return client.name
end
end
return msg
end
},
lualine_x = {'filetype'}
}
}
-- nvim-lint
-- require('lint').linters_by_ft = {
-- markdown = {'vale'},
-- }
-- f_term
local map = vim.api.nvim_set_keymap
local opts = { noremap = true, silent = true }
map('n', '<TAB>', '<CMD>lua require("FTerm").toggle()<CR>', opts)
map('t', '<A-i>', '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>', opts)
-- Custom functions
function update_date()
local time = os.date("%Y-%m-%d %H:%M")
local message = "%update " .. time
local lines = vim.api.nvim_buf_get_lines(0, 0,4,false)
for i=1,4,1 do
if (lines[i]:len() == 0) then
vim.api.nvim_buf_set_lines(0, i-1, i, false, {message, ""})
return
end
end
if (lines[4]:len() ~= 0) then
vim.api.nvim_buf_set_lines(0, 3, 4, false, {message})
end
return
end
vim.api.nvim_create_autocmd(
"BufWritePre",
{ pattern = { "*.wiki" }, callback = update_date}
)
-- set spelling for text files
vim.api.nvim_create_autocmd(
{ "BufRead", "BufNewFile" },
{ pattern = { "*.wiki", "*.txt", "*.md", "*.tex" },
command = "setlocal spell" }
)
vim.api.nvim_create_autocmd(
"FileType",
{ pattern = { "mail" },
command = "setlocal spell" }
)
-- auto session
require('auto-session').setup {
log_level = 'info',
auto_session_suppress_dirs = {'~/'}
}
vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal"
require("which-key").setup{}
require('leap').set_default_keymaps()
-- supercollider
local scnvim = require 'scnvim'
local map = scnvim.map
local map_expr = scnvim.map_expr
scnvim.setup {
keymaps = {
['<localleader>e'] = map('editor.send_line', {'i', 'n'}),
['<localleader>s'] = map_expr('CmdPeriod.run', {'i', 'n'}),
['<localleader>t'] = {
map('editor.send_block', {'i', 'n'}),
map('editor.send_selection', 'x'),
},
['<CR>'] = map('postwin.toggle'),
['<M-CR>'] = map('postwin.toggle', 'i'),
['<M-L>'] = map('postwin.clear', {'n', 'i'}),
['<C-k>'] = map('signature.show', {'n', 'i'}),
['<F12>'] = map('sclang.hard_stop', {'n', 'x', 'i'}),
['<leader>st'] = map('sclang.start'),
['<leader>sk'] = map('sclang.recompile'),
['<F1>'] = map_expr('s.boot'),
['<F2>'] = map_expr('s.meter'),
}
}
-- require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets())
EOF
'';
extraPackages = with pkgs // customPlugins; [
# used to compile tree-sitter grammar
tree-sitter
python-with-my-packages
nodejs
clojure-lsp
rnix-lsp
terraform-lsp
clj-kondo
zls
gcc
nodePackages.pyright
shellcheck
proselint
statix
# installs different langauge servers for neovim-lsp
# have a look on the link below to figure out the ones for your languages
# https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md
nodePackages.typescript
nodePackages.typescript-language-server
];
plugins = with pkgs.vimPlugins // customPlugins; [
# ui
fzf-vim
nerdtree
neovim-ayu
goyo-vim
rainbow_parentheses-vim
vim-surround
vim-devicons
nvim-web-devicons
vim-peekaboo
undotree
telescope-nvim
plenary-nvim
nvim-gps
nvim-treesitter
nvim-treesitter-context
FTerm-nvim
barbar-nvim
auto-session
marks-nvim
# language
vim-nix
vim-elixir
emmet-vim
csv-vim
direnv-vim
zig-vim
# kitaab stuff
vimwiki
taskwiki
vim-zettel
# lsp stuff
# nvim-lint
null-ls-nvim
nvim-lspconfig
nvim-cmp
cmp-nvim-lsp
cmp-treesitter
nvim-lsp-ts-utils
cmp-conjure
cmp-buffer
cmp-path
cmp-spell
nvim-autopairs
cmp_luasnip
luasnip
lsp-format
friendly-snippets
lspkind-nvim
# git stuff
vim-fugitive
gitsigns-nvim
fzf-checkout-vim
# Clojure stuff
# conjure
vim-sexp
vim-sexp-mappings-for-regular-people
fennel-vim
vim-tidal
# experimental
nvim-luapad
nvim-navic
scnvim
leap
# TODO break with nvim 0.8.0
# these are here until i upgrade my nixos channnel in the flake
my-which-key-nvim
my-lualine-nvim
my-conjure
yuck-vim
nvim-parinfer
# vim-processing
];
withPython3 = true;
extraPython3Packages = pkgs: with pkgs; [ tasklib six ];
vimAlias = true;
};
}
+61
View File
@@ -0,0 +1,61 @@
#! /usr/bin/env cached-nix-shell
#! nix-shell -i python3 -p python3
"""Manage Taskwarrior notes"""
import argparse
import logging
import os
import sys
import datetime
NOTES_DIR = "~/kitaab/vimwiki/task-notes"
EDITOR = os.environ["EDITOR"]
logging.basicConfig(level=logging.DEBUG)
def write_note(task_id: int):
"""Open `$EDITOR` to take notes about task with ID `task_id`."""
task_uuid = os.popen(f"task _get {task_id}.uuid").read().rstrip()
if not task_uuid:
logging.error(f"{task_id} has no UUID!")
sys.exit(1)
logging.debug(f"Task {task_id} has UUID {task_uuid}")
notes_dir = os.path.expanduser(NOTES_DIR)
os.makedirs(notes_dir, exist_ok=True)
notes_basename = f"{task_uuid}.wiki"
notes_file = os.path.join(notes_dir, notes_basename)
logging.debug(f"Notes file is {notes_file}")
if not os.path.exists(notes_file):
logging.info("Adding description to empty notes file")
task_description = os.popen(f"task _get {task_id}.description").read()
task_project = os.popen(f"task _get {task_id}.project").read().strip("\n")
task_tags = os.popen(f"task _get {task_id}.tags").read().split(",")
if len(task_tags):
task_tags = ":".join(task_tags).strip("\n") + ":"
time = datetime.datetime.now().strftime("%y-%m-%d %H:%M")
with open(notes_file, "w") as f:
f.write(f"%title: {task_description}")
f.write(f":task:{task_project}:{task_tags if len(task_tags) else ''}\n")
f.write(f"%date: {time}\n\n")
f.flush()
os.execlp(EDITOR, EDITOR, notes_file)
def update_task(task_id: int):
os.popen(f"task {task_id} modify +note")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Write Taskwarrior notes")
parser.add_argument('task_id', metavar='ID', type=int, help="ID of the task to note")
args = parser.parse_args()
write_note(args.task_id)
+8
View File
@@ -0,0 +1,8 @@
{ pkgs, config, lib, ... }:
{
home.file = {
".taskrc".source = ./taskrc;
".local/bin/task-note".source = ./bin/task-note.py;
};
}
+70
View File
@@ -0,0 +1,70 @@
# [Created by task 2.5.3 9/25/2021 00:53:42]
# Taskwarrior program configuration file.
# For more documentation, see http://taskwarrior.org or try 'man task', 'man task-color',
# 'man task-sync' or 'man taskrc'
# Here is an example of entries that use the default, override and blank values
# variable=foo -- By specifying a value, this overrides the default
# variable= -- By specifying no value, this means no default
# #variable=foo -- By commenting out the line, or deleting it, this uses the default
# Use the command 'task show' to see all defaults and overrides
# Files
data.location=~/.task
#taskd.server=172.16.11.240:53589
taskd.server=10.0.69.4:53589
taskd.ca=~/.task/keys/ca.cert
taskd.key=~/.task/keys/private.key
taskd.certificate=~/.task/keys/public.cert
taskd.trust=ignore hostname
taskd.credentials=mossnet\/anish\/1647259c-e340-405c-a38b-11ac18e34688
report.next.filter=(status:pending -WAITING limit:0)
# Color theme (uncomment one to use)
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/light-16.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/light-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-16.theme
#include /nix/store/nv663d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-red-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-green-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-blue-256.theme
include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-violets-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-yellow-green.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-gray-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/dark-gray-blue-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/solarized-dark-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/solarized-light-256.theme
#include /nix/store/nv662d85k32kkpqidrj64qy1lnihac4c-taskwarrior-2.5.3/share/doc/task/rc/no-color.theme
uda.priority.values=H,M,,L
news.version=2.6.0
# uda.reviewed.type=date
uda.reviewed.label=Reviewed
report._reviewed.description=Tasksh review report. Adjust the filter to your needs.
report._reviewed.columns=uuid
report._reviewed.sort=reviewed+,modified+
report._reviewed.filter=( reviewed.none: or reviewed.before:now-6days ) and ( +PENDING or +WAITING )
report.list.columns=id,priority,project,tags,recur.indicator,scheduled.countdown,due,until.remaining,description.count
report.list.labels=ID,P,Project,Tags,R,Sch,Due,Until,Description
urgency.user.project.wait.coefficient=-10.0
urgency.user.project.craft.coefficient=1.9
urgency.user.project.chores.coefficient=0.8
urgency.user.tag.think.coefficient=-7.0
urgency.user.tag.purchase.coefficient=-1.2
urgency.user.project.glam.coefficient=-1.3
report.unblocked.labels=ID,Deps,Proj,Tags,Due,Active,Description
report.unblocked.columns=id,depends,project,tags,due,start.active,description
report.next.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description,Urg
report.next.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency
color.project.chores=blue
color.tag.dev=cyan
color.project.craft=green
color.tag.purchase=rgb411
color.tag.next=black on yellow
color.sync.rejected=red
color.blocked=color0
color.blocking=red
# color.tag.ops=rgb032
color.project.none=rgb553
color.footnote=yellow
+5
View File
@@ -0,0 +1,5 @@
{ ... }:
# recommend using `hashedPassword`
{
users.users.root.password = "";
}