refactor(users/glittershark): Rename to grfn

Rename my //users directory and all places that refer to glittershark to
grfn, including nix references and documentation.

This may require some extra attention inside of gerrit's database after
it lands to allow me to actually push things.

Change-Id: I4728b7ec2c60024392c1c1fa6e0d4a59b3e266fa
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2933
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: lukegb <lukegb@tvl.fyi>
Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
Griffin Smith 2021-04-11 17:53:27 -04:00 committed by glittershark
parent 968effb5dc
commit 6266c5d32f
362 changed files with 52 additions and 56 deletions

View file

@ -0,0 +1,56 @@
{ config, lib, pkgs, ... }:
{
programs.alacritty = {
enable = true;
settings = {
font.size = 6;
font.normal.family = "Meslo LGSDZ Nerd Font";
draw_bold_text_with_bright_colors = false;
key_bindings = [
{
key = "Escape";
mods = "Control";
action = "ToggleViMode";
}
];
colors = with import ../common/solarized.nix; rec {
# Default colors
primary = {
background = base3;
foreground = base00;
};
cursor = {
text = base3;
cursor = base00;
};
# Normal colors
normal = {
inherit red green yellow blue magenta cyan;
black = base02;
white = base2;
};
# Bright colors
# bright = normal;
bright = {
black = base03;
red = orange;
green = base01;
yellow = base00;
blue = base0;
magenta = violet;
cyan = base1;
white = base3;
};
vi_mode_cursor.cursor = red;
};
};
};
}

View file

@ -0,0 +1,58 @@
{ config, lib, pkgs, ... }:
{
home.packages = [ config.lib.depot.third_party.alsi ];
xdg.configFile."alsi/alsi.logo" = {
source = ./nixos-logo.txt;
force = true;
};
xdg.configFile."alsi/alsi.conf" = {
force = true;
text = ''
#!${pkgs.perl}/bin/perl
scalar {
ALSI_VERSION => "0.4.8",
COLORS_FILE => "/${config.home.homeDirectory}/.config/alsi/alsi.colors",
DE_FILE => "/${config.home.homeDirectory}/.config/alsi/alsi.de",
DEFAULT_COLOR_BOLD => "blue",
DEFAULT_COLOR_NORMAL => "blue",
DF_COMMAND => "df -Th -x sys -x tmpfs -x devtmpfs &>/dev/stdout",
GTK2_RC_FILE => "/${config.home.homeDirectory}/.gtkrc-2.0",
GTK3_RC_FILE => "/${config.home.homeDirectory}/.config/gtk-3.0/settings.ini",
LOGO_FILE => "/${config.home.homeDirectory}/.config/alsi/alsi.logo",
OUTPUT_FILE => "/${config.home.homeDirectory}/.config/alsi/alsi.output",
# PACKAGES_PATH => "/var/lib/pacman/local/",
PS_COMMAND => "ps -A",
USAGE_COLORS => 0,
USAGE_COLORS_BOLD => 0,
USAGE_PRECENT_GREEN => 50,
USAGE_PRECENT_RED => 100,
USAGE_PRECENT_YELLOW => 85,
USE_LOGO_FROM_FILE => 1,
USE_VALUES_COLOR => 0,
WM_FILE => "/${config.home.homeDirectory}/.config/alsi/alsi.wm",
}
'';
};
xdg.configFile."alsi/alsi.colors".text = ''
#!${pkgs.perl}/bin/perl
# Colors for alsi
scalar {
black => {normal => "\e[0;30m", bold => "\e[1;30m"},
red => {normal => "\e[0;31m", bold => "\e[1;31m"},
green => {normal => "\e[0;32m", bold => "\e[1;32m"},
yellow => {normal => "\e[0;33m", bold => "\e[1;33m"},
default => {normal => "\e[0;34m", bold => "\e[1;34m"},
blue => {normal => "\e[0;34m", bold => "\e[1;34m"},
purple => {normal => "\e[0;35m", bold => "\e[1;35m"},
cyan => {normal => "\e[0;36m", bold => "\e[1;36m"},
white => {normal => "\e[0;37m", bold => "\e[1;37m"},
reset => "\e[0m",
}
'';
}

View file

@ -0,0 +1,101 @@
{ config, lib, pkgs, ... }:
# Everything in here needs to work on linux or darwin
{
imports = [
../modules/shell.nix
../modules/development.nix
../modules/emacs.nix
../modules/vim.nix
../modules/tarsnap.nix
../modules/twitter.nix
../modules/lib/cloneRepo.nix
];
nixpkgs.config.allowUnfree = true;
programs.password-store.enable = true;
grfn.impure.clonedRepos.passwordStore = {
github = "glittershark/pass";
path = ".local/share/password-store";
};
home.packages = with pkgs; [
# System utilities
bat
htop
killall
bind
zip unzip
tree
ncat
bc
pv
# Security
gnupg
keybase
openssl
# Nix things
nixfmt
nix-prefetch-github
nix-review
cachix
(writeShellScriptBin "rebuild-mugwump" ''
set -eo pipefail
cd ~/code/depot
nix build -f . users.grfn.system.system.mugwumpSystem -o /tmp/mugwump
nix copy -f . users.grfn.system.system.mugwumpSystem \
--to ssh://mugwump
system=$(readlink -ef /tmp/mugwump)
ssh mugwump sudo nix-env -p /nix/var/nix/profiles/system --set $system
ssh mugwump sudo $system/bin/switch-to-configuration switch
'')
];
programs.ssh = {
enable = true;
matchBlocks = {
"home" = {
host = "home.gws.fyi";
forwardAgent = true;
};
"dobharchu" = {
host = "dobharchu";
hostname = "172.16.0.4";
forwardAgent = true;
user = "griffin";
};
"cerberus" = {
host = "cerberus";
hostname = "172.16.0.3";
forwardAgent = true;
user = "griffin";
};
"mugwump" = {
host = "mugwump";
hostname = "172.16.0.5";
forwardAgent = true;
};
"roswell" = {
host = "roswell";
hostname = "18.223.118.13";
forwardAgent = true;
};
};
};
programs.direnv = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
}

View file

