1
0
mirror of https://github.com/kmein/niveum synced 2026-03-21 20:31:07 +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:
kmein
2018-09-13 22:48:38 +02:00
parent 456e8d5027
commit 4ecbcf1b66
12 changed files with 1007 additions and 311 deletions

View File

@@ -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";
tmux = "${pkgs.tmux}/bin/tmux -2";
clipboard = "${pkgs.xclip}/bin/xclip -se c"; clipboard = "${pkgs.xclip}/bin/xclip -se c";
external-ip = "${pkgs.dnsutils}/bin/dig +short myip.opendns.com @resolver1.opendns.com";
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";
external-ip = "${pkgs.dnsutils}/bin/dig +short myip.opendns.com @resolver1.opendns.com"; ip = "${pkgs.iproute}/bin/ip -c";
}; 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;
networking.networkmanager.enable = true;
home-manager.users.kfm = {
programs.command-not-found.enable = true; programs.command-not-found.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 = {
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
View 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";
};
}

View File

@@ -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 ++ "\" "

View File

@@ -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
'' ''

View File

@@ -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
View File

@@ -0,0 +1,8 @@
''
set autoindent
set boldtext
set morespace
set smarthome
set tabsize 4
set tabstospaces
''

650
dot/scripts.nix Normal file
View 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;
}

View File

@@ -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}
'' ''

View File

@@ -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

View File

@@ -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 "

View File

@@ -1,7 +1,6 @@
'' 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
@@ -20,27 +19,21 @@ 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 endif
" if exists("g:loaded_syntastic_plugin") if exists("g:loaded_syntastic_plugin")
let g:syntastic_always_populate_loc_list = 1 let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 0 let g:syntastic_auto_loc_list = 0
let g:syntastic_check_on_open = 0 let g:syntastic_check_on_open = 0
let g:syntastic_check_on_wq = 0 let g:syntastic_check_on_wq = 0
map ,s :SyntasticToggleMode<CR> map ,s :SyntasticToggleMode<CR>
" endif endif
" if exists("g:loaded_gundo") if exists("g:loaded_gundo")
nnoremap <F5> :GundoToggle<CR> 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 endif
" if tabular " if tabular
@@ -49,10 +42,17 @@ vmap a; :Tabularize /::<CR>
vmap a- :Tabularize /-><CR> vmap a- :Tabularize /-><CR>
colorscheme delek colorscheme delek
set t_Co=256
filetype plugin indent on
set nocompatible
set smartcase
set shiftwidth=2 tabstop=2 expandtab
set number
set path=$PWD/** set path=$PWD/**
set completeopt=menu,longest set completeopt=menu,longest
set wildmode=longest,list,full set wildmode=longest,list,full
set wildignore+=${commaSep ignoredFiles}
set shortmess+=aI set shortmess+=aI
set nowritebackup noswapfile set nowritebackup noswapfile
set mouse=a set mouse=a
@@ -67,14 +67,14 @@ set nopaste
set list listchars=tab:\ ,extends:,precedes:,nbsp: showbreak= set list listchars=tab:\ ,extends:,precedes:,nbsp: showbreak=
set foldlevelstart=30 set foldlevelstart=30
" if exists("g:loaded_netrwPlugin") if exists("g:loaded_netrwPlugin")
let g:netrw_banner=0 let g:netrw_banner=0
let g:netrw_browse_split=4 let g:netrw_browse_split=4
let g:netrw_altv=1 " open splits to the right let g:netrw_altv=1 " open splits to the right
let g:netrw_liststyle=3 " tree view let g:netrw_liststyle=3 " tree view
let g:netrw_list_hide=netrw_gitignore#Hide() let g:netrw_list_hide=netrw_gitignore#Hide()
let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
" endif endif
call matchadd('colorcolumn', '\%101v', 100) call matchadd('colorcolumn', '\%101v', 100)
highlight folded ctermbg=black highlight folded ctermbg=black
@@ -95,10 +95,8 @@ if exists("+undofile")
set undofile set undofile
endif endif
nmap <C-j> ddp nmap <C-j> ddp | vmap <C-j> xp`[V`]
nmap <C-k> ddkP nmap <C-k> ddkP | vmap <C-k> xkP`[V`]
vmap <C-j> xp`[V`]
vmap <C-k> xkP`[V`]
nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR> nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
vnoremap <Space> zf vnoremap <Space> zf
@@ -137,7 +135,12 @@ if has("autocmd")
autocmd bufwritepre * :call <SID>StripTrailingWhitespaces() autocmd bufwritepre * :call <SID>StripTrailingWhitespaces()
autocmd bufnewfile,bufread *.md set filetype=markdown.pandoc autocmd bufnewfile,bufread *.md set filetype=markdown.pandoc
autocmd bufnewfile,bufread *.asm set filetype=nasm autocmd bufnewfile,bufread *.asm set filetype=nasm
autocmd bufnewfile,bufread *.bf set filetype=brainfuck 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 *.do set filetype=sh
autocmd bufnewfile,bufread config set filetype=conf autocmd bufnewfile,bufread config set filetype=conf
autocmd bufnewfile,bufread *.conf set filetype=conf autocmd bufnewfile,bufread *.conf set filetype=conf
@@ -150,4 +153,38 @@ if has("autocmd")
autocmd bufreadpre * setlocal foldmethod=indent autocmd bufreadpre * setlocal foldmethod=indent
autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif
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
];
};
}

View File

@@ -10,16 +10,20 @@
white = "#ffffff"; white = "#ffffff";
black = "#000000"; black = "#000000";
gray = { light = "#aaaaaa"; dark = "#888888"; }; veryDark = "#080808";
} // rec {
colorPalette = [
gray.dark red.dark green.dark yellow.dark blue.dark magenta.dark cyan.dark gray.light
gray.dark red.light green.light yellow.light blue.light magenta.light cyan.light gray.light
];
# Antares color scheme # Antares color scheme
dark = "#151515"; gray = { light = "#bbbbbb"; dark = "#151515"; };
veryDark = "#080808";
red = { light = "#de575c"; dark = "#de575c"; }; red = { light = "#de575c"; dark = "#de575c"; };
yellow = { light = "#ebe971"; dark = "#ebe971"; }; yellow = { light = "#ebe971"; dark = "#ebe971"; };
green = { light = "#00b853"; dark = "#00b853"; }; green = { light = "#00b853"; dark = "#00b853"; };
blue = { light = "#90d0f0"; dark = "#7fc6f0"; }; blue = { light = "#90d0f0"; dark = "#7fc6f0"; };
magenta = { light = "#cf9ffa"; dark = "#cf9ffa"; }; magenta = { light = "#cf9ffa"; dark = "#cf9ffa"; };
cyan = { light = "#4ae5e8"; dark = "#4ae5e8"; }; cyan = { light = "#4ae5e8"; dark = "#4ae5e8"; };
light = "#bbbbbb";
} }