mirror of
https://github.com/kmein/niveum
synced 2026-03-16 10:11:08 +01:00
Configure more. Ready to install?
~ GTK theme to Numix-SX-Dark ~ browser to chromium + universal screen locker + sudo insults ~ vim w/o homemanager + former ~/bin scripts as aliases + tty colorscheme + cron - unneeded ohmyzsh plugins ~ prompt color if $? == 0 + programs.* config + networking ~ xbacklight to light ~ rewrite fancy-date in C + nanorc
This commit is contained in:
232
config.nix
232
config.nix
@@ -1,74 +1,78 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
let
|
let
|
||||||
fullName = "Kierán Meinhardt";
|
|
||||||
fullEmail = "kieran.meinhardt@gmail.com";
|
|
||||||
theme = {
|
theme = {
|
||||||
# gtk = { name = "Adwaita"; package = pkgs.gnome3.gnome_themes_standard; };
|
gtk = { name = "Numix-SX-Dark"; package = pkgs.numix-sx-gtk-theme; };
|
||||||
gtk = { name = "Numix-SX-FullDark"; package = pkgs.numix-sx-gtk-theme; };
|
|
||||||
icon = { name = "Papirus-Adapta-Nokto"; package = pkgs.papirus-icon-theme; };
|
icon = { name = "Papirus-Adapta-Nokto"; package = pkgs.papirus-icon-theme; };
|
||||||
# icon = { name = "Adwaita"; package = pkgs.gnome3.adwaita-icon-theme; };
|
|
||||||
};
|
};
|
||||||
defaultApplications = {
|
defaultApplications = {
|
||||||
terminal = "${pkgs.xfce.terminal}/bin/xfce4-terminal";
|
terminal = "${pkgs.xfce.terminal}/bin/xfce4-terminal";
|
||||||
webBrowser = "${pkgs.google-chrome}/bin/google-chrome-stable";
|
webBrowser = "${pkgs.chromium}/bin/chromium-browser";
|
||||||
fileManager = "${pkgs.gnome3.nautilus}/bin/nautilus";
|
fileManager = "${pkgs.gnome3.nautilus}/bin/nautilus";
|
||||||
|
screenLocker = with import ./theme.nix;
|
||||||
|
"${pkgs.i3lock}/bin/i3lock -e -c ${lib.strings.removePrefix "#" black}";
|
||||||
};
|
};
|
||||||
wallpaper = pkgs.copyPathToStore ./art/haskell-grey.png;
|
wallpaper = pkgs.copyPathToStore ./art/haskell-grey.png;
|
||||||
|
scripts = import ./dot/scripts.nix pkgs defaultApplications;
|
||||||
|
constants = import ./constants.nix;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
"${builtins.fetchTarball https://github.com/rycee/home-manager/archive/master.tar.gz}/nixos"
|
"${builtins.fetchTarball https://github.com/rycee/home-manager/archive/master.tar.gz}/nixos"
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs.config = {
|
nixpkgs.config = {
|
||||||
packageOverrides =
|
|
||||||
let nix-writers = builtins.fetchGit {
|
|
||||||
url = https://cgit.krebsco.de/nix-writers/;
|
|
||||||
ref = "tags/v2.1.0";
|
|
||||||
}; in import "${nix-writers}/pkgs" pkgs;
|
|
||||||
allowUnfree = true;
|
allowUnfree = true;
|
||||||
|
packageOverrides =
|
||||||
|
let nix-writers = builtins.fetchGit { url = https://cgit.krebsco.de/nix-writers/; ref = "tags/v2.1.0"; };
|
||||||
|
in import "${nix-writers}/pkgs" pkgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
security.sudo.enable = true;
|
security.sudo.enable = true;
|
||||||
|
security.sudo.extraConfig = "Defaults insults";
|
||||||
|
|
||||||
|
fonts.enableDefaultFonts = true;
|
||||||
fonts.fonts = with pkgs; [ powerline-fonts roboto font-awesome-ttf fira-code eb-garamond lmodern ];
|
fonts.fonts = with pkgs; [ powerline-fonts roboto font-awesome-ttf fira-code eb-garamond lmodern ];
|
||||||
environment.systemPackages = [ theme.icon.package theme.gtk.package] ++ (with pkgs; [
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
theme.icon.package theme.gtk.package
|
||||||
ffmpeg mpv youtubeDL
|
ffmpeg mpv youtubeDL
|
||||||
imagemagick
|
imagemagick
|
||||||
zathura
|
zathura
|
||||||
google-chrome firefox lynx w3m firefoxPackages.tor-browser
|
chromium google-chrome firefox lynx w3m firefoxPackages.tor-browser
|
||||||
lxappearance
|
lxappearance
|
||||||
libnotify
|
libnotify
|
||||||
xfce.terminal
|
xfce.terminal
|
||||||
xorg.xbacklight pamixer
|
pamixer
|
||||||
gnome3.nautilus
|
gnome3.nautilus
|
||||||
git
|
git
|
||||||
ripgrep tree
|
ripgrep tree
|
||||||
whois
|
whois
|
||||||
wget htop zip unzip tmux
|
wget htop zip unzip
|
||||||
rlwrap
|
rlwrap
|
||||||
pmount
|
pmount
|
||||||
gnumake
|
gnumake
|
||||||
]);
|
(import ./dot/vim.nix pkgs)
|
||||||
|
];
|
||||||
users.users.kfm = {
|
users.users.kfm = {
|
||||||
createHome = true;
|
createHome = true;
|
||||||
description = fullName;
|
description = constants.user.name;
|
||||||
extraGroups = [ "wheel" "networkmanager" ];
|
extraGroups = [ "wheel" ];
|
||||||
group = "users";
|
group = "users";
|
||||||
home = "/home/kfm";
|
home = "/home/kfm";
|
||||||
shell = pkgs.zsh;
|
shell = pkgs.zsh;
|
||||||
password = "kfm";
|
password = "kfm";
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
texlive.combined.scheme-minimal
|
texlive.combined.scheme-tetex
|
||||||
franz
|
franz
|
||||||
grive2
|
grive2
|
||||||
gnuplot maxima
|
gnuplot maxima
|
||||||
libreoffice-fresh
|
libreoffice-fresh
|
||||||
kdeconnect
|
kdeconnect
|
||||||
par haskellPackages.pandoc biber
|
par haskellPackages.pandoc haskellPackages.pandoc-citeproc biber
|
||||||
|
haskellPackages.hakyll
|
||||||
spotify gnome3.gnome-music audacity
|
spotify gnome3.gnome-music audacity
|
||||||
calibre
|
calibre
|
||||||
inkscape
|
inkscape
|
||||||
stack haskellPackages.hasktags
|
stack haskellPackages.hasktags haskellPackages.hindent haskellPackages.ghcid haskellPackages.hoogle
|
||||||
rustup
|
rustup
|
||||||
gcc tinycc ctags
|
gcc tinycc ctags
|
||||||
python3 mypy
|
python3 mypy
|
||||||
@@ -77,58 +81,41 @@ in {
|
|||||||
nasm
|
nasm
|
||||||
ocaml fsharp swiProlog haskellPackages.idris
|
ocaml fsharp swiProlog haskellPackages.idris
|
||||||
clojure racket-minimal
|
clojure racket-minimal
|
||||||
jdk scala
|
scala
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
environment.variables.EDITOR = pkgs.lib.mkForce "vim";
|
||||||
|
|
||||||
environment.shellAliases =
|
environment.shellAliases =
|
||||||
let rlwrap = cmd: "${pkgs.rlwrap}/bin/rlwrap ${cmd}"; in
|
let rlwrap = cmd: "${pkgs.rlwrap}/bin/rlwrap ${cmd}";
|
||||||
{
|
in {
|
||||||
ip = "${pkgs.iproute}/bin/ip -c";
|
":r" = ''echo "You stupid!"'';
|
||||||
vi = "vim";
|
chrome-no-traces = "${pkgs.google-chrome}/bin/google-chrome-stable -incognito --user-data-dir=$HOME/.config/google-chrome/Incognito --disk-cache-dir=/dev/null --disk-cache-size=1";
|
||||||
ocaml = rlwrap "${pkgs.ocaml}/bin/ocaml";
|
clipboard = "${pkgs.xclip}/bin/xclip -se c";
|
||||||
tmux = "${pkgs.tmux}/bin/tmux -2";
|
external-ip = "${pkgs.dnsutils}/bin/dig +short myip.opendns.com @resolver1.opendns.com";
|
||||||
clipboard = "${pkgs.xclip}/bin/xclip -se c";
|
ghc = "${pkgs.stack}/bin/stack ghc --";
|
||||||
ghc = "${pkgs.stack}/bin/stack ghc --";
|
ghci = "${pkgs.stack}/bin/stack ghc -- --interactive";
|
||||||
ghci = "${pkgs.stack}/bin/stack ghc -- --interactive";
|
ip = "${pkgs.iproute}/bin/ip -c";
|
||||||
external-ip = "${pkgs.dnsutils}/bin/dig +short myip.opendns.com @resolver1.opendns.com";
|
ocaml = rlwrap "${pkgs.ocaml}/bin/ocaml";
|
||||||
};
|
tmux = "${pkgs.tmux}/bin/tmux -2";
|
||||||
|
vi = "vim";
|
||||||
|
} // scripts;
|
||||||
|
|
||||||
programs.slock.enable = true;
|
services.xserver = with import ./constants.nix; {
|
||||||
|
|
||||||
services.xserver = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
layout = "de, gr, ru";
|
layout = commaSep [ "de" "gr" "ru" ];
|
||||||
xkbVariant = "T3, polytonic, phonetic_winkeys";
|
xkbVariant = commaSep [ "T3" "polytonic" "phonetic_winkeys" ];
|
||||||
xkbOptions = "terminate:ctrl_alt_bksp, grp:alt_space_toggle";
|
xkbOptions = commaSep [ "terminate:ctrl_alt_bksp" "grp:alt_space_toggle" ];
|
||||||
libinput.enable = true;
|
libinput.enable = true;
|
||||||
xautolock = {
|
xautolock = {
|
||||||
enable = true;
|
enable = true;
|
||||||
time = 15;
|
time = 15;
|
||||||
locker = "${pkgs.slock}/bin/slock";
|
locker = defaultApplications.screenLocker;
|
||||||
nowlocker = "${pkgs.slock}/bin/slock";
|
nowlocker = defaultApplications.screenLocker;
|
||||||
enableNotifier = true;
|
enableNotifier = true;
|
||||||
notifier = ''${pkgs.libnotify}/bin/notify-send "Locking soon."'';
|
notifier = ''${pkgs.libnotify}/bin/notify-send -u normal -a xautolock "Locking soon" "The screen will lock in 10 seconds."'';
|
||||||
};
|
};
|
||||||
/*
|
|
||||||
displayManager.lightdm = {
|
|
||||||
enable = true;
|
|
||||||
background = wallpaper;
|
|
||||||
greeters.gtk = {
|
|
||||||
clock-format = "%F";
|
|
||||||
iconTheme = theme.icon;
|
|
||||||
theme = theme.gtk;
|
|
||||||
extraConfig = with import ./theme.nix; ''
|
|
||||||
font-name = ${uiFont.name} ${toString uiFont.size}
|
|
||||||
xft-antialias = true
|
|
||||||
xft-dpi = 96
|
|
||||||
xft-hintstyle = slight
|
|
||||||
xft-rgba = rgb
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
displayManager.auto = {
|
displayManager.auto = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = "kfm";
|
user = "kfm";
|
||||||
@@ -138,22 +125,37 @@ in {
|
|||||||
windowManager.default = "i3";
|
windowManager.default = "i3";
|
||||||
windowManager.i3 = {
|
windowManager.i3 = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configFile = pkgs.writeText "i3.conf" (import ./dot/i3.nix {
|
configFile = pkgs.writeText "i3.conf" (import ./dot/i3.nix pkgs defaultApplications);
|
||||||
inherit pkgs defaultApplications wallpaper;
|
extraPackages = [];
|
||||||
});
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
i18n.consoleUseXkbConfig = true;
|
i18n = {
|
||||||
|
defaultLocale = "en_GB.UTF-8";
|
||||||
|
consoleUseXkbConfig = true;
|
||||||
|
consoleColors = with import ./theme.nix; map (c: lib.strings.removePrefix "#" c) colorPalette;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.cron = {
|
||||||
|
enable = true;
|
||||||
|
systemCronJobs = [
|
||||||
|
"0 18 * * * ${scripts.bing-wallpaper}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
services.compton = {
|
services.compton = {
|
||||||
enable = true;
|
enable = true;
|
||||||
fade = true;
|
fade = true;
|
||||||
shadow = true;
|
shadow = true;
|
||||||
|
menuOpacity = "0.9";
|
||||||
|
shadowOpacity = "0.5";
|
||||||
fadeDelta = 2;
|
fadeDelta = 2;
|
||||||
menuOpacity = "0.95";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
programs.ssh = {
|
||||||
|
startAgent = true;
|
||||||
|
knownHosts = [];
|
||||||
|
};
|
||||||
|
|
||||||
services.redshift = {
|
services.redshift = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -180,7 +182,7 @@ in {
|
|||||||
setopt PUSHD_TO_HOME
|
setopt PUSHD_TO_HOME
|
||||||
'';
|
'';
|
||||||
promptInit = ''
|
promptInit = ''
|
||||||
PROMPT="%{$fg_bold[white]%}%~ \$([[ \$? == 0 ]] && echo \"%{$fg_bold[blue]%}\" || echo \"%{$fg_bold[red]%}\")%#%{$reset_color%} "
|
PROMPT="%{$fg_bold[white]%}%~ \$([[ \$? == 0 ]] && echo \"%{$fg_bold[green]%}\" || echo \"%{$fg_bold[red]%}\")%#%{$reset_color%} "
|
||||||
RPROMPT='$(git_prompt_info)'
|
RPROMPT='$(git_prompt_info)'
|
||||||
|
|
||||||
ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[cyan]%}"
|
ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[cyan]%}"
|
||||||
@@ -188,20 +190,41 @@ in {
|
|||||||
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}*"
|
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}*"
|
||||||
'';
|
'';
|
||||||
ohMyZsh.enable = true;
|
ohMyZsh.enable = true;
|
||||||
ohMyZsh.plugins = [ "common-aliases" "git" "git-extras" "history" "jsontools" ];
|
ohMyZsh.plugins = [ "common-aliases" ];
|
||||||
|
|
||||||
};
|
};
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
promptInit = ''PS1="[\$(exit=\$?; [[ \$exit == 0 ]] && echo \"\[\033[1;32m\]\$exit\" || echo \"\033[1;31m\]\$exit\")$(tput sgr0)]$(tput bold) \w $(tput setaf 1)\$$(tput sgr0) '';
|
promptInit = ''PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) '';
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# programs.vim.defaultEditor = true;
|
programs.command-not-found.enable = true;
|
||||||
|
|
||||||
networking.networkmanager.enable = true;
|
programs.java.enable = true;
|
||||||
|
programs.light.enable = true;
|
||||||
|
|
||||||
|
programs.tmux = {
|
||||||
|
enable = true;
|
||||||
|
extraTmuxConf = import ./dot/tmux.nix;
|
||||||
|
keyMode = "vi";
|
||||||
|
terminal = "screen-256color";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.nano.nanorc = import ./dot/nano.nix;
|
||||||
|
|
||||||
|
# networking.hostName = "scardanelli";
|
||||||
|
networking.hosts = {
|
||||||
|
"192.168.178.27" = [ "printer.local" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.wireless.enable = true;
|
||||||
|
networking.wireless.networks = {
|
||||||
|
Aether = { psk = "Kein ding sei wo das wort gebricht."; };
|
||||||
|
"Asoziales Netzwerk" = { psk = "WirFragenDichNicht"; };
|
||||||
|
};
|
||||||
|
networking.wireless.userControlled.enable = true;
|
||||||
|
|
||||||
home-manager.users.kfm = {
|
home-manager.users.kfm = {
|
||||||
programs.command-not-found.enable = true;
|
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
font = with import ./theme.nix; { package = pkgs.roboto; name = uiFont.name; };
|
font = with import ./theme.nix; { package = pkgs.roboto; name = uiFont.name; };
|
||||||
@@ -211,8 +234,8 @@ in {
|
|||||||
|
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
userName = fullName;
|
userName = constants.user.name;
|
||||||
userEmail = fullEmail;
|
userEmail = constants.user.email;
|
||||||
aliases = {
|
aliases = {
|
||||||
br = "branch";
|
br = "branch";
|
||||||
co = "checkout";
|
co = "checkout";
|
||||||
@@ -222,47 +245,9 @@ in {
|
|||||||
unstage = "reset HEAD --";
|
unstage = "reset HEAD --";
|
||||||
sdiff = "diff --staged";
|
sdiff = "diff --staged";
|
||||||
last = "log -1 HEAD";
|
last = "log -1 HEAD";
|
||||||
|
pull-all = "!${scripts.git-pull-all}";
|
||||||
};
|
};
|
||||||
ignores = [ "*~" ".stack-work/" "__pycache__/" ".mypy_cache/" "*.o" "*.hi" "*.aux" ];
|
ignores = constants.ignoredFiles;
|
||||||
};
|
|
||||||
|
|
||||||
programs.vim = {
|
|
||||||
enable = true;
|
|
||||||
plugins = [
|
|
||||||
"ctrlp"
|
|
||||||
"deoplete-rust"
|
|
||||||
"deoplete-nvim"
|
|
||||||
"idris-vim"
|
|
||||||
"latex-box"
|
|
||||||
"rust-vim"
|
|
||||||
"supertab"
|
|
||||||
"syntastic"
|
|
||||||
"tabular"
|
|
||||||
"typescript-vim"
|
|
||||||
"vim-airline"
|
|
||||||
"vim-airline-themes"
|
|
||||||
"vim-commentary"
|
|
||||||
"vim-eunuch"
|
|
||||||
"vim-fugitive"
|
|
||||||
"vim-gitgutter"
|
|
||||||
"vim-javascript"
|
|
||||||
"vim-nix"
|
|
||||||
"vim-pandoc"
|
|
||||||
"vim-pandoc-after"
|
|
||||||
"vim-pandoc-syntax"
|
|
||||||
"vim-repeat"
|
|
||||||
"vim-sensible"
|
|
||||||
"vim-startify"
|
|
||||||
"vim-surround"
|
|
||||||
];
|
|
||||||
settings = {
|
|
||||||
smartcase = true;
|
|
||||||
shiftwidth = 4;
|
|
||||||
tabstop = 4;
|
|
||||||
expandtab = true;
|
|
||||||
number = true;
|
|
||||||
};
|
|
||||||
extraConfig = import ./dot/vim.nix;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.rofi = with import ./theme.nix; {
|
programs.rofi = with import ./theme.nix; {
|
||||||
@@ -292,7 +277,7 @@ in {
|
|||||||
global = {
|
global = {
|
||||||
transparency = 10;
|
transparency = 10;
|
||||||
font = "${uiFont.name} ${toString uiFont.size}";
|
font = "${uiFont.name} ${toString uiFont.size}";
|
||||||
geometry = "300x5-30+20";
|
geometry = "200x5-30+20";
|
||||||
frame_color = veryDark;
|
frame_color = veryDark;
|
||||||
follow = "mouse";
|
follow = "mouse";
|
||||||
indicate_hidden = true;
|
indicate_hidden = true;
|
||||||
@@ -326,12 +311,12 @@ in {
|
|||||||
urgency_low = {
|
urgency_low = {
|
||||||
frame_color = veryDark;
|
frame_color = veryDark;
|
||||||
background = veryDark;
|
background = veryDark;
|
||||||
foreground = light;
|
foreground = gray.light;
|
||||||
timeout = 5;
|
timeout = 5;
|
||||||
};
|
};
|
||||||
urgency_normal = {
|
urgency_normal = {
|
||||||
frame_color = veryDark;
|
frame_color = veryDark;
|
||||||
background = light;
|
background = gray.light;
|
||||||
foreground = veryDark;
|
foreground = veryDark;
|
||||||
timeout = 10;
|
timeout = 10;
|
||||||
};
|
};
|
||||||
@@ -345,16 +330,13 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
home.file = {
|
home.file = {
|
||||||
".ghci".text = import ./dot/ghci.nix { inherit pkgs; };
|
".background-image".source = wallpaper;
|
||||||
".tmux.conf".text = import ./dot/tmux.nix;
|
".ghci".text = import ./dot/ghci.nix pkgs;
|
||||||
".stack/config.yaml".text = import ./dot/stack.nix {
|
".stack/config.yaml".text = import ./dot/stack.nix constants.user;
|
||||||
githubUser = "kmein";
|
|
||||||
inherit fullName fullEmail;
|
|
||||||
};
|
|
||||||
".config/zathura/zathurarc".text = "set selection-clipboard clipboard";
|
".config/zathura/zathurarc".text = "set selection-clipboard clipboard";
|
||||||
".config/mpv/input.conf".text = import ./dot/mpv.nix;
|
".config/mpv/input.conf".text = import ./dot/mpv.nix;
|
||||||
".config/xfce4/terminal/terminalrc".text = import ./dot/terminal.nix { inherit defaultApplications; };
|
".config/xfce4/terminal/terminalrc".text = import ./dot/terminal.nix defaultApplications;
|
||||||
".background-image".source = wallpaper;
|
".zshrc".text = "# nothing to see here";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
11
constants.nix
Normal file
11
constants.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
commaSep = strs: builtins.concatStringsSep "," strs;
|
||||||
|
|
||||||
|
ignoredFiles = [ "*~" ".stack-work/" "__pycache__/" ".mypy_cache/" "*.o" "*.hi" "*.aux" "*.class" "*.dyn_hi" "*.dyn_o" ];
|
||||||
|
|
||||||
|
user = {
|
||||||
|
github = "kmein";
|
||||||
|
name = "Kierán Meinhardt";
|
||||||
|
email = "kieran.meinhardt@gmail.com";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{pkgs}:
|
pkgs:
|
||||||
''
|
''
|
||||||
:set editor vim
|
:set editor vim
|
||||||
:def hoogle \x -> return $ ":!${pkgs.haskellPackages.hoogle}/bin/hoogle --color \"" ++ x ++ "\" "
|
:def hoogle \x -> return $ ":!${pkgs.haskellPackages.hoogle}/bin/hoogle --color \"" ++ x ++ "\" "
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ pkgs, defaultApplications, wallpaper }:
|
pkgs: defaultApplications:
|
||||||
let theme = import ../theme.nix; in
|
let theme = import ../theme.nix; in
|
||||||
with theme;
|
with theme;
|
||||||
''
|
''
|
||||||
@@ -71,8 +71,8 @@ bindsym $mod+Shift+9 move container to workspace $WS9
|
|||||||
bindsym XF86AudioLowerVolume exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5 && pkill -RTMIN+3 i3blocks
|
bindsym XF86AudioLowerVolume exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5 && pkill -RTMIN+3 i3blocks
|
||||||
bindsym XF86AudioRaiseVolume exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5 && pkill -RTMIN+3 i3blocks
|
bindsym XF86AudioRaiseVolume exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5 && pkill -RTMIN+3 i3blocks
|
||||||
bindsym XF86AudioMute exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t && pkill -RTMIN+3 i3blocks
|
bindsym XF86AudioMute exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t && pkill -RTMIN+3 i3blocks
|
||||||
bindsym XF86MonBrightnessUp exec --no-startup-id ${pkgs.xorg.xbacklight}/bin/xbacklight + 10 && pkill -RTMIN+2 i3blocks
|
bindsym XF86MonBrightnessUp exec --no-startup-id ${pkgs.light}/bin/light +A 10 && pkill -RTMIN+2 i3blocks
|
||||||
bindsym XF86MonBrightnessDown exec --no-startup-id ${pkgs.xorg.xbacklight}/bin/xbacklight - 10 && pkill -RTMIN+2 i3blocks
|
bindsym XF86MonBrightnessDown exec --no-startup-id ${pkgs.light}/bin/light -A 10 && pkill -RTMIN+2 i3blocks
|
||||||
|
|
||||||
mode " " {
|
mode " " {
|
||||||
bindsym Left resize shrink width 10 px or 10 ppt
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
@@ -113,6 +113,4 @@ bar {
|
|||||||
binding_mode ${black} ${black} ${red.light}
|
binding_mode ${black} ${black} ${red.light}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exec --no-startup-id ${pkgs.networkmanagerapplet}/bin/nm-applet
|
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ let
|
|||||||
printf "%s \u2237 %s" "$ARTIST" "$TITLE"
|
printf "%s \u2237 %s" "$ARTIST" "$TITLE"
|
||||||
'';
|
'';
|
||||||
battery_info = pkgs.writeBash "battery.info" ''
|
battery_info = pkgs.writeBash "battery.info" ''
|
||||||
cd "/sys/class/power_supply/$BLOCK_INSTANCE/"
|
BAT_DIR="/sys/class/power_supply/$BLOCK_INSTANCE/"
|
||||||
|
[ -d BAT_DIR ] && cd BAT_DIR || exit 1
|
||||||
|
|
||||||
status=$(cat status)
|
status=$(cat status)
|
||||||
charge_f=$((100 * $(cat charge_now) / $(cat charge_full)))
|
charge_f=$((100 * $(cat charge_now) / $(cat charge_full)))
|
||||||
@@ -89,11 +90,18 @@ let
|
|||||||
printf '\uf028 %s%%' "$volume"
|
printf '\uf028 %s%%' "$volume"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
fancyDate = pkgs.writePython3 "fancy_date.py" {} ''
|
fancyDate = pkgs.writeC "fancy_date.c" {} ''
|
||||||
from datetime import datetime
|
#include <stdio.h>
|
||||||
now = datetime.now()
|
#include <time.h>
|
||||||
print(now.strftime("%d\u2009{}\u2009%Y ⟨%V⟩")
|
#include <wchar.h>
|
||||||
.format(chr(0x2160 + (now.month - 1))))
|
|
||||||
|
int main(void) {
|
||||||
|
time_t now = time(NULL);
|
||||||
|
struct tm *today = localtime(&now);
|
||||||
|
wchar_t roman_month = 0x2160 + today->tm_mon;
|
||||||
|
wprintf(L"%d\u2009%lc\u2009%d [%d]\n", today->tm_mday, roman_month, 1900 + today->tm_year, today->tm_yday/7 + 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
''; in
|
''; in
|
||||||
with theme;
|
with theme;
|
||||||
''
|
''
|
||||||
@@ -103,11 +111,6 @@ color=${white}
|
|||||||
|
|
||||||
[spotify]
|
[spotify]
|
||||||
command=${spotify_info}
|
command=${spotify_info}
|
||||||
interval=1
|
|
||||||
|
|
||||||
[separator]
|
|
||||||
command=${pkgs.xkblayout-state}/bin/xkblayout-state print %s
|
|
||||||
label=
|
|
||||||
interval=2
|
interval=2
|
||||||
|
|
||||||
[separator]
|
[separator]
|
||||||
@@ -154,15 +157,20 @@ instance=BAT1
|
|||||||
|
|
||||||
[date]
|
[date]
|
||||||
command=${fancyDate}
|
command=${fancyDate}
|
||||||
interval=30
|
interval=1
|
||||||
label=
|
label=
|
||||||
|
|
||||||
[separator]
|
[separator]
|
||||||
|
|
||||||
[time]
|
[time]
|
||||||
command=date +'%H:%M'
|
command=date +'%H:%M'
|
||||||
interval=30
|
interval=1
|
||||||
label=
|
label=
|
||||||
|
|
||||||
|
[separator]
|
||||||
|
command=${pkgs.xkblayout-state}/bin/xkblayout-state print %s
|
||||||
|
label=
|
||||||
|
interval=2
|
||||||
|
|
||||||
[separator]
|
[separator]
|
||||||
''
|
''
|
||||||
|
|||||||
8
dot/nano.nix
Normal file
8
dot/nano.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
''
|
||||||
|
set autoindent
|
||||||
|
set boldtext
|
||||||
|
set morespace
|
||||||
|
set smarthome
|
||||||
|
set tabsize 4
|
||||||
|
set tabstospaces
|
||||||
|
''
|
||||||
650
dot/scripts.nix
Normal file
650
dot/scripts.nix
Normal file
@@ -0,0 +1,650 @@
|
|||||||
|
pkgs: defaultApplications:
|
||||||
|
let
|
||||||
|
bingWallpaper = pkgs.writeBash "bing-wallpaper.sh" ''
|
||||||
|
PICTURE_DIR="$HOME/pictures/external/bing/"
|
||||||
|
|
||||||
|
mkdir -p $PICTURE_DIR
|
||||||
|
|
||||||
|
urls=( $(${pkgs.curl}/bin/curl -s http://www.bing.com \
|
||||||
|
| grep -Eo "url:'.*?'" \
|
||||||
|
| sed -e "s/url:'\([^']*\)'.*/http:\/\/bing.com\1/" \
|
||||||
|
| sed -e "s/\\\//g") )
|
||||||
|
|
||||||
|
for p in ''${urls[@]}; do
|
||||||
|
filename=$(echo $p | sed -e "s/.*\/\(.*\)/\1/")
|
||||||
|
if [ ! -f $PICTURE_DIR/$filename ]; then
|
||||||
|
${pkgs.curl}/bin/curl -Lo "$PICTURE_DIR/$filename" $p
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
colorize = pkgs.writeBash "colorize.sh" ''
|
||||||
|
highlight=$(which highlight 2>/dev/null)
|
||||||
|
pygmentize=$(which pygmentize 2>/dev/null)
|
||||||
|
|
||||||
|
colorize() {
|
||||||
|
if [ "$TERM" == "dumb" -o "$NO_COLORS" == "1" ]
|
||||||
|
then
|
||||||
|
cat
|
||||||
|
else
|
||||||
|
if [ "$1" == "haskell" ]; then
|
||||||
|
${pkgs.haskellPackages.hscolour}/bin/HsColour -tty
|
||||||
|
else
|
||||||
|
${pkgs.python36Packages.pygments}/bin/pygmentize -l $1 -O bg=dark
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
colorize "$1"
|
||||||
|
else
|
||||||
|
cat "$2" | colorize "$1"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
easyBackup = pkgs.writeBash "easy-backup.sh" ''
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
OUTPUT_ROOT=''${1}/backup/current
|
||||||
|
rsync -hav --delete --stats --progress --exclude-from=$HOME/bin/backup.exclude $HOME/* $OUTPUT_ROOT/
|
||||||
|
else
|
||||||
|
echo "No backup directory supplied"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
compile = pkgs.writeBash "compile.sh" ''
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: compile <source file>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
file="$1"
|
||||||
|
ext="''${file##*.}"
|
||||||
|
name="''${file%.*}"
|
||||||
|
|
||||||
|
case "$ext" in
|
||||||
|
asm)
|
||||||
|
echo Compiling "$name" with the Netwide Assembler...
|
||||||
|
nasm -felf64 -o "$name".o "$file"
|
||||||
|
gcc -o "$name" "$name".o;;
|
||||||
|
c)
|
||||||
|
echo Compiling "$name" with the GNU C Compiler...
|
||||||
|
gcc -std=c11 -Wall -Wpedantic -Ofast -o "$name" "$file";;
|
||||||
|
cpp|cxx|cc)
|
||||||
|
echo Compiling "$name" with the GNU C++ Compiler...
|
||||||
|
g++ -std=c++11 -Wall -O3 -o "$name" "$file";;
|
||||||
|
bf)
|
||||||
|
echo Compiling "$name" with the BrainFuck Compiler...
|
||||||
|
bf2c "$file" "$name".c && compile "$name".c && rm "$name".c;;
|
||||||
|
s)
|
||||||
|
echo Assembling "$name" with the GNU Assembler...
|
||||||
|
gcc -o "$name" "$file";;
|
||||||
|
hs)
|
||||||
|
echo Compiling "$name" with the Glasgow Haskell Compiler...
|
||||||
|
stack ghc -- -Wall -O3 --make "$file" && rm "$name".hi "$name".o;;
|
||||||
|
java)
|
||||||
|
echo Compiling "$name" with the Oracle Java Compiler...
|
||||||
|
javac "$file";;
|
||||||
|
rb)
|
||||||
|
echo Compiling "$name" with Ruby...
|
||||||
|
ruby -c "$file";;
|
||||||
|
lua)
|
||||||
|
echo Compiling "$name" with the Lua Compiler...
|
||||||
|
luac -o "$name".luac "$file";;
|
||||||
|
py)
|
||||||
|
if [ ""$2"" = "--optimize" ]; then
|
||||||
|
echo Compiling "$name" with the optimizing Python Compiler...
|
||||||
|
if [ -e "$name".pyo ]; then
|
||||||
|
rm "$name".pyo
|
||||||
|
fi
|
||||||
|
python3 -O -mpy_compile "$file"
|
||||||
|
mv __pycache__/"$name".cpython-33.pyo ./"$name".pyo
|
||||||
|
rmdir __pycache__
|
||||||
|
else
|
||||||
|
echo Compiling "$name" with the Python Compiler...
|
||||||
|
if [ -e "$name".pyc ]; then
|
||||||
|
rm "$name".pyc
|
||||||
|
fi
|
||||||
|
python3 -mpy_compile "$file"
|
||||||
|
mv __pycache__/"$name".cpython-33.pyc ./"$name".pyc
|
||||||
|
rmdir __pycache__
|
||||||
|
fi;;
|
||||||
|
ml)
|
||||||
|
echo Compiling "$name" with the OCaml Compiler...
|
||||||
|
ocamlc -o "$name" "$file" && rm "$name".cmo "$name".cmi;;
|
||||||
|
cs)
|
||||||
|
echo Compiling "$name" with the Mono C£ Compiler...
|
||||||
|
mono-csc -out:"$name" "$file";;
|
||||||
|
fs)
|
||||||
|
echo Compiling "$name" with the F£ Compiler...
|
||||||
|
fsharpc -out:"$name" "$file";;
|
||||||
|
vala)
|
||||||
|
echo Compiling "$name" with the Vala Compiler...
|
||||||
|
valac --pkg=gtk+-3.0 "$file";;
|
||||||
|
md)
|
||||||
|
echo Converting "$name" to PDF with Pandoc...
|
||||||
|
pandoc --latex-engine=xelatex -V documentclass=scrartcl -o "$name".pdf "$file";;
|
||||||
|
tex)
|
||||||
|
echo Compiling "$name" to PDF with LaTeX...
|
||||||
|
latexmk -pdf "$file";;
|
||||||
|
lhs)
|
||||||
|
echo Compiling "$name" with the Glasgow Haskell Compiler...
|
||||||
|
ghc -Wall -O3 --make "$file"
|
||||||
|
echo Converting "$name" to PDF Markup with Pandoc...
|
||||||
|
pandoc "$file" -f markdown+lhs --latex-engine=xelatex -V documentclass=scrartcl -o "$name".pdf;;
|
||||||
|
d)
|
||||||
|
echo Compiling "$name" with the GNU D Compiler...
|
||||||
|
gdc -Wall -O3 -o "$name" "$file";;
|
||||||
|
m)
|
||||||
|
echo Compiling "$name" with the GNU/GNUstep Objective C Compiler...
|
||||||
|
£ gcc -Wall -o "$name" -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthread -fPIC -DGSWARN -Wno-import -g -O2 -fgnu-runtime -fconstant-string-class=NSConstantString -fexec-charset=UTF-8 -I. -I/usr/local/include/GNUstep -I/usr/include/GNUstep -lobjc -lgnustep-base "$file"
|
||||||
|
gcc `gnustep-config --objc-flags` "$file" -o "$name" -lgnustep-base -lobjc
|
||||||
|
;;
|
||||||
|
pas)
|
||||||
|
echo Compiling "$name" with the FreePascal Compiler...
|
||||||
|
fpc "$file";;
|
||||||
|
rs)
|
||||||
|
echo Compiling "$name" with the Rust Compiler...
|
||||||
|
rustc "$file";;
|
||||||
|
ts)
|
||||||
|
echo Compiling "$name" with the TypeScript Compiler...
|
||||||
|
tsc "$file";;
|
||||||
|
*)
|
||||||
|
echo Compiler for "$ext" not found!;;
|
||||||
|
esac
|
||||||
|
'';
|
||||||
|
gitPullAll = pkgs.writeBash "git-pull-all.sh" ''
|
||||||
|
# store the current dir
|
||||||
|
CUR_DIR=$(pwd)
|
||||||
|
# Let the person running the script know what's going on.
|
||||||
|
echo -e "\n\033[1mPulling in latest changes for all repositories...\033[0m\n"
|
||||||
|
# Find all git repositories and update it to the master latest revision
|
||||||
|
for i in $(find . -name ".git" | cut -c 3-); do
|
||||||
|
echo "";
|
||||||
|
echo -e "\033[33m"+$i+"\033[0m";
|
||||||
|
# We have to go to the .git parent directory to call the pull command
|
||||||
|
cd "$i";
|
||||||
|
cd ..;
|
||||||
|
# finally pull
|
||||||
|
git pull origin master;
|
||||||
|
# lets get back to the CUR_DIR
|
||||||
|
cd $CUR_DIR
|
||||||
|
done
|
||||||
|
echo -e "\n\033[32mComplete!\033[0m\n"
|
||||||
|
'';
|
||||||
|
gripe = pkgs.writeBash "gripe.sh" ''${sidepipe} '(:\d+:|-\d+-|--)(\x1b[[]K)?' "$@"'';
|
||||||
|
haskellDefinition = pkgs.writeBash "hdef.sh" ''
|
||||||
|
paths=""
|
||||||
|
while true; do
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
paths="$paths $1"
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
str="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
lower=$(echo "$str" | tr A-Z a-z)
|
||||||
|
if [ "''${lower:0:1}" == "''${str:0:1}" ]; then
|
||||||
|
expr="($str( |$)|[[:space:]]+$str[[:space:]]*::)"
|
||||||
|
else
|
||||||
|
kws="(class|data|type|newtype)"
|
||||||
|
eow="([ \n\t]|$)"
|
||||||
|
expr="$kws[[:space:]]+($str$eow|[^=]+=>[[:space:]]+$str$eow)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${haskellFind} $paths -print0 | xargs -0 grep -En --colour=never -A10 "$@" "^$expr" | ${gripe} hcol | ${highlight} $str
|
||||||
|
'';
|
||||||
|
haskellFind = pkgs.writeBash "hfind.sh" ''
|
||||||
|
paths=""
|
||||||
|
while true; do
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
paths="$paths $1"
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
find $paths \( -name "*.hs" -or -name "*.hsi" -or -name "*.lhs" -or -name "*.hs-boot" \) -a -not \( -name ".*" -or -path "*/_darcs/*" -o -name '.£*' \) "$@"
|
||||||
|
'';
|
||||||
|
haskellGrep = pkgs.writeBash "hgrep.sh" ''
|
||||||
|
if [ -z "$1" -o "$1" == "--help" -o "$1" == "-h" ]; then
|
||||||
|
echo "Usage: hg [PATH] IDENTIFIER [GREP OPTIONS...]"
|
||||||
|
echo "Seaches for uses of the given Haskell identifier."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
paths=""
|
||||||
|
while true; do
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
paths="$paths $1"
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
colour=always
|
||||||
|
if [ "$TERM" == "dumb" -o "$NO_COLORS" == "1" ]; then
|
||||||
|
colour=never
|
||||||
|
fi
|
||||||
|
${haskellFind} $paths -print0 | xargs -0 grep -nw --colour=$colour "$@"
|
||||||
|
'';
|
||||||
|
highlight = pkgs.writePython3 "hl.py" {
|
||||||
|
deps = [ pkgs.python36Packages.ansicolors ];
|
||||||
|
flakeIgnore = [ "E302" "E999" "E231" "E701" "W605" "E231" "E305" ];
|
||||||
|
} ''
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
from ansicolors import *
|
||||||
|
|
||||||
|
def replfun((re,colfun)):
|
||||||
|
def onmatch(m):
|
||||||
|
if m.groups() != ():
|
||||||
|
buf = []
|
||||||
|
p = m.start(0)
|
||||||
|
mstr = m.string
|
||||||
|
try:
|
||||||
|
i = 1
|
||||||
|
while True:
|
||||||
|
(s,e) = m.span(i)
|
||||||
|
if s == -1: continue
|
||||||
|
buf.append(mstr[p:s])
|
||||||
|
buf.append(colfun(mstr[s:e]))
|
||||||
|
p = e
|
||||||
|
i += 1
|
||||||
|
except IndexError:
|
||||||
|
buf.append(mstr[p:m.end(0)])
|
||||||
|
return '\'.join(buf)
|
||||||
|
else:
|
||||||
|
return colfun(m.expand("\g<0>"))
|
||||||
|
return lambda s: re.subn(onmatch,s)[0]
|
||||||
|
|
||||||
|
colfuns = [green, red, magenta, cyan, blue]
|
||||||
|
flags = re.L
|
||||||
|
if len(sys.argv) > 1 and sys.argv[1] == '-i':
|
||||||
|
flags = flags | re.I
|
||||||
|
exps = sys.argv[2:]
|
||||||
|
else:
|
||||||
|
exps = sys.argv[1:]
|
||||||
|
regexps = map(lambda e: re.compile(e, flags), exps)
|
||||||
|
hlfuns = map(replfun, zip(regexps, colfuns))
|
||||||
|
|
||||||
|
term = os.getenv("TERM")
|
||||||
|
no_colors = os.getenv("NO_COLORS")
|
||||||
|
if term == "dumb" or no_colors == "1":
|
||||||
|
for line in sys.stdin:
|
||||||
|
sys.stdout.write(line)
|
||||||
|
else:
|
||||||
|
for line in sys.stdin:
|
||||||
|
sys.stdout.write(reduce(lambda s, f: f(s), hlfuns, line))
|
||||||
|
'';
|
||||||
|
haskellTags = pkgs.writeBash "htags.sh" ''
|
||||||
|
id="[a-z_][a-zA-Z0-9_\']*"
|
||||||
|
ws="[ \\t]"
|
||||||
|
ID="[A-Z][a-zA-Z0-9_\']*"
|
||||||
|
|
||||||
|
${pkgs.ctags}/bin/ctags --tag-relative=no \
|
||||||
|
'--langdef=haskell' \
|
||||||
|
'--langmap=haskell:.hs.lhs' \
|
||||||
|
'--regex-haskell=/^(type|data|newtype)[ \t]+([^ \t=]+)/\2/' \
|
||||||
|
'--regex-haskell=/^class[^=]+=>[ \t]*([^ \t]+)/\1/' \
|
||||||
|
'--regex-haskell=/^class[ \t]+([^ \t]+)[^=]*$/\1/' \
|
||||||
|
"--regex-haskell=/^$ws*($id)$ws*::/\1/" \
|
||||||
|
"--regex-haskell=/^($id)/\1/" \
|
||||||
|
"$@"
|
||||||
|
'';
|
||||||
|
sidepipe = pkgs.writePython3 "sidepipe.py" { flakeIgnore = [ "E302" "E231" "E999" "E265" "E305" ]; } ''
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import os.path
|
||||||
|
from Queue import Queue
|
||||||
|
from subprocess import Popen, PIPE
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
pipeIsLeft = os.path.basename(sys.argv[0]) == "leftpipe"
|
||||||
|
regex = sys.argv[1]
|
||||||
|
cmd = sys.argv[2:]
|
||||||
|
|
||||||
|
class WorkerThread(Thread):
|
||||||
|
def __init__(self, queue, instream, outstream, pipeIsLeft):
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.queue = queue
|
||||||
|
self.instream = instream
|
||||||
|
self.outstream = outstream
|
||||||
|
self.pipeIsLeft = pipeIsLeft
|
||||||
|
|
||||||
|
class SplitThread(WorkerThread):
|
||||||
|
def run(self):
|
||||||
|
try:
|
||||||
|
for line in self.instream:
|
||||||
|
match = re.search(regex,line)
|
||||||
|
if not match:
|
||||||
|
print >> sys.stderr, "No match: %r in %r" % (regex,line)
|
||||||
|
continue
|
||||||
|
index = match.end()
|
||||||
|
left, right = line[:index], line[index:]
|
||||||
|
if pipeIsLeft:
|
||||||
|
self.outstream.write(left)
|
||||||
|
self.queue.put(right)
|
||||||
|
else:
|
||||||
|
self.outstream.write(right)
|
||||||
|
self.queue.put(left)
|
||||||
|
self.outstream.close()
|
||||||
|
except IOError, e:
|
||||||
|
print >> sys.stderr, e[1]
|
||||||
|
self.outstream.close()
|
||||||
|
while not queue.full():
|
||||||
|
queue.put("")
|
||||||
|
|
||||||
|
class JoinThread(WorkerThread):
|
||||||
|
def run(self):
|
||||||
|
for pipeline in self.instream:
|
||||||
|
#print >> sys.stderr, "wait"
|
||||||
|
passline = self.queue.get()
|
||||||
|
#print >> sys.stderr, "ok"
|
||||||
|
if pipeIsLeft:
|
||||||
|
self.outstream.write(pipeline)
|
||||||
|
self.outstream.write(passline)
|
||||||
|
else:
|
||||||
|
self.outstream.write(passline)
|
||||||
|
self.outstream.write(pipeline)
|
||||||
|
|
||||||
|
pipe = Popen(cmd, shell=False,stdin=PIPE,stdout=PIPE)
|
||||||
|
queue = Queue(250)
|
||||||
|
t1 = SplitThread(queue, sys.stdin, pipe.stdin, pipeIsLeft)
|
||||||
|
t2 = JoinThread(queue, pipe.stdout, sys.stdout, pipeIsLeft)
|
||||||
|
t1.start()
|
||||||
|
t2.start()
|
||||||
|
t2.join()
|
||||||
|
'';
|
||||||
|
spotifyCli = pkgs.writeBash "sp.sh" ''
|
||||||
|
# This is sp, the command-line Spotify controller. It talks to a running
|
||||||
|
# instance of the Spotify Linux client over dbus, providing an interface not
|
||||||
|
# unlike mpc.
|
||||||
|
#
|
||||||
|
# Put differently, it allows you to control Spotify without leaving the comfort
|
||||||
|
# of your command line, and without a custom client or Premium subscription.
|
||||||
|
#
|
||||||
|
# As an added bonus, it also works with ssh, at and cron.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# $ sp weather girls raining men
|
||||||
|
# $ sp current
|
||||||
|
# Album 100 Hits Of The '80s
|
||||||
|
# Artist The Weather Girls
|
||||||
|
# Title It's Raining Men
|
||||||
|
# $ sp pause
|
||||||
|
#
|
||||||
|
# Alarm clock example:
|
||||||
|
# $ at 7:45 <<< 'sp bangarang'
|
||||||
|
#
|
||||||
|
# Remote example:
|
||||||
|
# $ ssh vader@prod02.nomoon.ta 'sp imperial march'
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Wander Nauta
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software, to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
# persons to whom the Software is furnished to do so, subject to the following
|
||||||
|
# conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# The software is provided "as is", without warranty of any kind, express or
|
||||||
|
# implied, including but not limited to the warranties of merchantability,
|
||||||
|
# fitness for a particular purpose and noninfringement. In no event shall the
|
||||||
|
# authors or copyright holders be liable for any claim, damages or other
|
||||||
|
# liability, whether in an action of contract, tort or otherwise, arising from,
|
||||||
|
# out of or in connection with the software or the use or other dealings in the
|
||||||
|
# software.
|
||||||
|
#
|
||||||
|
|
||||||
|
# CONSTANTS
|
||||||
|
|
||||||
|
SP_VERSION="0.1"
|
||||||
|
SP_DEST="org.mpris.MediaPlayer2.spotify"
|
||||||
|
SP_PATH="/org/mpris/MediaPlayer2"
|
||||||
|
SP_MEMB="org.mpris.MediaPlayer2.Player"
|
||||||
|
|
||||||
|
# SHELL OPTIONS
|
||||||
|
|
||||||
|
shopt -s expand_aliases
|
||||||
|
|
||||||
|
# UTILITY FUNCTIONS
|
||||||
|
|
||||||
|
function require {
|
||||||
|
hash $1 2>/dev/null || {
|
||||||
|
echo >&2 "Error: '$1' is required, but was not found."; exit 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# COMMON REQUIRED BINARIES
|
||||||
|
|
||||||
|
# We need dbus-send to talk to Spotify.
|
||||||
|
require dbus-send
|
||||||
|
|
||||||
|
# Assert standard Unix utilities are available.
|
||||||
|
require grep
|
||||||
|
require sed
|
||||||
|
require cut
|
||||||
|
require tr
|
||||||
|
|
||||||
|
# 'SPECIAL' (NON-DBUS-ALIAS) COMMANDS
|
||||||
|
|
||||||
|
function sp-dbus {
|
||||||
|
# Sends the given method to Spotify over dbus.
|
||||||
|
dbus-send --print-reply --dest=$SP_DEST $SP_PATH $SP_MEMB.$1 ''${*:2} > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-open {
|
||||||
|
# Opens the given spotify: URI in Spotify.
|
||||||
|
sp-dbus OpenUri string:$1
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-metadata {
|
||||||
|
# Prints the currently playing track in a parseable format.
|
||||||
|
|
||||||
|
dbus-send \
|
||||||
|
--print-reply `# We need the reply.` \
|
||||||
|
--dest=$SP_DEST \
|
||||||
|
$SP_PATH \
|
||||||
|
org.freedesktop.DBus.Properties.Get \
|
||||||
|
string:"$SP_MEMB" string:'Metadata' \
|
||||||
|
| grep -Ev "^method" `# Ignore the first line.` \
|
||||||
|
| grep -Eo '("(.*)")|(\b[0-9][a-zA-Z0-9.]*\b)' `# Filter interesting fiels.`\
|
||||||
|
| sed -E '2~2 a|' `# Mark odd fields.` \
|
||||||
|
| tr -d '\n' `# Remove all newlines.` \
|
||||||
|
| sed -E 's/\|/\n/g' `# Restore newlines.` \
|
||||||
|
| sed -E 's/(xesam:)|(mpris:)//' `# Remove ns prefixes.` \
|
||||||
|
| sed -E 's/^"//' `# Strip leading...` \
|
||||||
|
| sed -E 's/"$//' `# ...and trailing quotes.` \
|
||||||
|
| sed -E 's/"+/|/' `# Regard "" as seperator.` \
|
||||||
|
| sed -E 's/ +/ /g' `# Merge consecutive spaces.`
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-current {
|
||||||
|
# Prints the currently playing track in a friendly format.
|
||||||
|
require column
|
||||||
|
|
||||||
|
sp-metadata \
|
||||||
|
| grep --color=never -E "(title)|(album)|(artist)" \
|
||||||
|
| sed 's/^\(.\)/\U\1/' \
|
||||||
|
| column -t -s'|'
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-eval {
|
||||||
|
# Prints the currently playing track as shell variables, ready to be eval'ed
|
||||||
|
require sort
|
||||||
|
|
||||||
|
sp-metadata \
|
||||||
|
| grep --color=never -E "(title)|(album)|(artist)|(trackid)|(trackNumber)" \
|
||||||
|
| sort -r \
|
||||||
|
| sed 's/^\([^|]*\)\|/\U\1/' \
|
||||||
|
| sed -E 's/\|/="/' \
|
||||||
|
| sed -E 's/$/"/' \
|
||||||
|
| sed -E 's/^/SPOTIFY_/'
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-art {
|
||||||
|
# Prints the artUrl.
|
||||||
|
|
||||||
|
sp-metadata | grep "artUrl" | cut -d'|' -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-display {
|
||||||
|
# Calls display on the artUrl.
|
||||||
|
|
||||||
|
require display
|
||||||
|
display $(sp-art)
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-feh {
|
||||||
|
# Calls feh on the artURl.
|
||||||
|
|
||||||
|
require feh
|
||||||
|
feh $(sp-art)
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-url {
|
||||||
|
# Prints the HTTP url.
|
||||||
|
|
||||||
|
TRACK=$(sp-metadata | grep "url" | cut -d'|' -f2 | cut -d':' -f3)
|
||||||
|
echo "http://open.spotify.com/track/$TRACK"
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-clip {
|
||||||
|
# Copies the HTTP url.
|
||||||
|
|
||||||
|
require xclip
|
||||||
|
sp-url | xclip
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-http {
|
||||||
|
# xdg-opens the HTTP url.
|
||||||
|
|
||||||
|
require xdg-open
|
||||||
|
xdg-open $(sp-url)
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-help {
|
||||||
|
# Prints usage information.
|
||||||
|
|
||||||
|
echo "Usage: sp [command]"
|
||||||
|
echo "Control a running Spotify instance from the command line."
|
||||||
|
echo ""
|
||||||
|
echo " sp play - Play/pause Spotify"
|
||||||
|
echo " sp pause - Pause Spotify"
|
||||||
|
echo " sp next - Go to next track"
|
||||||
|
echo " sp prev - Go to previous track"
|
||||||
|
echo ""
|
||||||
|
echo " sp current - Format the currently playing track"
|
||||||
|
echo " sp metadata - Dump the current track's metadata"
|
||||||
|
echo " sp eval - Return the metadata as a shell script"
|
||||||
|
echo ""
|
||||||
|
echo " sp art - Print the URL to the current track's album artwork"
|
||||||
|
echo " sp display - Display the current album artwork with \`display\`"
|
||||||
|
echo " sp feh - Display the current album artwork with \`feh\`"
|
||||||
|
echo ""
|
||||||
|
echo " sp url - Print the HTTP URL for the currently playing track"
|
||||||
|
echo " sp clip - Copy the HTTP URL to the X clipboard"
|
||||||
|
echo " sp http - Open the HTTP URL in a web browser"
|
||||||
|
echo ""
|
||||||
|
echo " sp open <uri> - Open a spotify: uri"
|
||||||
|
echo " sp search <q> - Start playing the best search result for the given query"
|
||||||
|
echo ""
|
||||||
|
echo " sp version - Show version information"
|
||||||
|
echo " sp help - Show this information"
|
||||||
|
echo ""
|
||||||
|
echo "Any other argument will start a search (i.e. 'sp foo' will search for foo)."
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-search {
|
||||||
|
# Searches for tracks, plays the first result.
|
||||||
|
|
||||||
|
require curl
|
||||||
|
|
||||||
|
Q="$@"
|
||||||
|
SPTFY_URI=$( \
|
||||||
|
curl -s -G --data-urlencode "q=$Q" ws.spotify.com/search/1/track \
|
||||||
|
| grep -E -o "spotify:track:[a-zA-Z0-9]+" -m 1 \
|
||||||
|
)
|
||||||
|
|
||||||
|
sp-open $SPTFY_URI
|
||||||
|
}
|
||||||
|
|
||||||
|
function sp-version {
|
||||||
|
# Prints version information.
|
||||||
|
|
||||||
|
echo "sp $SP_VERSION"
|
||||||
|
echo "Copyright (C) 2013 Wander Nauta"
|
||||||
|
echo "License MIT"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 'SIMPLE' (DBUS-ALIAS) COMMANDS
|
||||||
|
|
||||||
|
alias sp-play=" sp-dbus PlayPause"
|
||||||
|
alias sp-pause=" sp-dbus Pause"
|
||||||
|
alias sp-next=" sp-dbus Next"
|
||||||
|
alias sp-prev=" sp-dbus Previous"
|
||||||
|
|
||||||
|
# DISPATCHER
|
||||||
|
|
||||||
|
# First, we connect to the dbus session spotify is on. This isn't really needed
|
||||||
|
# when running locally, but is crucial when we don't have an X display handy
|
||||||
|
# (for instance, when running sp over ssh.)
|
||||||
|
|
||||||
|
SPOTIFY_PID="$(pidof -s spotify)"
|
||||||
|
|
||||||
|
if [[ -z "$SPOTIFY_PID" ]]; then
|
||||||
|
echo "Error: Spotify is not running."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
QUERY_ENVIRON="$(cat /proc/''${SPOTIFY_PID}/environ | tr '\0' '\n' | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
|
||||||
|
if [[ "''${QUERY_ENVIRON}" != "" ]]; then
|
||||||
|
export DBUS_SESSION_BUS_ADDRESS="''${QUERY_ENVIRON}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Then we dispatch the command.
|
||||||
|
|
||||||
|
subcommand="$1"
|
||||||
|
|
||||||
|
if [[ -z "$subcommand" ]]; then
|
||||||
|
# No arguments given, print help.
|
||||||
|
sp-help
|
||||||
|
else
|
||||||
|
# Arguments given, check if it's a command.
|
||||||
|
if $(type sp-$subcommand > /dev/null 2> /dev/null); then
|
||||||
|
# It is. Run it.
|
||||||
|
shift
|
||||||
|
eval "sp-$subcommand $@"
|
||||||
|
else
|
||||||
|
# It's not. Try a search.
|
||||||
|
eval "sp-search $@"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
spotifyGenius = pkgs.writeBash "spgenius.sh" ''
|
||||||
|
function normalise {
|
||||||
|
echo ''${1// /-}
|
||||||
|
}
|
||||||
|
eval $(${spotifyCli} eval)
|
||||||
|
${defaultApplications.webBrowser} "http://genius.com/$(normalise "$SPOTIFY_ARTIST")-$(normalise "$SPOTIFY_TITLE")-lyrics"
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
compile = compile;
|
||||||
|
easy-backup = easyBackup;
|
||||||
|
colorize = colorize;
|
||||||
|
bing-wallpaper = bingWallpaper;
|
||||||
|
git-pull-all = gitPullAll;
|
||||||
|
hdef = haskellDefinition;
|
||||||
|
hfind = haskellFind;
|
||||||
|
hgrep = haskellGrep;
|
||||||
|
htags = haskellTags;
|
||||||
|
sp = spotifyCli;
|
||||||
|
spgenius = spotifyGenius;
|
||||||
|
}
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
{ fullName, fullEmail, githubUser }:
|
user:
|
||||||
''
|
''
|
||||||
templates:
|
templates:
|
||||||
params:
|
params:
|
||||||
author-name: ${fullName}
|
author-name: ${user.name}
|
||||||
author-email: ${fullEmail}
|
author-email: ${user.email}
|
||||||
category: Data
|
copyright: 'Copyright: (c) 2018 ${user.name}'
|
||||||
copyright: 'Copyright: (c) 2018 ${fullName}'
|
github-username: ${user.github}
|
||||||
github-username: ${githubUser}
|
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{ defaultApplications }:
|
defaultApplications:
|
||||||
with import ../theme.nix;
|
with import ../theme.nix;
|
||||||
''
|
''
|
||||||
[Configuration]
|
[Configuration]
|
||||||
BackgroundDarkness=0.95
|
BackgroundDarkness=0.9
|
||||||
BackgroundMode=TERMINAL_BACKGROUND_TRANSPARENT
|
BackgroundMode=TERMINAL_BACKGROUND_TRANSPARENT
|
||||||
ColorBackground=${veryDark}
|
ColorBackground=${veryDark}
|
||||||
ColorCursor=${light}
|
ColorCursor=${gray.light}
|
||||||
ColorForeground=${light}
|
ColorForeground=${gray.light}
|
||||||
ColorPalette=${dark};${red.dark};${green.dark};${yellow.dark};${blue.dark};${magenta.dark};${cyan.dark};${light};${dark};${red.light};${green.light};${yellow.light};${blue.light};${magenta.light};${cyan.light};${light}
|
ColorPalette=${builtins.concatStringsSep ";" colorPalette}
|
||||||
FontName=${terminalFont.regular.name} ${toString terminalFont.size}
|
FontName=${terminalFont.regular.name} ${toString terminalFont.size}
|
||||||
MiscAlwaysShowTabs=FALSE
|
MiscAlwaysShowTabs=FALSE
|
||||||
MiscBell=TRUE
|
MiscBell=TRUE
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ set -g status-left-length 32
|
|||||||
set -g status-right-length 150
|
set -g status-right-length 150
|
||||||
|
|
||||||
# Appearance
|
# Appearance
|
||||||
set -g default-terminal "screen-256color"
|
# set -g status-utf8 on
|
||||||
set -g status-utf8 on
|
|
||||||
set -g status-bg default
|
set -g status-bg default
|
||||||
# set -g status-fg white
|
# set -g status-fg white
|
||||||
setw -g window-status-format "#[fg=colour12,bg=colour233] #I #[fg=white,bg=colour237] #W "
|
setw -g window-status-format "#[fg=colour12,bg=colour233] #I #[fg=white,bg=colour237] #W "
|
||||||
|
|||||||
321
dot/vim.nix
321
dot/vim.nix
@@ -1,153 +1,190 @@
|
|||||||
''
|
pkgs:
|
||||||
filetype off
|
let vimrc = with import ../constants.nix; ''
|
||||||
|
if exists("g:loaded_airline")
|
||||||
" if exists("g:loaded_airline")
|
set noshowmode laststatus=0 noruler
|
||||||
set noshowmode laststatus=0 noruler
|
let g:airline#extensions#tabline#close_symbol = 'X'
|
||||||
let g:airline#extensions#tabline#close_symbol = 'X'
|
let g:airline#extensions#tabline#enabled = 0
|
||||||
let g:airline#extensions#tabline#enabled = 0
|
let g:airline#extensions#tabline#left_alt_sep = ''
|
||||||
let g:airline#extensions#tabline#left_alt_sep = ''
|
let g:airline#extensions#tabline#left_sep = ''
|
||||||
let g:airline#extensions#tabline#left_sep = ''
|
let g:airline#extensions#tabline#right_alt_sep = ''
|
||||||
let g:airline#extensions#tabline#right_alt_sep = ''
|
let g:airline#extensions#tabline#right_sep = ''
|
||||||
let g:airline#extensions#tabline#right_sep = ''
|
let g:airline#extensions#tabline#show_close_button = 1
|
||||||
let g:airline#extensions#tabline#show_close_button = 1
|
let g:airline#extensions#tabline#show_tab_type = 0
|
||||||
let g:airline#extensions#tabline#show_tab_type = 0
|
let g:airline#extensions#tabline#tab_min_count = 2
|
||||||
let g:airline#extensions#tabline#tab_min_count = 2
|
let g:airline#extensions#tabline#tab_nr_type = 0
|
||||||
let g:airline#extensions#tabline#tab_nr_type = 0
|
let g:airline#extensions#tmuxline#enabled = 0
|
||||||
let g:airline#extensions#tmuxline#enabled = 0
|
let g:airline#extensions#wordcount#enabled = 1
|
||||||
let g:airline#extensions#wordcount#enabled = 1
|
let g:airline_left_alt_sep = ''
|
||||||
let g:airline_left_alt_sep = ''
|
let g:airline_left_sep = ''
|
||||||
let g:airline_left_sep = ''
|
let g:airline_right_alt_sep = ''
|
||||||
let g:airline_right_alt_sep = ''
|
let g:airline_right_sep = ''
|
||||||
let g:airline_right_sep = ''
|
let g:airline_section_z = '%{line(".")}/%{line("$")} %{col(".")}'
|
||||||
let g:airline_section_z = '%{line(".")}/%{line("$")} %{col(".")}'
|
endif
|
||||||
" endif
|
if exists("g:loaded_airline_themes")
|
||||||
" if exists("g:loaded_airline_themes")
|
let g:airline_theme='simple'
|
||||||
let g:airline_theme='simple'
|
|
||||||
" endif
|
|
||||||
|
|
||||||
" if exists("g:loaded_syntastic_plugin")
|
|
||||||
let g:syntastic_always_populate_loc_list = 1
|
|
||||||
let g:syntastic_auto_loc_list = 0
|
|
||||||
let g:syntastic_check_on_open = 0
|
|
||||||
let g:syntastic_check_on_wq = 0
|
|
||||||
map ,s :SyntasticToggleMode<CR>
|
|
||||||
" endif
|
|
||||||
|
|
||||||
" if exists("g:loaded_gundo")
|
|
||||||
nnoremap <F5> :GundoToggle<CR>
|
|
||||||
" endif
|
|
||||||
|
|
||||||
" if supertab
|
|
||||||
let g:SuperTabDefaultCompletionType = '<c-n>'
|
|
||||||
if has("unix")
|
|
||||||
inoremap <Nul> <c-r>=SuperTabAlternateCompletion("\<lt>c-x>\<lt>c-o>")<cr>
|
|
||||||
endif
|
|
||||||
|
|
||||||
" if tabular
|
|
||||||
vmap a= :Tabularize /=<CR>
|
|
||||||
vmap a; :Tabularize /::<CR>
|
|
||||||
vmap a- :Tabularize /-><CR>
|
|
||||||
|
|
||||||
colorscheme delek
|
|
||||||
|
|
||||||
set path=$PWD/**
|
|
||||||
set completeopt=menu,longest
|
|
||||||
set wildmode=longest,list,full
|
|
||||||
set shortmess+=aI
|
|
||||||
set nowritebackup noswapfile
|
|
||||||
set mouse=a
|
|
||||||
set showmatch
|
|
||||||
set encoding=utf8
|
|
||||||
set ffs=unix,dos,mac
|
|
||||||
set smartindent
|
|
||||||
set nowrap
|
|
||||||
set nohlsearch
|
|
||||||
set clipboard=unnamedplus,autoselect
|
|
||||||
set nopaste
|
|
||||||
set list listchars=tab:▸\ ,extends:❯,precedes:❮,nbsp:⍽ showbreak=↪
|
|
||||||
set foldlevelstart=30
|
|
||||||
|
|
||||||
" if exists("g:loaded_netrwPlugin")
|
|
||||||
let g:netrw_banner=0
|
|
||||||
let g:netrw_browse_split=4
|
|
||||||
let g:netrw_altv=1 " open splits to the right
|
|
||||||
let g:netrw_liststyle=3 " tree view
|
|
||||||
let g:netrw_list_hide=netrw_gitignore#Hide()
|
|
||||||
let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
|
|
||||||
" endif
|
|
||||||
|
|
||||||
call matchadd('colorcolumn', '\%101v', 100)
|
|
||||||
highlight folded ctermbg=black
|
|
||||||
highlight colorcolumn ctermbg=red
|
|
||||||
highlight matchparen cterm=bold ctermbg=black ctermfg=white
|
|
||||||
highlight TrailSpace ctermbg=red guibg=darkred
|
|
||||||
match TrailSpace /\s\+$/
|
|
||||||
|
|
||||||
" undofile - This allows you to use undos after exiting and restarting
|
|
||||||
" This, like swap and backups, uses .vim-undo first, then ~/.vim/undo
|
|
||||||
" :help undo-persistence
|
|
||||||
if exists("+undofile")
|
|
||||||
if isdirectory($HOME . '/.vim/undo') == 0
|
|
||||||
:silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
|
|
||||||
endif
|
endif
|
||||||
set undodir=./.vim-undo//
|
|
||||||
set undodir+=~/.vim/undo//
|
|
||||||
set undofile
|
|
||||||
endif
|
|
||||||
|
|
||||||
nmap <C-j> ddp
|
if exists("g:loaded_syntastic_plugin")
|
||||||
nmap <C-k> ddkP
|
let g:syntastic_always_populate_loc_list = 1
|
||||||
vmap <C-j> xp`[V`]
|
let g:syntastic_auto_loc_list = 0
|
||||||
vmap <C-k> xkP`[V`]
|
let g:syntastic_check_on_open = 0
|
||||||
|
let g:syntastic_check_on_wq = 0
|
||||||
|
map ,s :SyntasticToggleMode<CR>
|
||||||
|
endif
|
||||||
|
|
||||||
nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
|
if exists("g:loaded_gundo")
|
||||||
vnoremap <Space> zf
|
nnoremap <F5> :GundoToggle<CR>
|
||||||
|
endif
|
||||||
|
|
||||||
command! RandomLine execute 'normal! '.(system('/bin/bash -c "echo -n $RANDOM"') % line('$')).'G'
|
" if tabular
|
||||||
|
vmap a= :Tabularize /=<CR>
|
||||||
|
vmap a; :Tabularize /::<CR>
|
||||||
|
vmap a- :Tabularize /-><CR>
|
||||||
|
|
||||||
function! <SID>StripTrailingWhitespaces()
|
colorscheme delek
|
||||||
let _s=@/
|
set t_Co=256
|
||||||
let l=line(".")
|
|
||||||
let c=col(".")
|
|
||||||
|
|
||||||
%s/\s\+$//e
|
filetype plugin indent on
|
||||||
|
set nocompatible
|
||||||
|
set smartcase
|
||||||
|
set shiftwidth=2 tabstop=2 expandtab
|
||||||
|
set number
|
||||||
|
set path=$PWD/**
|
||||||
|
set completeopt=menu,longest
|
||||||
|
set wildmode=longest,list,full
|
||||||
|
set wildignore+=${commaSep ignoredFiles}
|
||||||
|
set shortmess+=aI
|
||||||
|
set nowritebackup noswapfile
|
||||||
|
set mouse=a
|
||||||
|
set showmatch
|
||||||
|
set encoding=utf8
|
||||||
|
set ffs=unix,dos,mac
|
||||||
|
set smartindent
|
||||||
|
set nowrap
|
||||||
|
set nohlsearch
|
||||||
|
set clipboard=unnamedplus,autoselect
|
||||||
|
set nopaste
|
||||||
|
set list listchars=tab:▸\ ,extends:❯,precedes:❮,nbsp:⍽ showbreak=↪
|
||||||
|
set foldlevelstart=30
|
||||||
|
|
||||||
let @/=_s
|
if exists("g:loaded_netrwPlugin")
|
||||||
call cursor(l,c)
|
let g:netrw_banner=0
|
||||||
endfunction
|
let g:netrw_browse_split=4
|
||||||
|
let g:netrw_altv=1 " open splits to the right
|
||||||
|
let g:netrw_liststyle=3 " tree view
|
||||||
|
let g:netrw_list_hide=netrw_gitignore#Hide()
|
||||||
|
let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
|
||||||
|
endif
|
||||||
|
|
||||||
function! s:DiffWithSaved()
|
call matchadd('colorcolumn', '\%101v', 100)
|
||||||
let filetype=&ft
|
highlight folded ctermbg=black
|
||||||
diffthis
|
highlight colorcolumn ctermbg=red
|
||||||
vnew | r # | normal! 1Gdd
|
highlight matchparen cterm=bold ctermbg=black ctermfg=white
|
||||||
diffthis
|
highlight TrailSpace ctermbg=red guibg=darkred
|
||||||
execute "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
|
match TrailSpace /\s\+$/
|
||||||
endfunction
|
|
||||||
command! DiffSaved call s:DiffWithSaved()
|
|
||||||
|
|
||||||
if has("autocmd")
|
" undofile - This allows you to use undos after exiting and restarting
|
||||||
autocmd filetype markdown,text set formatprg=par\ -w80
|
" This, like swap and backups, uses .vim-undo first, then ~/.vim/undo
|
||||||
autocmd filetype haskell set formatprg=hindent
|
" :help undo-persistence
|
||||||
autocmd filetype markdown,text set textwidth=80
|
if exists("+undofile")
|
||||||
autocmd filetype markdown,text set formatoptions+=t
|
if isdirectory($HOME . '/.vim/undo') == 0
|
||||||
autocmd bufreadpost *
|
:silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
|
||||||
\ if line("'\"") > 0 && line("'\"") <= line("$") |
|
endif
|
||||||
\ exe "normal! g`\"" |
|
set undodir=./.vim-undo//
|
||||||
\ endif
|
set undodir+=~/.vim/undo//
|
||||||
autocmd bufwritepre * :call <SID>StripTrailingWhitespaces()
|
set undofile
|
||||||
autocmd bufnewfile,bufread *.md set filetype=markdown.pandoc
|
endif
|
||||||
autocmd bufnewfile,bufread *.asm set filetype=nasm
|
|
||||||
autocmd bufnewfile,bufread *.bf set filetype=brainfuck
|
|
||||||
autocmd bufnewfile,bufread *.do set filetype=sh
|
|
||||||
autocmd bufnewfile,bufread config set filetype=conf
|
|
||||||
autocmd bufnewfile,bufread *.conf set filetype=conf
|
|
||||||
autocmd bufnewfile,bufread *.4th set filetype=forth
|
|
||||||
autocmd bufnewfile,bufread *.c set keywordprg=man\ 3
|
|
||||||
autocmd bufnewfile,bufread *.h set keywordprg=man\ 3
|
|
||||||
|
|
||||||
autocmd filetype make setlocal noexpandtab
|
nmap <C-j> ddp | vmap <C-j> xp`[V`]
|
||||||
|
nmap <C-k> ddkP | vmap <C-k> xkP`[V`]
|
||||||
|
|
||||||
autocmd bufreadpre * setlocal foldmethod=indent
|
nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
|
||||||
autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif
|
vnoremap <Space> zf
|
||||||
endif
|
|
||||||
''
|
command! RandomLine execute 'normal! '.(system('/bin/bash -c "echo -n $RANDOM"') % line('$')).'G'
|
||||||
|
|
||||||
|
function! <SID>StripTrailingWhitespaces()
|
||||||
|
let _s=@/
|
||||||
|
let l=line(".")
|
||||||
|
let c=col(".")
|
||||||
|
|
||||||
|
%s/\s\+$//e
|
||||||
|
|
||||||
|
let @/=_s
|
||||||
|
call cursor(l,c)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:DiffWithSaved()
|
||||||
|
let filetype=&ft
|
||||||
|
diffthis
|
||||||
|
vnew | r # | normal! 1Gdd
|
||||||
|
diffthis
|
||||||
|
execute "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
|
||||||
|
endfunction
|
||||||
|
command! DiffSaved call s:DiffWithSaved()
|
||||||
|
|
||||||
|
if has("autocmd")
|
||||||
|
autocmd filetype markdown,text set formatprg=par\ -w80
|
||||||
|
autocmd filetype haskell set formatprg=hindent
|
||||||
|
autocmd filetype markdown,text set textwidth=80
|
||||||
|
autocmd filetype markdown,text set formatoptions+=t
|
||||||
|
autocmd bufreadpost *
|
||||||
|
\ if line("'\"") > 0 && line("'\"") <= line("$") |
|
||||||
|
\ exe "normal! g`\"" |
|
||||||
|
\ endif
|
||||||
|
autocmd bufwritepre * :call <SID>StripTrailingWhitespaces()
|
||||||
|
autocmd bufnewfile,bufread *.md set filetype=markdown.pandoc
|
||||||
|
autocmd bufnewfile,bufread *.asm set filetype=nasm
|
||||||
|
autocmd bufnewfile,bufread *.tex :packadd vimtex | set filetype=tex
|
||||||
|
autocmd bufnewfile,bufread *.rust :packadd rust-vim deoplete-rust
|
||||||
|
autocmd bufnewfile,bufread *.nix :packadd vim-nix
|
||||||
|
autocmd filetype javascript *.js :packadd vim-javascript
|
||||||
|
autocmd bufnewfile,bufread *.ts :packadd vim-typescript
|
||||||
|
autocmd filetype haskell :packadd Hoogle
|
||||||
|
autocmd bufnewfile,bufread *.do set filetype=sh
|
||||||
|
autocmd bufnewfile,bufread config set filetype=conf
|
||||||
|
autocmd bufnewfile,bufread *.conf set filetype=conf
|
||||||
|
autocmd bufnewfile,bufread *.4th set filetype=forth
|
||||||
|
autocmd bufnewfile,bufread *.c set keywordprg=man\ 3
|
||||||
|
autocmd bufnewfile,bufread *.h set keywordprg=man\ 3
|
||||||
|
|
||||||
|
autocmd filetype make setlocal noexpandtab
|
||||||
|
|
||||||
|
autocmd bufreadpre * setlocal foldmethod=indent
|
||||||
|
autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif
|
||||||
|
endif
|
||||||
|
''; in
|
||||||
|
pkgs.vim_configurable.customize {
|
||||||
|
name = "vim";
|
||||||
|
vimrcConfig.customRC = vimrc;
|
||||||
|
vimrcConfig.packages.vim = with pkgs.vimPlugins; {
|
||||||
|
start = [
|
||||||
|
ctrlp
|
||||||
|
deoplete-nvim
|
||||||
|
supertab
|
||||||
|
syntastic
|
||||||
|
tabular
|
||||||
|
vim-airline
|
||||||
|
vim-airline-themes
|
||||||
|
vim-commentary
|
||||||
|
vim-eunuch
|
||||||
|
vim-fugitive
|
||||||
|
vim-gitgutter
|
||||||
|
vim-pandoc vim-pandoc-after vim-pandoc-syntax
|
||||||
|
vim-repeat
|
||||||
|
vim-sensible
|
||||||
|
vim-startify
|
||||||
|
vim-surround
|
||||||
|
];
|
||||||
|
opt = [
|
||||||
|
Hoogle
|
||||||
|
deoplete-rust
|
||||||
|
idris-vim
|
||||||
|
vimtex
|
||||||
|
rust-vim
|
||||||
|
typescript-vim
|
||||||
|
vim-javascript
|
||||||
|
vim-nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
28
theme.nix
28
theme.nix
@@ -10,16 +10,20 @@
|
|||||||
|
|
||||||
white = "#ffffff";
|
white = "#ffffff";
|
||||||
black = "#000000";
|
black = "#000000";
|
||||||
gray = { light = "#aaaaaa"; dark = "#888888"; };
|
|
||||||
|
|
||||||
# Antares color scheme
|
|
||||||
dark = "#151515";
|
|
||||||
veryDark = "#080808";
|
veryDark = "#080808";
|
||||||
red = { light = "#de575c"; dark = "#de575c"; };
|
} // rec {
|
||||||
yellow = { light = "#ebe971"; dark = "#ebe971"; };
|
colorPalette = [
|
||||||
green = { light = "#00b853"; dark = "#00b853"; };
|
gray.dark red.dark green.dark yellow.dark blue.dark magenta.dark cyan.dark gray.light
|
||||||
blue = { light = "#90d0f0"; dark = "#7fc6f0"; };
|
gray.dark red.light green.light yellow.light blue.light magenta.light cyan.light gray.light
|
||||||
magenta = { light = "#cf9ffa"; dark = "#cf9ffa"; };
|
];
|
||||||
cyan = { light = "#4ae5e8"; dark = "#4ae5e8"; };
|
|
||||||
light = "#bbbbbb";
|
# Antares color scheme
|
||||||
}
|
gray = { light = "#bbbbbb"; dark = "#151515"; };
|
||||||
|
red = { light = "#de575c"; dark = "#de575c"; };
|
||||||
|
yellow = { light = "#ebe971"; dark = "#ebe971"; };
|
||||||
|
green = { light = "#00b853"; dark = "#00b853"; };
|
||||||
|
blue = { light = "#90d0f0"; dark = "#7fc6f0"; };
|
||||||
|
magenta = { light = "#cf9ffa"; dark = "#cf9ffa"; };
|
||||||
|
cyan = { light = "#4ae5e8"; dark = "#4ae5e8"; };
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user