@ -0,0 +1,190 @@
{ config, lib, pkgs, ... }:
let
clj2nix = pkgs.callPackage (pkgs.fetchFromGitHub {
owner = "hlolli";
repo = "clj2nix";
rev = "3ab3480a25e850b35d1f532a5e4e7b3202232383";
sha256 = "1lry026mlpxp1j563qs13nhxf37i2zpl7lh0lgfdwc44afybqka6";
}) {};
pg-dump-upsert = pkgs.buildGoModule rec {
pname = "pg-dump-upsert";
version = "165258deaebded5e9b88f7a0acf3a4b7350e7bf4";
src = pkgs.fetchFromGitHub {
owner = "tomyl";
repo = "pg-dump-upsert";
rev = version;
sha256 = "1an4h8jjbj3r618ykjwk9brii4h9cxjqy47c4c8rivnvhimgf4wm";
};
vendorSha256 = "1a5fx6mrv30cl46kswicd8lf5i5shn1fykchvbnbhdpgxhbz6qi4";
};
in
with lib;
{
imports = [
./lib/zshFunctions.nix
./development/kube.nix
# TODO(grfn): agda build is broken in the nixpkgs checkout
# ./development/agda.nix
./development/rust.nix
];
home.packages = with pkgs; [
jq
yq
gitAndTools.hub
gitAndTools.tig
gitAndTools.gh
shellcheck
httpie
entr
gnumake
inetutils
tokei
jsonnet
ngrok
gdb
lldb
hyperfine
clang-tools
clj2nix
clojure
leiningen
clj-kondo
pg-dump-upsert
nodePackages.prettier
] ++ optionals (stdenv.isLinux) [
julia
valgrind
];
programs.git = {
enable = true;
package = pkgs.gitFull;
userEmail = "root@gws.fyi";
userName = "Griffin Smith";
ignores = [
"*.sw*"
".classpath"
".project"
".settings/"
".dir-locals.el"
".stack-work-profiling"
".projectile"
];
extraConfig = {
github.user = "glittershark";
merge.conflictstyle = "diff3";
rerere.enabled = "true";
};
delta = {
enable = true;
options = {
theme = "Solarized (light)";
hunk-style = "plain";
commit-style = "box";
};
};
};
home.file.".psqlrc".text = ''
\set QUIET 1
\timing
\set ON_ERROR_ROLLBACK interactive
\set VERBOSITY verbose
\x auto
\set PROMPT1 '%[%033[1m%]%M/%/%R%[%033[0m%]%# '
\set PROMPT2 '...%# '
\set HISTFILE ~/.psql_history- :DBNAME
\set HISTCONTROL ignoredups
\pset null [null]
\unset QUIET
'';
programs.readline = {
enable = true;
extraConfig = ''
set editing-mode vi
'';
};
programs.zsh = {
shellAliases = {
# Git
"gwip" = "git add . && git commit -am wip";
"gpr" = "g pull-request";
"gcl" = "git clone";
"grs" = "gr --soft";
"grhh" = "grh HEAD";
"grh" = "gr --hard";
"gr" = "git reset";
"gcb" = "gc -b";
"gco" = "gc";
"gcd" = "gc development";
"gcm" = "gc master";
"gcc" = "gc canon";
"gc" = "git checkout";
"gbg" = "git branch | grep";
"gba" = "git branch -a";
"gb" = "git branch";
"gcv" = "git commit --verbose";
"gci" = "git commit";
"gm" = "git merge";
"gdc" = "gd --cached";
"gd" = "git diff";
"gsl" = "git stash list";
"gss" = "git show stash";
"gsad" = "git stash drop";
"gsa" = "git stash";
"gst" = "gs";
"gs" = "git status";
"gg" = "gl --decorate --oneline --graph --date-order --all";
"gl" = "git log";
"gf" = "git fetch";
"gur" = "gu --rebase";
"gu" = "git pull";
"gpf" = "gp -f";
"gpa" = "gp --all";
"gpu" = "git push -u origin \"$(git symbolic-ref --short HEAD)\"";
"gp" = "git push";
"ganw" = "git diff -w --no-color | git apply --cached --ignore-whitespace";
"ga" = "git add";
"gnp" = "git --no-pager";
"g" = "git";
"git" = "hub";
"grim" = "git fetch && git rebase -i --autostash origin/master";
"grom" = "git fetch && git rebase --autostash origin/master";
"groc" = "git fetch && git rebase --autostash origin/canon";
"grc" = "git rebase --continue";
"gcan" = "git commit --amend --no-edit";
"grl" = "git reflog";
# Haskell
"crl" = "cabal repl";
"cr" = "cabal run";
"cnb" = "cabal new-build";
"cob" = "cabal old-build";
"cnr" = "cabal new-run";
"cor" = "cabal old-run";
"ho" = "hoogle";
};
functions = {
gdelmerged = ''
git branch --merged | egrep -v 'master' | tr -d '+ ' | xargs git branch -d
'';
};
};
}

View file

@ -0,0 +1,58 @@
{ config, lib, pkgs, ... }:
let
agda-categories = with pkgs.agdaPackages; mkDerivation rec {
pname = "agda-categories";
version = "2128fab";
src = pkgs.fetchFromGitHub {
owner = "agda";
repo = "agda-categories";
rev = version;
sha256 = "08mc20qaz9vp5rhi60rh8wvjkg5aby3bgwwdhfnxha1663qf1q24";
};
buildInputs = [ standard-library ];
};
in
{
imports = [
../lib/cloneRepo.nix
];
home.packages = with pkgs; [
(pkgs.agda.withPackages
(p: with p; [
p.standard-library
]))
];
grfn.impure.clonedRepos = {
agda-stdlib = {
github = "agda/agda-stdlib";
path = "code/agda-stdlib";
};
agda-categories = {
github = "agda/agda-categories";
path = "code/agda-categories";
};
categories-examples = {
github = "agda/categories-examples";
path = "code/categories-examples";
};
};
home.file.".agda/defaults".text = ''
standard-library
'';
home.file.".agda/libraries".text = ''
${config.home.homeDirectory}/code/agda-stdlib/standard-library.agda-lib
${config.home.homeDirectory}/code/agda-categories/agda-categories.agda-lib
'';
}

View file

@ -0,0 +1,34 @@
{ config, lib, pkgs, ... }:
{
home.packages = with pkgs; [
kubectl
kubetail
sops
kubie
# pkgs-unstable.argocd # provided by urbos
];
programs.zsh.shellAliases = {
"kc" = "kubectl";
"kg" = "kc get";
"kga" = "kc get --all-namespaces";
"kpd" = "kubectl get pods";
"kpa" = "kubectl get pods --all-namespaces";
"klf" = "kubectl logs -f";
"kdep" = "kubectl get deployments";
"ked" = "kubectl edit deployment";
"kpw" = "kubectl get pods -w";
"kew" = "kubectl get events -w";
"kdel" = "kubectl delete";
"knw" = "kubectl get nodes -w";
"kev" = "kubectl get events --sort-by='.metadata.creationTimestamp'";
"arsy" = "argocd app sync --prune";
};
home.file.".kube/kubie.yaml".text = ''
shell: zsh
prompt:
zsh_use_rps1: true
'';
}

View file

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
{
home.packages = with pkgs; [
rustup
rust-analyzer
cargo-edit
cargo-expand
sccache
];
programs.zsh.shellAliases = {
"cg" = "cargo";
"cb" = "cargo build";
"ct" = "cargo test";
"ctw" = "fd -e rs | entr cargo test";
"cch" = "cargo check";
};
home.file.".cargo/config".text = ''
[build]
rustc-wrapper = "${pkgs.sccache}/bin/sccache"
'';
}

View file

@ -0,0 +1,99 @@
{ pkgs, lib, config, ... }:
with lib;
let
# doom-emacs = pkgs.callPackage (builtins.fetchTarball {
# url = https://github.com/vlaci/nix-doom-emacs/archive/master.tar.gz;
# }) {
# doomPrivateDir = ./doom.d; # Directory containing your config.el init.el
# # and packages.el files
# };
depot = config.lib.depot;
in {
imports = [
./lib/cloneRepo.nix
];
# home.packages = [ doom-emacs ];
# home.file.".emacs.d/init.el".text = ''
# (load "default.el")
# '';
#
config = mkMerge [
{
home.packages = with pkgs; [
# LaTeX (for org export)
(pkgs.texlive.combine {
inherit (pkgs.texlive)
scheme-basic collection-fontsrecommended ulem
fncychap titlesec tabulary varwidth framed fancyvrb float parskip
wrapfig upquote capt-of needspace;
})
ispell
ripgrep
coreutils
fd
clang
gnutls
];
nixpkgs.overlays = [
(import (builtins.fetchTarball {
url = "https://github.com/nix-community/emacs-overlay/archive/54afb061bdd12c61bbfcc13bad98b7a3aab7d8d3.tar.gz";
sha256 = "0hrbg65d5h0cb0nky7a46md7vlvhajq1hf0328l2f7ln9hznqz6j";
}))
];
programs.emacs = {
enable = true;
package = pkgs.emacsUnstable;
extraPackages = (epkgs:
(with depot.tools.emacs-pkgs; [
dottime
tvl
])
++ (with depot.third_party.emacs; [
vterm
])
);
};
grfn.impure.clonedRepos = {
orgClubhouse = {
github = "glittershark/org-clubhouse";
path = "code/org-clubhouse";
};
doomEmacs = {
github = "hlissner/doom-emacs";
path = ".emacs.d";
after = ["emacs.d"];
onClone = "bin/doom install";
};
"emacs.d" = {
github = "glittershark/emacs.d";
path = ".doom.d";
after = ["orgClubhouse"];
};
};
programs.zsh.shellAliases = {
"ec" = "emacsclient";
};
}
(mkIf pkgs.stdenv.isLinux {
# Notes
services.syncthing = {
enable = true;
tray = true;
};
})
];
}

View file

@ -0,0 +1,91 @@
{ lib, pkgs, config, ... }:
with lib;
let
# from home-manager/modules/services/lieer.nix
escapeUnitName = name:
let
good = upperChars ++ lowerChars ++ stringToCharacters "0123456789-_";
subst = c: if any (x: x == c) good then c else "-";
in stringAsChars subst name;
accounts = {
personal = {
primary = true;
address = "root@gws.fyi";
aliases = [ "grfn@gws.fyi" ];
passEntry = "root-gws-msmtp";
};
work = {
address = "griffin@readyset.io";
passEntry = "readyset/msmtp";
};
};
in {
programs.lieer.enable = true;
programs.notmuch.enable = true;
services.lieer.enable = true;
programs.msmtp.enable = true;
home.packages = with pkgs; [
mu
msmtp
];
# nixpkgs.overlays = [(self: super: {
# notifymuch = self.python3Packages.callPackage ../../pkgs/notifymuch.nix {};
# })];
systemd.user.services = mapAttrs' (name: account: {
name = escapeUnitName "lieer-${name}";
value.Service = {
ExecStart = mkForce "${pkgs.writeShellScript "sync-${name}" ''
${pkgs.gmailieer}/bin/gmi sync --path ~/mail/${name}
''}";
Environment = "NOTMUCH_CONFIG=${config.home.sessionVariables.NOTMUCH_CONFIG}";
};
}) accounts;
# xdg.configFile."notifymuch/notifymuch.cfg".text = generators.toINI {} {
# notifymuch = {
# query = "is:unread and is:important";
# mail_client = "";
# recency_interval_hours = "48";
# hidden_tags = "inbox unread attachment replied sent encrypted signed";
# };
# };
accounts.email.maildirBasePath = "mail";
accounts.email.accounts = mapAttrs (_: params@{ passEntry, ... }: {
realName = "Griffin Smith";
passwordCommand = "pass ${passEntry}";
flavor = "gmail.com";
imapnotify = {
enable = true;
boxes = [ "Inbox" ];
};
gpg = {
key = "0F11A989879E8BBBFDC1E23644EF5B5E861C09A7";
signByDefault = true;
};
notmuch.enable = true;
lieer = {
enable = true;
sync = {
enable = true;
frequency = "*:*";
};
};
msmtp.enable = true;
} // builtins.removeAttrs params ["passEntry"]) accounts;
}

View file

@ -0,0 +1,22 @@
{ config, lib, pkgs, ... }:
{
xdg.mimeApps = rec {
enable = true;
defaultApplications = {
"text/html" = [ "firefox.desktop" ];
"x-scheme-handler/http" = [ "firefox.desktop" ];
"x-scheme-handler/https" = [ "firefox.desktop" ];
"x-scheme-handler/ftp" = [ "firefox.desktop" ];
"x-scheme-handler/chrome" = [ "firefox.desktop" ];
"application/x-extension-htm" = [ "firefox.desktop" ];
"application/x-extension-html" = [ "firefox.desktop" ];
"application/x-extension-shtml" = [ "firefox.desktop" ];
"application/xhtml+xml" = [ "firefox.desktop" ];
"application/x-extension-xhtml" = [ "firefox.desktop" ];
"application/x-extension-xht" = [ "firefox.desktop" ];
};
associations.added = defaultApplications;
};
}

View file

@ -0,0 +1,59 @@
{ config, lib, pkgs, ... }:
with pkgs;
with lib;
let
df-orig = dwarf-fortress-packages.dwarf-fortress-original;
df-full = (dwarf-fortress-packages.dwarf-fortress-full.override {
theme = null;
enableIntro = false;
enableFPS = true;
});
init = runCommand "init.txt" {} ''
substitute "${df-orig}/data/init/init.txt" $out \
--replace "[INTRO:YES]" "[INTRO:NO]" \
--replace "[VOLUME:255]" "[VOLUME:0]" \
--replace "[FPS:NO]" "[FPS:YES]"
'';
d_init = runCommand "d_init.txt" {} ''
substitute "${df-orig}/data/init/d_init.txt" $out \
--replace "[AUTOSAVE:NONE]" "[AUTOSAVE:SEASONAL]" \
--replace "[AUTOSAVE_PAUSE:NO]" "[AUTOSAVE_PAUSE:YES]" \
--replace "[INITIAL_SAVE:NO]" "[INITIAL_SAVE:YES]" \
--replace "[EMBARK_WARNING_ALWAYS:NO]" "[EMBARK_WARNING_ALWAYS:YES]" \
--replace "[VARIED_GROUND_TILES:YES]" "[VARIED_GROUND_TILES:NO]" \
--replace "[SHOW_FLOW_AMOUNTS:NO]" "[SHOW_FLOW_AMOUNTS:YES]"
'';
df = runCommand "dwarf-fortress" {} ''
mkdir -p $out/bin
sed \
-e '4icp -f ${init} "$DF_DIR/data/init/init.txt"' \
-e '4icp -f ${d_init} "$DF_DIR/data/init/d_init.txt"' \
< "${df-full}/bin/dwarf-fortress" >"$out/bin/dwarf-fortress"
shopt -s extglob
ln -s ${df-full}/bin/!(dwarf-fortress) $out/bin
chmod +x $out/bin/dwarf-fortress
'';
in mkMerge [
{
home.packages = [
crawl
xonotic
];
}
(mkIf stdenv.isLinux {
home.packages = [
df
multimc
];
})
]

View file

@ -0,0 +1,365 @@
{ config, lib, pkgs, ... }:
let
mod = "Mod4";
solarized = import ../common/solarized.nix;
# TODO pull this out into lib
emacsclient = eval: pkgs.writeShellScript "emacsclient-eval" ''
msg=$(emacsclient --eval '${eval}' 2>&1)
echo "''${msg:1:-1}"
'';
screenlayout = {
home = pkgs.writeShellScript "screenlayout_home.sh" ''
xrandr \
--output eDP-1 --mode 1920x1200 --pos 0x2160 --rotate normal \
--output DP-1 --off \
--output DP-2 --off \
--output DP-3 --mode 3840x2160 --pos 0x0 --rotate normal \
--output DP-4 --off
'';
};
inherit (builtins) map;
inherit (lib) mkMerge range;
in {
options = with lib; {
system.machine.wirelessInterface = mkOption {
description = ''
Name of the primary wireless interface. Used by i3status, etc.
'';
default = "wlp3s0";
type = types.str;
};
system.machine.i3FontSize = mkOption {
description = "Font size to use in i3 window decorations etc.";
default = 6;
type = types.int;
};
};
config =
let decorationFont = "MesloLGSDZ ${toString config.system.machine.i3FontSize}"; in
{
home.packages = with pkgs; [
rofi
rofi-pass
python38Packages.py3status
i3lock
i3status
dconf # for gtk
# Screenshots
maim
# GIFs
picom
peek
(pkgs.writeShellScriptBin "lock" ''
playerctl pause
${pkgs.i3lock}/bin/i3lock -c 222222
'')
];
xsession.scriptPath = ".xsession";
xsession.windowManager.i3 = {
enable = true;
config = {
modifier = mod;
keybindings =
mkMerge (
(map
(n: {
"${mod}+${toString n}" =
"workspace ${toString n}";
"${mod}+Shift+${toString n}" =
"move container to workspace ${toString n}";
})
(range 0 9))
++ [(rec {
"${mod}+h" = "focus left";
"${mod}+j" = "focus down";
"${mod}+k" = "focus up";
"${mod}+l" = "focus right";
"${mod}+semicolon" = "focus parent";
"${mod}+Shift+h" = "move left";
"${mod}+Shift+j" = "move down";
"${mod}+Shift+k" = "move up";
"${mod}+Shift+l" = "move right";
"${mod}+Shift+x" = "kill";
"${mod}+Return" = "exec alacritty";
"${mod}+Shift+s" = "split h";
"${mod}+Shift+v" = "split v";
"${mod}+e" = "layout toggle split";
"${mod}+w" = "layout tabbed";
"${mod}+s" = "layout stacking";
"${mod}+f" = "fullscreen";
"${mod}+Shift+r" = "restart";
"${mod}+r" = "mode resize";
# Marks
"${mod}+Shift+m" = ''exec i3-input -F "mark %s" -l 1 -P 'Mark: ' '';
"${mod}+m" = ''exec i3-input -F '[con_mark="%s"] focus' -l 1 -P 'Go to: ' '';
# Screenshots
"${mod}+q" = "exec \"maim | xclip -selection clipboard -t image/png\"";
"${mod}+Shift+q" = "exec \"maim -s | xclip -selection clipboard -t image/png\"";
"${mod}+Ctrl+q" = "exec ${pkgs.writeShellScript "peek.sh" ''
${pkgs.picom}/bin/picom &
picom_pid=$!
${pkgs.peek}/bin/peek || true
kill -SIGINT $picom_pid
''}";
# Launching applications
"${mod}+u" = "exec ${pkgs.writeShellScript "rofi" ''
rofi \
-modi 'combi' \
-combi-modi "window,drun,ssh,run" \
-font '${decorationFont}' \
-show combi
''}";
# Passwords
"${mod}+p" = "exec rofi-pass -font '${decorationFont}'";
# Media
"XF86AudioPlay" = "exec playerctl play-pause";
"XF86AudioNext" = "exec playerctl next";
"XF86AudioPrev" = "exec playerctl previous";
"XF86AudioRaiseVolume" = "exec pulseaudio-ctl up";
"XF86AudioLowerVolume" = "exec pulseaudio-ctl down";
"XF86AudioMute" = "exec pulseaudio-ctl mute";
# Lock
Pause = "exec lock";
# Sleep/hibernate
# "${mod}+Escape" = "exec systemctl suspend";
# "${mod}+Shift+Escape" = "exec systemctl hibernate";
# Scratch buffer
"${mod}+minus" = "scratchpad show";
"${mod}+Shift+minus" = "move scratchpad";
"${mod}+space" = "focus mode_toggle";
"${mod}+Shift+space" = "floating toggle";
# Screen Layout
"${mod}+Shift+t" = "exec xrandr --auto";
"${mod}+t" = "exec ${screenlayout.home}";
"${mod}+Ctrl+t" = "exec ${pkgs.writeShellScript "fix_term.sh" ''
xrandr --output eDP-1 --off && ${screenlayout.home}
''}";
# Notifications
"${mod}+Shift+n" = "exec killall -SIGUSR1 .dunst-wrapped";
"${mod}+n" = "exec killall -SIGUSR2 .dunst-wrapped";
})]);
fonts = [ decorationFont ];
colors = with solarized; rec {
focused = {
border = base01;
background = base01;
text = base3;
indicator = red;
childBorder = base02;
};
focusedInactive = focused // {
border = base03;
background = base03;
# text = base1;
};
unfocused = focusedInactive;
background = base03;
};
modes.resize = {
l = "resize shrink width 5 px or 5 ppt";
k = "resize grow height 5 px or 5 ppt";
j = "resize shrink height 5 px or 5 ppt";
h = "resize grow width 5 px or 5 ppt";
Return = "mode \"default\"";
};
bars = [{
statusCommand =
let i3status-conf = pkgs.writeText "i3status.conf" ''
general {
output_format = i3bar
colors = true
color_good = "#859900"
interval = 1
}
order += "external_script current_task"
order += "external_script inbox"
order += "spotify"
order += "volume_status"
order += "wireless ${config.system.machine.wirelessInterface}"
# order += "ethernet enp3s0f0"
order += "cpu_usage"
order += "battery 0"
# order += "volume master"
order += "time"
order += "tztime utc"
mpd {
format = "%artist - %album - %title"
}
wireless ${config.system.machine.wirelessInterface} {
format_up = "W: (%quality - %essid - %bitrate) %ip"
format_down = "W: -"
}
ethernet enp3s0f0 {
format_up = "E: %ip"
format_down = "E: -"
}
battery 0 {
format = "%status %percentage"
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 10
}
cpu_usage {
format = "CPU: %usage"
}
load {
format = "%5min"
}
time {
format = " %a %h %d %I:%M "
}
spotify {
color_playing = "#fdf6e3"
color_paused = "#93a1a1"
format_stopped = ""
format_down = ""
format = "{title} - {artist} ({album})"
}
external_script inbox {
script_path = '${emacsclient "(grfn/num-inbox-items-message)"}'
format = 'Inbox: {output}'
cache_timeout = 120
color = "#93a1a1"
}
external_script current_task {
script_path = '${emacsclient "(grfn/org-current-clocked-in-task-message)"}'
# format = '{output}'
cache_timeout = 60
color = "#93a1a1"
}
tztime utc {
timezone = "UTC"
format = " %H·%M "
}
volume_status {
format = " {percentage}"
format_muted = " X"
# device = "default"
# mixer_idx = 0
}
'';
in "py3status -c ${i3status-conf}";
fonts = [ decorationFont ];
position = "top";
colors = with solarized; rec {
background = base03;
statusline = base3;
separator = base1;
activeWorkspace = {
border = base03;
background = base1;
text = base3;
};
focusedWorkspace = activeWorkspace;
inactiveWorkspace = activeWorkspace // {
background = base01;
};
urgentWorkspace = activeWorkspace // {
background = red;
};
};
}];
};
};
services.dunst = {
enable = true;
settings = with solarized; {
global = {
font = "MesloLGSDZ ${toString (config.system.machine.i3FontSize * 1.5)}";
allow_markup = true;
format = "<b>%s</b>\n%b";
sort = true;
alignment = "left";
geometry = "600x15-40+40";
idle_threshold = 120;
separator_color = "frame";
separator_height = 1;
word_wrap = true;
padding = 8;
horizontal_padding = 8;
max_icon_size = 45;
};
frame = {
width = 0;
color = "#aaaaaa";
};
shortcuts = {
close = "ctrl+space";
close_all = "ctrl+shift+space";
history = "ctrl+grave";
context = "ctrl+shift+period";
};
urgency_low = {
background = base03;
foreground = base3;
timeout = 5;
};
urgency_normal = {
background = base02;
foreground = base3;
timeout = 7;
};
urgency_critical = {
background = red;
foreground = base3;
timeout = 0;
};
};
};
gtk = {
enable = true;
iconTheme.name = "Adwaita";
theme.name = "Adwaita";
};
};
}

View file

@ -0,0 +1,67 @@
{ lib, config, ... }:
with lib;
{
options = {
grfn.impure.clonedRepos = mkOption {
description = "Repositories to clone";
default = {};
type = with types; loaOf (
let sm = submodule {
options = {
url = mkOption {
type = nullOr str;
description = "URL of repository to clone";
default = null;
};
github = mkOption {
type = nullOr str;
description = "Github owner/repo of repository to clone";
default = null;
};
path = mkOption {
type = str;
description = "Path to clone to";
};
onClone = mkOption {
type = str;
description = ''
Shell command to run after cloning the repo for the first time.
Runs inside the repo itself.
'';
default = "";
};
after = mkOption {
type = listOf str;
description = "Activation hooks that this repository must be cloned after";
default = [];
};
};
};
in addCheck sm (cr: (! isNull cr.url || ! isNull cr.github))
);
};
};
config = {
home.activation =
mapAttrs
(_: {
url, path, github, onClone, after, ...
}:
let repoURL = if isNull url then "git@github.com:${github}" else url;
in hm.dag.entryAfter (["writeBoundary"] ++ after) ''
$DRY_RUN_CMD mkdir -p $(dirname "${path}")
if [[ ! -d ${path} ]]; then
$DRY_RUN_CMD git clone "${repoURL}" "${path}"
pushd ${path}
$DRY_RUN_CMD ${onClone}
popd
fi
'')
config.grfn.impure.clonedRepos;
};
}

View file

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
with lib;
{
options = {
programs.zsh.functions = mkOption {
description = "An attribute set that maps function names to their source";
default = {};
type = with types; attrsOf (either str path);
};
};
config.programs.zsh.initExtra = concatStringsSep "\n" (
mapAttrsToList (name: funSrc: ''
function ${name}() {
${funSrc}
}
'') config.programs.zsh.functions
);
}

View file

@ -0,0 +1,26 @@
(((((( ###%###### ##%###/
,(((((((/( #%#%#%#%# .#%#%#%#%#
((((((/// %#######%. #####%###/
(((((/(//, /##%###%###%######
(((////// #####%########(
.(((((((((((((((///////////////#%%%######## ((
(((((((((((((((///////////////////######### .((((
((((((((((((((((/(//////////////////########## ((((((((
(######### ######### (((((((((
######### #########/((((((((((
*######### .#######(((((((((
###%################### ####(//((((((((((((((((
####%################## .#////////((((((((((((((
%%%%%%%%%%%%%%#######(( ////////////((((((((((((
###%#######%#######////. ///////////////////((((
###%###%#///////( /////////
.####%#### ///////// /////////,
%#%#%#%#%* /////////( /////////
.#####%# ////////(######################%#######%#####,
%#### (////////#####################%###%###%###%
.# (//////(//((###################%#######%##%
(//((((((((((( #####%%%%(
//(/(((((((((((((( ######%##
((((((((( ((((((((( #####%###/
((((((((( /((((((((( .###%####%
(((((( ((((((((( %#%#%#/

View file

@ -0,0 +1,69 @@
{ config, lib, pkgs, ... }:
with pkgs;
let
libuiohook = stdenv.mkDerivation rec {
pname = "libuiohook";
version = "1.1";
src = fetchFromGitHub {
owner = "kwhat";
repo = "libuiohook";
rev = version;
sha256 = "1isfxn3cfrdqq22d3mlz2lzm4asf9gprs7ww2xy9c3j3srk9kd7r";
};
preConfigure = ''
./bootstrap.sh
'';
nativeBuildInputs = [ pkg-config ];
buildInputs = [
libtool autoconf automake
x11
xorg.libXtst
xorg.libXinerama
xorg.libxkbfile
libxkbcommon
];
};
obs-input-overlay = stdenv.mkDerivation rec {
pname = "obs-input-overlay";
version = "4.8";
src = fetchFromGitHub {
owner = "univrsal";
repo = "input-overlay";
rev = "v${version}";
sha256 = "1dklg0dx9ijwyhgwcaqz859rbpaivmqxqvh9w3h4byrh5pnkz8bf";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake ];
buildInputs = [ obs-studio libuiohook ];
postPatch = ''
sed -i CMakeLists.txt \
-e '2iinclude(${obs-studio.src}/cmake/Modules/ObsHelpers.cmake)' \
-e '2ifind_package(LibObs REQUIRED)'
'';
cmakeFlags = [
"-Wno-dev"
];
};
in
{
home.packages = [
obs-studio
obs-input-overlay
];
xdg.configFile."obs-studio/plugins/input-overlay/bin/64bit/input-overlay.so".source =
"${obs-input-overlay}/lib/obs-plugins/input-overlay.so";
xdg.configFile."obs-studio/plugins/input-overlay/data".source =
"${obs-input-overlay}/share/obs/obs-plugins/input-overlay";
xdg.configFile."obs-studio/plugins/obs-v4l2sink/bin/64bit/obs-v4l2sink.so".source =
"${pkgs.obs-v4l2sink}/share/obs/obs-plugins/v4l2sink/bin/64bit/v4l2sink.so";
}

View file

@ -0,0 +1,44 @@
{ config, lib, pkgs, ... }:
let
pttKeycode = "152";
sourceID = "3";
mute = pkgs.writeShellScript "mute-mic" ''
xset -r ${pttKeycode}
${pkgs.pulseaudio}/bin/pactl set-source-mute ${sourceID} 1
'';
unmute = pkgs.writeShellScript "unmute-mic" ''
xset -r ${pttKeycode}
${pkgs.pulseaudio}/bin/pactl set-source-mute ${sourceID} 0
'';
in
{
home.packages = with pkgs; [
xbindkeys
];
home.file.".xbindkeysrc.scm".text = ''
(xbindkey '("c:${pttKeycode}") "${unmute}")
(xbindkey '(release "c:${pttKeycode}") "${mute}")
'';
systemd.user.services."xbindkeys" = {
Unit = {
Description = "Keybind daemon for push-to-talk";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = { WantedBy = [ "graphical-session.target" ]; };
Service = {
ExecStart = "${pkgs.xbindkeys}/bin/xbindkeys -n -v";
};
};
}

View file

@ -0,0 +1,151 @@
#!/bin/zsh -f
# vim: ft=zsh:
# MIT License
# For my own and others sanity
# git:
# %b => current branch
# %a => current action (rebase/merge)
# prompt:
# %F => color dict
# %f => reset color
# %~ => current path
# %* => time
# %n => username
# %m => shortname host
# %(?..) => prompt conditional - %(condition.true.false)
# turns seconds into human readable time
# 165392 => 1d 21h 56m 32s
prompt_pure_human_time() {
local tmp=$1
local days=$(( tmp / 60 / 60 / 24 ))
local hours=$(( tmp / 60 / 60 % 24 ))
local minutes=$(( tmp / 60 % 60 ))
local seconds=$(( tmp % 60 ))
(( $days > 0 )) && echo -n "${days}d "
(( $hours > 0 )) && echo -n "${hours}h "
(( $minutes > 0 )) && echo -n "${minutes}m "
echo "${seconds}s"
}
is_git_repo() {
command git rev-parse --is-inside-work-tree &>/dev/null
return $?
}
# fastest possible way to check if repo is dirty
prompt_pure_git_dirty() {
# check if we're in a git repo
is_git_repo || return
# check if it's dirty
[[ "$PURE_GIT_UNTRACKED_DIRTY" == 0 ]] && local umode="-uno" || local umode="-unormal"
command test -n "$(git status --porcelain --ignore-submodules ${umode})"
(($? == 0)) && echo '*'
}
prompt_pure_git_wip() {
is_git_repo || return
local subject="$(command git show --pretty=%s --quiet HEAD 2>/dev/null)"
[ "$subject" == 'wip' ] && echo '[WIP]'
}
# displays the exec time of the last command if set threshold was exceeded
prompt_pure_cmd_exec_time() {
local stop=$EPOCHSECONDS
local start=${cmd_timestamp:-$stop}
integer elapsed=$stop-$start
(($elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5})) && prompt_pure_human_time $elapsed
}
prompt_pure_preexec() {
cmd_timestamp=$EPOCHSECONDS
# shows the current dir and executed command in the title when a process is active
print -Pn "\e]0;"
echo -nE "$PWD:t: $2"
print -Pn "\a"
}
# string length ignoring ansi escapes
prompt_pure_string_length() {
echo ${#${(S%%)1//(\%([KF1]|)\{*\}|\%[Bbkf])}}
}
prompt_pure_nix_info() {
local packages_info=''
if [[ -z $NIX_SHELL_PACKAGES ]]; then
packages_info='[nix-shell]'
else
packages_info="{ $NIX_SHELL_PACKAGES }"
fi
case $IN_NIX_SHELL in
'pure')
echo "$fg_bold[green][nix-shell] "
;;
'impure')
echo "$fg_bold[magenta][nix-shell] "
;;
*) ;;
esac
}
prompt_pure_precmd() {
# shows the full path in the title
print -Pn '\e]0;%~\a'
# git info
vcs_info
local prompt_pure_preprompt="\n$(prompt_pure_nix_info)$fg_bold[green]$prompt_pure_username%F{blue}%~%F{yellow}$vcs_info_msg_0_`prompt_pure_git_dirty` $fg_no_bold[red]`prompt_pure_git_wip`%f %F{yellow}`prompt_pure_cmd_exec_time`%f "
print -P $prompt_pure_preprompt
# check async if there is anything to pull
# (( ${PURE_GIT_PULL:-1} )) && {
# # check if we're in a git repo
# command git rev-parse --is-inside-work-tree &>/dev/null &&
# # make sure working tree is not $HOME
# [[ "$(command git rev-parse --show-toplevel)" != "$HOME" ]] &&
# # check check if there is anything to pull
# command git fetch &>/dev/null &&
# # check if there is an upstream configured for this branch
# command git rev-parse --abbrev-ref @'{u}' &>/dev/null && {
# local arrows=''
# (( $(command git rev-list --right-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows='⇣'
# (( $(command git rev-list --left-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows+='⇡'
# print -Pn "\e7\e[A\e[1G\e[`prompt_pure_string_length $prompt_pure_preprompt`C%F{cyan}${arrows}%f\e8"
# }
# } &!
# reset value since `preexec` isn't always triggered
unset cmd_timestamp
}
prompt_pure_setup() {
# prevent percentage showing up
# if output doesn't end with a newline
export PROMPT_EOL_MARK=''
prompt_opts=(cr subst percent)
zmodload zsh/datetime
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
add-zsh-hook precmd prompt_pure_precmd
add-zsh-hook preexec prompt_pure_preexec
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:git*' formats ' %b'
zstyle ':vcs_info:git*' actionformats ' %b|%a'
# show username@host if logged in through SSH
[[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username='%n@%m '
# prompt turns red if the previous command didn't exit with 0
PROMPT='%(?.%F{green}.%F{red})%f '
}
prompt_pure_setup "$@"

View file

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
nixpkgs-gnuradio = import (pkgs.fetchFromGitHub {
owner = "doronbehar";
repo = "nixpkgs";
rev = "712561aa5f10bfe6112a1726a912585612a70d1f";
sha256 = "04yqflbwjcfl9vlplphpj82csqqz9k6m3nj1ybhwgmsc4by7vivl";
}) {};
in
{
home.packages = with pkgs; [
rtl-sdr
nixpkgs-gnuradio.gnuradio
nixpkgs-gnuradio.gnuradio.plugins.osmosdr
nixpkgs-gnuradio.gqrx
];
}

View file

@ -0,0 +1,181 @@
{ config, lib, pkgs, ... }:
let
shellAliases = rec {
# NixOS stuff
hms = "home-manager switch";
nor = "sudo nixos-rebuild switch";
nrs = nor;
nrb = "sudo nixos-rebuild boot";
ncg = "nix-collect-garbage";
vihome = "vim ~/.config/nixpkgs/home.nix && home-manager switch";
virc = "vim ~/code/system/home/modules/shell.nix && home-manager switch && source ~/.zshrc";
visystem = "sudo vim /etc/nixos/configuration.nix && sudo nixos-rebuild switch";
# Nix
ns = "nix-shell";
nb = "nix build -f .";
nbl = "nix build -f . --builders ''"; # nix build local
lwo = "lorri watch --once";
# Docker and friends
"dcu" = "docker-compose up";
"dcud" = "docker-compose up -d";
"dc" = "docker-compose";
"dcr" = "docker-compose restart";
"dclf" = "docker-compose logs -f";
"dck" = "docker";
"dockerclean" = "dockercleancontainers && dockercleanimages";
"dockercleanimages" = "docker images -a --no-trunc | grep none | awk '{print \$$3}' | xargs -L 1 -r docker rmi";
"dockercleancontainers" = "docker ps -a --no-trunc| grep 'Exit' | awk '{print \$$1}' | xargs -L 1 -r docker rm";
# Directories
stck = "dirs -v";
b= "cd ~1";
".." = "cd ..";
"..." = "cd ../..";
"...." = "cd ../../..";
"....." = "cd ../../../..";
# Aliases from old config
"http" = "http --style solarized";
"grep" = "grep $GREP_OPTIONS";
"bak" = "~/bin/backup.sh";
"xmm" = "xmodmap ~/.Xmodmap";
"asdflkj" = "asdf";
"asdf" = "asdfghjkl";
"asdfghjkl" = "echo \"Having some trouble?\"";
"ift" = "sudo iftop -i wlp3s0";
"first" = "awk '{print \$$1}'";
"cmt" = "git log --oneline | fzf-tmux | awk '{print \$$1}'";
"workmon" = "xrandr --output DP-2 --pos 1440x900 --primary";
"vi" = "vim";
"adbdev" = "adb devices";
"adbcon" = "adb connect $GNEX_IP";
"mpalb" = "mpc search album";
"mpart" = "mpc search artist";
"mps" = "mpc search";
"mpa" = "mpc add";
"mpt" = "mpc toggle";
"mpl" = "mpc playlist";
"dsstore" = "find . -name '*.DS_Store' -type f -ls -delete";
"df" = "df -h";
"fs" = "stat -f '%z bytes'";
"ll" = "ls -al";
"la" = "ls -a";
};
in {
home.packages = with pkgs; [
zsh
autojump
];
home.sessionVariables = {
EDITOR = "vim";
LS_COLORS = "no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:";
BROWSER = "firefox";
BAT_THEME = "ansi-light";
};
programs.bash = {
enable = true;
inherit shellAliases;
};
programs.zsh = {
enable = true;
enableAutosuggestions = true;
autocd = true;
inherit shellAliases;
history = rec {
save = 100000;
size = save;
};
oh-my-zsh = {
enable = true;
plugins = [
"battery"
"colorize"
"command-not-found"
"github"
"gitignore"
"postgres"
"systemd"
"themes"
"vi-mode"
];
custom = "${pkgs.stdenv.mkDerivation {
name = "oh-my-zsh-custom";
unpackPhase = ":";
installPhase = ''
mkdir -p $out/themes
mkdir -p $out/custom/plugins
ln -s ${./pure.zsh-theme} $out/themes/pure.zsh-theme
'';
}}";
theme = "pure";
};
plugins = [{
name = "pure-theme";
src = pkgs.fetchFromGitHub {
owner = "sindresorhus";
repo = "pure";
rev = "0a92b02dd4172f6c64fdc9b81fe6cd4bddb0a23b";
sha256 = "0l8jqhmmjn7p32hdjnv121xsjnqd2c0plhzgydv2yzrmqgyvx7cc";
};
}];
initExtraBeforeCompInit = ''
zstyle ':completion:*' completer _complete _ignored _correct _approximate
zstyle ':completion:*' matcher-list \'\' 'm:{[:lower:]}={[:upper:]} m:{[:lower:][:upper:]}={[:upper:][:lower:]} r:|[._- :]=** r:|=**' 'l:|=* r:|=*'
zstyle ':completion:*' max-errors 5
zstyle ':completion:*' use-cache yes
zstyle ':completion::complete:grunt::options:' expire 1
zstyle ':completion:*' prompt '%e errors'
# zstyle :compinstall filename '~/.zshrc'
autoload -Uz compinit
'';
initExtra = ''
source ${./zshrc}
source ${pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-syntax-highlighting";
rev = "7678a8a22780141617f809002eeccf054bf8f448";
sha256 = "0xh4fbd54kvwwpqvabk8lpw7m80phxdzrd75q3y874jw0xx1a9q6";
}}/zsh-syntax-highlighting.zsh
source ${pkgs.autojump}/share/autojump/autojump.zsh
source ${pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "a65382a353eaee5a98f068c330947c032a1263bb";
sha256 = "0l41ac5b7p8yyjvpfp438kw7zl9dblrpd7icjg1v3ig3xy87zv0n";
}}/nix-shell.plugin.zsh
export RPS1=""
autoload -U promptinit; promptinit
prompt pure
if [[ "$TERM" == "dumb" ]]; then
unsetopt zle
unsetopt prompt_cr
unsetopt prompt_subst
unfunction precmd
unfunction preexec
export PS1='$ '
fi
'';
};
programs.fzf = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
}

View file

@ -0,0 +1,64 @@
{ config, lib, pkgs, ... }:
{
home.packages = with pkgs; [
tarsnap
];
home.file.".tarsnaprc".text = ''
### Recommended options
# Tarsnap cache directory
cachedir /home/grfn/.cache/tarsnap
# Tarsnap key file
keyfile /home/grfn/.private/tarsnap.key
# Don't archive files which have the nodump flag set.
nodump
# Print statistics when creating or deleting archives.
print-stats
# Create a checkpoint once per GB of uploaded data.
checkpoint-bytes 1G
### Commonly useful options
# Use SI prefixes to make numbers printed by --print-stats more readable.
humanize-numbers
### Other options, not applicable to most systems
# Aggressive network behaviour: Use multiple TCP connections when
# writing archives. Use of this option is recommended only in
# cases where TCP congestion control is known to be the limiting
# factor in upload performance.
#aggressive-networking
# Exclude files and directories matching specified patterns.
# Only one file or directory per command; multiple "exclude"
# commands may be given.
#exclude
# Include only files and directories matching specified patterns.
# Only one file or directory per command; multiple "include"
# commands may be given.
#include
# Attempt to reduce tarsnap memory consumption. This option
# will slow down the process of creating archives, but may help
# on systems where the average size of files being backed up is
# less than 1 MB.
#lowmem
# Try even harder to reduce tarsnap memory consumption. This can
# significantly slow down tarsnap, but reduces its memory usage
# by an additional factor of 2 beyond what the lowmem option does.
#verylowmem
# Snapshot time. Use this option if you are backing up files
# from a filesystem snapshot rather than from a "live" filesystem.
#snaptime <file>
'';
}

View file

@ -0,0 +1,23 @@
{ pkgs, lib, ... }:
{
home.packages = with pkgs; [
t
];
home.sessionVariables = {
TWITTER_WHOAMI = "glittershark1";
};
programs.zsh = {
shellAliases = {
"mytl" = "t tl $TWITTER_WHOAMI";
};
functions = {
favelast = "t fave $(t tl -l $1 | head -n1 | cut -d' ' -f1)";
rtlast = "t rt $(t tl -l $1 | head -n1 | cut -d' ' -f1)";
tthread = "t reply $(t tl -l $TWITTER_WHOAMI | head -n1 | cut -d' ' -f1) $@";
};
};
}

View file

@ -0,0 +1,47 @@
{ config, pkgs, ... }:
{
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
plugins = with pkgs.vimPlugins; [
ctrlp
deoplete-nvim
syntastic
vim-abolish
vim-airline
vim-airline-themes
vim-bufferline
vim-closetag
# vim-colors-solarized
# solarized
(pkgs.vimUtils.buildVimPlugin {
name = "vim-colors-solarized";
src = pkgs.fetchFromGitHub {
owner = "glittershark";
repo = "vim-colors-solarized";
rev = "4857c3221ec3f2693a45855154cb61a2cefb514d";
sha256 = "0kqp5w14g7adaiinmixm7z3x4w74lv1lcgbqjbirx760f0wivf9y";
};
})
vim-commentary
vim-dispatch
vim-endwise
vim-repeat
vim-fugitive
vim-markdown
vim-nix
vim-rhubarb
vim-sexp
vim-sexp-mappings-for-regular-people
vim-sleuth
vim-startify
vim-surround
vim-unimpaired
vinegar
];
extraConfig = ''
source ${./vimrc}
'';
};
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,327 @@
#!/usr/bin/zsh
# vim: set fdm=marker fmr={{{,}}}:
stty -ixon
# Compinstall {{{
zstyle ':completion:*' completer _complete _ignored _correct _approximate
zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]} m:{[:lower:][:upper:]}={[:upper:][:lower:]} r:|[._- :]=** r:|=**' 'l:|=* r:|=*'
zstyle ':completion:*' max-errors 5
zstyle ':completion:*' use-cache yes
zstyle ':completion::complete:grunt::options:' expire 1
zstyle ':completion:*' prompt '%e errors'
zstyle :compinstall filename '~/.zshrc'
autoload -Uz compinit
compinit
# }}}
# Zsh-newuser-install {{{
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory autocd extendedglob notify autopushd
unsetopt beep nomatch
bindkey -v
# }}}
# Basic options {{{
set -o vi
umask 022
export VIRTUAL_ENV_DISABLE_PROMPT=1
# export PATH=~/.local/bin:~/.cabal/bin:$PATH:~/code/go/bin:~/bin:~/npm/bin:~/.gem/ruby/2.1.0/bin:~/.gem/ruby/2.0.0/bin:/home/smith/bin
# }}}
# Zsh highlight highlighters {{{
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern root)
# }}}
# More basic options {{{
setopt no_hist_verify
setopt histignorespace
# }}}
# Utility Functions {{{
# Set the terminal's title bar.
function titlebar() {
echo -ne "\033]0;$*\007"
}
function quiet() {
"$@" >/dev/null
}
function quieter() {
"$@" >/dev/null 2>&1
}
# From http://stackoverflow.com/questions/370047/#370255
function path_remove() {
IFS=:
# convert it to an array
t=($PATH)
unset IFS
# perform any array operations to remove elements from the array
t=(${t[@]%%$1})
IFS=:
# output the new array
echo "${t[*]}"
}
# }}}
# Force screen to use zsh {{{
# }}}
# Environment {{{
# }}}
# Directory Stuff {{{
# Always use color output for `ls`
# Directory listing
# Easier navigation: .., ..., -
# File size
# Recursively delete `.DS_Store` files
# Create a new directory and enter it
function md() {
mkdir -p "$@" && cd "$@"
}
# }}}
# MPD/MPC stuff {{{
function mp() {
# Test if drive is already mounted
if ! lsblk | grep /media/external >/dev/null; then
if ! sudo mount /media/external; then
echo "External drive not plugged in, or could not mount"
return 1
fi
fi
if (mpc >/dev/null 2>&1); then
ncmpcpp
else
mpd &&
(pgrep mpdscribble || mpdscribble) &&
ncmpcpp
fi
}
# kill mp
function kmp() {
killall ncmpcpp
mpd --kill
local files
if (files=$(lsof 2>&1 | grep -v docker | grep external)); then
echo
echo "==> Still processes using external drive:"
echo
echo $files
else
sudo umount /media/external
fi
}
function mppal() {
mpc search album "$1" | mpc add &&
mpc play;
}
# }}}
# Git stuff {{{
# function ga() { git add "${@:-.}"; } # Add all files by default
# Add non-whitespace changes
# function gc() { git checkout "${@:-master}"; } # Checkout master by default
# open all changed files (that still actually exist) in the editor
function ged() {
local files=()
for f in $(git diff --name-only "$@"); do
[[ -e "$f" ]] && files=("${files[@]}" "$f")
done
local n=${#files[@]}
echo "Opening $n $([[ "$@" ]] || echo "modified ")file$([[ $n != 1 ]] && \
echo s)${@:+ modified in }$@"
q "${files[@]}"
}
# git find-replace
function gfr() {
if [[ "$#" == "0" ]]; then
echo 'Usage:'
echo ' gg_replace term replacement file_mask'
echo
echo 'Example:'
echo ' gg_replace cappuchino cappuccino *.html'
echo
else
find=$1; shift
replace=$1; shift
ORIG_GLOBIGNORE=$GLOBIGNORE
GLOBIGNORE=*.*
if [[ "$#" = "0" ]]; then
set -- ' ' $@
fi
while [[ "$#" -gt "0" ]]; do
for file in `git grep -l $find -- $1`; do
sed -e "s/$find/$replace/g" -i'' $file
done
shift
done
GLOBIGNORE=$ORIG_GLOBIGNORE
fi
}
function vconflicts() {
$EDITOR $(git status --porcelain | awk '/^UU/ { print $2 }')
}
# }}}
# fzf {{{
v() {
local file
file=$(fzf-tmux --query="$1" --select-1 --exit-0)
[ -n "$file" ] && ${EDITOR:-vim} "$file"
}
c() {
local dir
dir=$(find ${1:-*} -path '*/\.*' -prune -o -type d -print 2> /dev/null | fzf +m) && cd "$dir"
}
co() {
local branch
branch=$(git branch -a | sed -s "s/\s*\**//g" | fzf --query="$1" --select-1 --exit-0) && git checkout "$branch"
}
# fh - repeat history
# h() {
# eval $(([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s | sed 's/ *[0-9]* *//')
# }
# fkill - kill process
fkill() {
ps -ef | sed 1d | fzf-tmux -m | awk '{print $2}' | xargs kill -${1:-9}
}
# }}}
# Tmux utils {{{
kill_detached() {
for sess in $(tmux ls | grep -v attached | sed -s "s/:.*$//"); do
tmux kill-session -t $sess;
done
}
# }}}
# Docker {{{
# dbp foo/bar .
function dbp () {
docker build -t $1 ${@:2} && docker push $1
}
# }}}
# Twitter! {{{
# favelast <username>
function favelast() {
t fave $(t tl -l $1 | head -n1 | first)
}
function rtlast() {
t rt $(t tl -l $1 | head -n1 | first)
}
function tthread() {
t reply $(t tl -l $TWITTER_WHOAMI | head -n1 | first) $@
}
# }}}
# Geeknote {{{
gnc() {
gn create --title $1 --content '' &&
gn find --count=1 "$1"
gn edit 1
}
# }}}
# Misc aliases {{{
function fw() { # fix white
local substitution
local substitution='s/\x1b\[90m/\x1b[92m/g'
$@ > >(perl -pe "$substitution") 2> >(perl -pe "$substitution" 1>&2)
}
# }}}
# Grep options {{{
unset GREP_OPTIONS
export GREP_OPTIONS=
# }}}
# Run docker containers {{{
# -d \
# -v $HOME/.pentadactyl:/home/firefox/.pentadactyl:rw \
# -v $HOME/.pentadactylrc:/home/firefox/.pentadactylrc:rw \
# -v $HOME/.mozilla:/home/firefox/.mozilla:rw \
# -v $HOME/.config:/home/firefox/.config \
# -v $HOME/Downloads:/home/firefox/Downloads:rw \
# -v /etc/fonts:/etc/fonts \
# -v /tmp/.X11-unix:/tmp/.X11-unix \
# -v /dev/snd:/dev/snd \
# --net=host \
# -v $XDG_RUNTIME_DIR:$XDG_RUNTIME_DIR \
# -e uid=$(id -u) \
# -e gid=$(id -g) \
# -e DISPLAY=$DISPLAY \
# -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
# --name firefox \
# --rm -it \
# glittershark/firefox
# }}}
# Change cursor shape on insert/normal mode {{{
# (https://unix.stackexchange.com/q/433273/64261)
KEYTIMEOUT=5
_fix_cursor() {
echo -ne '\e[5 q'
}
precmd_functions+=(_fix_cursor)
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
# }}}
[ -f ./.localrc ] && source ./.localrc