1
0
mirror of https://github.com/kmein/niveum synced 2026-03-18 02:51:08 +01:00

Surprisingly: configure more

~ factor out into ./configs/
+ timezone, sound
~ wpa_supplicant hashed passwords
+ kdeconnect
~ writeBash -> writeDash
This commit is contained in:
kmein
2018-09-17 16:51:00 +02:00
parent 4ecbcf1b66
commit 69b718cc93
11 changed files with 675 additions and 643 deletions

View File

@@ -1,138 +1,52 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
scripts = import ./dot/scripts.nix pkgs;
constants = import ./constants.nix;
wallpaper = pkgs.copyPathToStore ./art/haskell-grey.png;
theme = { theme = {
gtk = { name = "Numix-SX-Dark"; package = pkgs.numix-sx-gtk-theme; }; gtk = { name = "Numix-SX-Dark"; 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; };
}; };
defaultApplications = {
terminal = "${pkgs.xfce.terminal}/bin/xfce4-terminal";
webBrowser = "${pkgs.chromium}/bin/chromium-browser";
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;
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"
./configs/shells.nix
./configs/editors.nix
./configs/graphics.nix
./configs/packages.nix
]; ];
nixpkgs.config = { nixpkgs.config = {
allowUnfree = true; allowUnfree = true;
packageOverrides = packageOverrides =
let nix-writers = builtins.fetchGit { url = https://cgit.krebsco.de/nix-writers/; ref = "tags/v2.1.0"; }; let nix-writers = builtins.fetchGit {
in import "${nix-writers}/pkgs" pkgs; url = https://cgit.krebsco.de/nix-writers/;
ref = "tags/v3.0.0";
# sha256 = "066y18q19d35x5jjr3kdn1dwi7s1l12icr90s2vxwzif6ahnzmb3";
}; in import "${nix-writers}/pkgs" pkgs;
}; };
time.timeZone = "Europe/Berlin";
sound.enable = true;
hardware.pulseaudio.enable = true;
hardware.bluetooth.enable = true;
security.sudo.enable = true; security.sudo.enable = true;
security.sudo.extraConfig = "Defaults insults"; security.sudo.extraConfig = "Defaults insults";
fonts.enableDefaultFonts = true; fonts.enableDefaultFonts = true;
fonts.fonts = with pkgs; [ powerline-fonts roboto font-awesome-ttf fira-code eb-garamond lmodern ];
environment.systemPackages = with pkgs; [ users.mutableUsers = false;
theme.icon.package theme.gtk.package
ffmpeg mpv youtubeDL
imagemagick
zathura
chromium google-chrome firefox lynx w3m firefoxPackages.tor-browser
lxappearance
libnotify
xfce.terminal
pamixer
gnome3.nautilus
git
ripgrep tree
whois
wget htop zip unzip
rlwrap
pmount
gnumake
(import ./dot/vim.nix pkgs)
];
users.users.kfm = { users.users.kfm = {
createHome = true; name = "kfm";
description = constants.user.name;
extraGroups = [ "wheel" ];
group = "users";
home = "/home/kfm"; home = "/home/kfm";
shell = pkgs.zsh; createHome = true;
group = "users";
extraGroups = [ "wheel" "audio" ];
password = "kfm"; password = "kfm";
packages = with pkgs; [ shell = pkgs.zsh;
texlive.combined.scheme-tetex
franz
grive2
gnuplot maxima
libreoffice-fresh
kdeconnect
par haskellPackages.pandoc haskellPackages.pandoc-citeproc biber
haskellPackages.hakyll
spotify gnome3.gnome-music audacity
calibre
inkscape
stack haskellPackages.hasktags haskellPackages.hindent haskellPackages.ghcid haskellPackages.hoogle
rustup
gcc tinycc ctags
python3 mypy
nodejs jo
perl ruby lua
nasm
ocaml fsharp swiProlog haskellPackages.idris
clojure racket-minimal
scala
];
};
environment.variables.EDITOR = pkgs.lib.mkForce "vim";
environment.shellAliases =
let rlwrap = cmd: "${pkgs.rlwrap}/bin/rlwrap ${cmd}";
in {
":r" = ''echo "You stupid!"'';
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";
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 --";
ghci = "${pkgs.stack}/bin/stack ghc -- --interactive";
ip = "${pkgs.iproute}/bin/ip -c";
ocaml = rlwrap "${pkgs.ocaml}/bin/ocaml";
tmux = "${pkgs.tmux}/bin/tmux -2";
vi = "vim";
} // scripts;
services.xserver = with import ./constants.nix; {
enable = true;
layout = commaSep [ "de" "gr" "ru" ];
xkbVariant = commaSep [ "T3" "polytonic" "phonetic_winkeys" ];
xkbOptions = commaSep [ "terminate:ctrl_alt_bksp" "grp:alt_space_toggle" ];
libinput.enable = true;
xautolock = {
enable = true;
time = 15;
locker = defaultApplications.screenLocker;
nowlocker = defaultApplications.screenLocker;
enableNotifier = true;
notifier = ''${pkgs.libnotify}/bin/notify-send -u normal -a xautolock "Locking soon" "The screen will lock in 10 seconds."'';
};
displayManager.auto = {
enable = true;
user = "kfm";
};
desktopManager.xterm.enable = false;
desktopManager.wallpaper.mode = "fill";
windowManager.default = "i3";
windowManager.i3 = {
enable = true;
configFile = pkgs.writeText "i3.conf" (import ./dot/i3.nix pkgs defaultApplications);
extraPackages = [];
};
};
i18n = {
defaultLocale = "en_GB.UTF-8";
consoleUseXkbConfig = true;
consoleColors = with import ./theme.nix; map (c: lib.strings.removePrefix "#" c) colorPalette;
}; };
services.cron = { services.cron = {
@@ -142,15 +56,6 @@ in {
]; ];
}; };
services.compton = {
enable = true;
fade = true;
shadow = true;
menuOpacity = "0.9";
shadowOpacity = "0.5";
fadeDelta = 2;
};
services.openssh.enable = true; services.openssh.enable = true;
programs.ssh = { programs.ssh = {
startAgent = true; startAgent = true;
@@ -164,45 +69,6 @@ in {
temperature = { night = 25000; day = 1000; }; temperature = { night = 25000; day = 1000; };
}; };
hardware.pulseaudio.enable = true;
hardware.bluetooth.enable = true;
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestions.enable = true;
syntaxHighlighting.enable = true;
syntaxHighlighting.highlighters = [ "main" "brackets" "pattern" "cursor" "root" "line" ];
interactiveShellInit = ''
setopt INTERACTIVE_COMMENTS
setopt MULTIOS
setopt AUTO_PUSHD
setopt AUTO_NAME_DIRS
setopt PUSHD_MINUS
setopt PUSHD_TO_HOME
'';
promptInit = ''
PROMPT="%{$fg_bold[white]%}%~ \$([[ \$? == 0 ]] && echo \"%{$fg_bold[green]%}\" || echo \"%{$fg_bold[red]%}\")%#%{$reset_color%} "
RPROMPT='$(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[cyan]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}*"
'';
ohMyZsh.enable = true;
ohMyZsh.plugins = [ "common-aliases" ];
};
programs.bash = {
promptInit = ''PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) '';
enableCompletion = true;
};
programs.command-not-found.enable = true;
programs.java.enable = true;
programs.light.enable = true;
programs.tmux = { programs.tmux = {
enable = true; enable = true;
extraTmuxConf = import ./dot/tmux.nix; extraTmuxConf = import ./dot/tmux.nix;
@@ -210,8 +76,6 @@ in {
terminal = "screen-256color"; terminal = "screen-256color";
}; };
programs.nano.nanorc = import ./dot/nano.nix;
# networking.hostName = "scardanelli"; # networking.hostName = "scardanelli";
networking.hosts = { networking.hosts = {
"192.168.178.27" = [ "printer.local" ]; "192.168.178.27" = [ "printer.local" ];
@@ -219,10 +83,9 @@ in {
networking.wireless.enable = true; networking.wireless.enable = true;
networking.wireless.networks = { networking.wireless.networks = {
Aether = { psk = "Kein ding sei wo das wort gebricht."; }; Aether = { pskRaw = "e1b18af54036c5c9a747fe681c6a694636d60a5f8450f7dec0d76bc93e2ec85a"; };
"Asoziales Netzwerk" = { psk = "WirFragenDichNicht"; }; "Asoziales Netzwerk" = { pskRaw = "8e234041ec5f0cd1b6a14e9adeee9840ed51b2f18856a52137485523e46b0cb6"; };
}; };
networking.wireless.userControlled.enable = true;
home-manager.users.kfm = { home-manager.users.kfm = {
gtk = { gtk = {
@@ -270,6 +133,8 @@ in {
}; };
}; };
services.kdeconnect.enable = true;
services.dunst = with import ./theme.nix; { services.dunst = with import ./theme.nix; {
enable = true; enable = true;
iconTheme = theme.icon; iconTheme = theme.icon;
@@ -300,32 +165,17 @@ in {
max_icon_size = 32; max_icon_size = 32;
sticky_history = true; sticky_history = true;
history_length = 20; history_length = 20;
dmenu = "${pkgs.rofi}/bin/rofi -display-run 'dunst: ' -show run"; dmenu = "${pkgs.rofi}/bin/rofi -display-run dunst -show run";
browser = defaultApplications.webBrowser; browser = "${pkgs.xdg_utils}/bin/xdg-open";
verbosity = "mesg"; verbosity = "mesg";
corner_radius = 0; corner_radius = 0;
mouse_left_click = "do_action"; mouse_left_click = "do_action";
mouse_right_click = "close_current"; mouse_right_click = "close_current";
mouse_middle_click = "close_all"; mouse_middle_click = "close_all";
}; };
urgency_low = { urgency_low = { frame_color = veryDark; background = veryDark; foreground = gray.light; timeout = 5; };
frame_color = veryDark; urgency_normal = { frame_color = veryDark; background = gray.light; foreground = veryDark; timeout = 10; };
background = veryDark; urgency_critical = { frame_color = veryDark; background = red.dark; foreground = veryDark; timeout = 0; };
foreground = gray.light;
timeout = 5;
};
urgency_normal = {
frame_color = veryDark;
background = gray.light;
foreground = veryDark;
timeout = 10;
};
urgency_critical = {
frame_color = veryDark;
background = red.dark;
foreground = veryDark;
timeout = 0;
};
}; };
}; };
@@ -335,7 +185,7 @@ in {
".stack/config.yaml".text = import ./dot/stack.nix constants.user; ".stack/config.yaml".text = import ./dot/stack.nix constants.user;
".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 defaultApplications; ".config/xfce4/terminal/terminalrc".text = import ./dot/terminal.nix;
".zshrc".text = "# nothing to see here"; ".zshrc".text = "# nothing to see here";
}; };
}; };

View File

@@ -1,48 +1,11 @@
pkgs: { pkgs, ... }:
let vimrc = with import ../constants.nix; '' let vim_conf = with import ../constants.nix; ''
if exists("g:loaded_airline")
set noshowmode laststatus=0 noruler
let g:airline#extensions#tabline#close_symbol = 'X'
let g:airline#extensions#tabline#enabled = 0
let g:airline#extensions#tabline#left_alt_sep = ''
let g:airline#extensions#tabline#left_sep = ''
let g:airline#extensions#tabline#right_alt_sep = ''
let g:airline#extensions#tabline#right_sep = ''
let g:airline#extensions#tabline#show_close_button = 1
let g:airline#extensions#tabline#show_tab_type = 0
let g:airline#extensions#tabline#tab_min_count = 2
let g:airline#extensions#tabline#tab_nr_type = 0
let g:airline#extensions#tmuxline#enabled = 0
let g:airline#extensions#wordcount#enabled = 1
let g:airline_left_alt_sep = ''
let g:airline_left_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_section_z = '%{line(".")}/%{line("$")} %{col(".")}'
endif
if exists("g:loaded_airline_themes")
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 tabular " if tabular
vmap a= :Tabularize /=<CR> vmap a= :Tabularize /=<CR>
vmap a; :Tabularize /::<CR> vmap a; :Tabularize /::<CR>
vmap a- :Tabularize /-><CR> vmap a- :Tabularize /-><CR>
colorscheme delek colorscheme delek
set t_Co=256
filetype plugin indent on filetype plugin indent on
set nocompatible set nocompatible
@@ -51,20 +14,18 @@ let vimrc = with import ../constants.nix; ''
set number set number
set path=$PWD/** set path=$PWD/**
set completeopt=menu,longest set completeopt=menu,longest
set wildmode=longest,list,full set wildmode=longest,full,list wildignore+=${commaSep ignoredFiles}
set wildignore+=${commaSep ignoredFiles}
set shortmess+=aI set shortmess+=aI
set nowritebackup noswapfile set nowritebackup noswapfile
set mouse=a set mouse=a
set showmatch set showmatch
set encoding=utf8 set encoding=utf8 ffs=unix,dos,mac
set ffs=unix,dos,mac
set smartindent set smartindent
set nowrap set nowrap
set nohlsearch set nohlsearch
set clipboard=unnamedplus,autoselect set clipboard=unnamedplus,autoselect
set nopaste set nopaste
set list listchars=tab:\ ,extends:,precedes:,nbsp: showbreak= set list listchars=tab:\ ,extends:,precedes:,nbsp:,trail:· showbreak=
set foldlevelstart=30 set foldlevelstart=30
if exists("g:loaded_netrwPlugin") if exists("g:loaded_netrwPlugin")
@@ -79,9 +40,7 @@ let vimrc = with import ../constants.nix; ''
call matchadd('colorcolumn', '\%101v', 100) call matchadd('colorcolumn', '\%101v', 100)
highlight folded ctermbg=black highlight folded ctermbg=black
highlight colorcolumn ctermbg=red highlight colorcolumn ctermbg=red
highlight matchparen cterm=bold ctermbg=black ctermfg=white highlight matchparen cterm=bold
highlight TrailSpace ctermbg=red guibg=darkred
match TrailSpace /\s\+$/
" undofile - This allows you to use undos after exiting and restarting " undofile - This allows you to use undos after exiting and restarting
" This, like swap and backups, uses .vim-undo first, then ~/.vim/undo " This, like swap and backups, uses .vim-undo first, then ~/.vim/undo
@@ -124,67 +83,117 @@ let vimrc = with import ../constants.nix; ''
command! DiffSaved call s:DiffWithSaved() command! DiffSaved call s:DiffWithSaved()
if has("autocmd") if has("autocmd")
autocmd filetype markdown,text set formatprg=par\ -w80 autocmd bufnewfile,bufread *.4th set filetype=forth
autocmd bufnewfile,bufread *.asm set filetype=nasm
autocmd bufnewfile,bufread *.c set keywordprg=man\ 3
autocmd bufnewfile,bufread *.conf set filetype=conf
autocmd bufnewfile,bufread *.do set filetype=sh
autocmd bufnewfile,bufread *.fs :packadd vim-fsharp | set filetype=fsharp
autocmd bufnewfile,bufread *.h set keywordprg=man\ 3
autocmd bufnewfile,bufread *.md set filetype=markdown.pandoc
autocmd bufnewfile,bufread *.nix :packadd vim-nix
autocmd bufnewfile,bufread *.rust :packadd rust-vim deoplete-rust
autocmd bufnewfile,bufread *.tex :packadd vimtex | set filetype=tex
autocmd bufnewfile,bufread *.ts :packadd vim-typescript
autocmd bufnewfile,bufread config set filetype=conf
autocmd filetype haskell :packadd Hoogle
autocmd filetype haskell set formatprg=hindent autocmd filetype haskell set formatprg=hindent
autocmd filetype markdown,text set textwidth=80 autocmd filetype javascript *.js :packadd vim-javascript
autocmd filetype make setlocal noexpandtab
autocmd filetype markdown,text set formatoptions+=t autocmd filetype markdown,text set formatoptions+=t
autocmd filetype markdown,text set formatprg=par\ -w80
autocmd filetype markdown,text set textwidth=80
autocmd bufreadpost * autocmd bufreadpost *
\ if line("'\"") > 0 && line("'\"") <= line("$") | \ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g`\"" | \ exe "normal! g`\"" |
\ endif \ 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 bufreadpre * setlocal foldmethod=indent
autocmd bufwritepre * :call <SID>StripTrailingWhitespaces()
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 { "if exists("g:loaded_airline")
name = "vim"; set noshowmode laststatus=0 noruler
vimrcConfig.customRC = vimrc; let g:airline#extensions#tabline#close_symbol = 'X'
vimrcConfig.packages.vim = with pkgs.vimPlugins; { let g:airline#extensions#tabline#enabled = 0
start = [ let g:airline#extensions#tabline#left_alt_sep = ''
ctrlp let g:airline#extensions#tabline#left_sep = ''
deoplete-nvim let g:airline#extensions#tabline#right_alt_sep = ''
supertab let g:airline#extensions#tabline#right_sep = ''
syntastic let g:airline#extensions#tabline#show_close_button = 1
tabular let g:airline#extensions#tabline#show_tab_type = 0
vim-airline let g:airline#extensions#tabline#tab_min_count = 2
vim-airline-themes let g:airline#extensions#tabline#tab_nr_type = 0
vim-commentary let g:airline#extensions#tmuxline#enabled = 0
vim-eunuch let g:airline#extensions#wordcount#enabled = 1
vim-fugitive let g:airline_left_alt_sep = ''
vim-gitgutter let g:airline_left_sep = ''
vim-pandoc vim-pandoc-after vim-pandoc-syntax let g:airline_right_alt_sep = ''
vim-repeat let g:airline_right_sep = ''
vim-sensible let g:airline_section_z = '%{line(".")}/%{line("$")} %{col(".")}'
vim-startify "endif
vim-surround "if exists("g:loaded_airline_themes")
]; let g:airline_theme='simple'
opt = [ "endif
Hoogle '';
deoplete-rust in {
idris-vim environment.variables.EDITOR = pkgs.lib.mkForce "vim";
vimtex environment.shellAliases.vi = "vim";
rust-vim environment.shellAliases.view = "vim -R";
typescript-vim
vim-javascript programs.nano.nanorc = ''
vim-nix set autoindent
]; set boldtext
}; set morespace
set smarthome
set tabsize 4
set tabstospaces
'';
environment.systemPackages = [(
with import <nixpkgs> {};
pkgs.vim_configurable.customize {
name = "vim";
vimrcConfig.customRC = vim_conf;
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
(vimUtils.buildVimPluginFrom2Nix {
name = "vim-fsharp-2018-04-19";
src = fetchFromGitHub {
owner = "fsharp";
repo = "vim-fsharp";
rev = "627db7d701747e8fd7924b6505c61e16a369fb72";
sha256 = "00hhgn2p54faysx1ddccyhl9jnvddgxsczhv0np3mgzza6ls4838";
};
})
];
};
}
)];
} }

326
configs/graphics.nix Normal file
View File

@@ -0,0 +1,326 @@
{ pkgs, lib, ... }:
let
spotify_info = pkgs.writeBash "spotify.info" ''
STATUS=$(${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'PlaybackStatus'|egrep -A 1 "string"|cut -b 26-|cut -d '"' -f 1|egrep -v ^$)
if [[ "$STATUS" == 'Playing' ]]; then
printf '\uf1bc '
printf '\uf04b'
elif [[ "$STATUS" == 'Paused' ]]; then
printf '\uf1bc '
printf '\uf04c'
elif [[ "$STATUS" == 'Stopped' ]]; then
printf '\uf1bc '
printf '\uf04d'
else
exit 1
fi
printf ' '
METADATA=$(${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata')
ARTIST=$(echo "$METADATA" | egrep -A 2 "artist" | egrep -v "artist" | egrep -v "array" | cut -b 27- | cut -d '"' -f 1 | egrep -v ^$)
TITLE=$(echo "$METADATA" | egrep -A 1 "title" | egrep -v "title" | cut -b 44- | cut -d '"' -f 1 | egrep -v ^$)
printf "%s \u2237 %s" "$ARTIST" "$TITLE"
'';
battery_info = pkgs.writeBash "battery.info" ''
BAT_DIR="/sys/class/power_supply/$BLOCK_INSTANCE/"
[ -d BAT_DIR ] && cd BAT_DIR || exit 1
status=$(cat status)
charge_f=$((100 * $(cat charge_now) / $(cat charge_full)))
if [[ "$charge_f" -lt 20 ]]; then
printf '\uf244'
elif [[ "$charge_f" -lt 40 ]]; then
printf '\uf243'
elif [[ "$charge_f" -lt 60 ]]; then
printf '\uf242'
elif [[ "$charge_f" -lt 80 ]]; then
printf '\uf241'
else
printf '\uf240'
fi
printf ' '
if [[ "$status" == 'Charging' ]]; then
printf '\uf106'
elif [[ "$status" == 'Discharging' ]]; then
printf '\uf107'
elif [[ "$status" == 'Full' ]]; then
printf '\uf0e7'
else
printf '[%s]' "$status"
fi
printf ' '
if [[ "$status" != 'Full' ]]; then
rate_raw=$(($(cat voltage_now) * $(cat power_now)))
rate=$(bc <<< "scale=1; $rate_raw / 10^12")
printf '%s\u2009W, ' "$rate"
fi
charge_d=$((100 * $(cat charge_now) / $(cat charge_full)))
printf '%s%%\n' "$charge_d"
if [[ "$status" == 'Discharging' ]]; then
if [[ "$charge_d" -lt 10 ]]; then
printf '\n#E41C28'
elif [[ "$charge_d" -lt 20 ]]; then
printf '\n#EEBF13'
fi
fi
'';
volume_info = pkgs.writeBash "volume.info" ''
if [[ "$BLOCK_BUTTON" == 1 ]]; then
${pkgs.pamixer}/bin/pamixer -i 5
elif [[ "$BLOCK_BUTTON" == 3 ]]; then
${pkgs.pamixer}/bin/pamixer -d 5
elif [[ "$BLOCK_BUTTON" == 2 ]]; then
${pkgs.pamixer}/bin/pamixer -t
fi
if $(${pkgs.pamixer}/bin/pamixer --get-mute); then
printf '\uf026 0%%\n\n#EEBF13'
else
volume=$(${pkgs.pamixer}/bin/pamixer --get-volume)
printf '\uf028 %s%%' "$volume"
fi
'';
fancyDate = pkgs.writeC "fancy_date.c" {} ''
#include <stdio.h>
#include <time.h>
#include <wchar.h>
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;
}
'';
i3blocks_conf = with import ../theme.nix; ''
markup=pango
align=center
color=${white}
[spotify]
command=${spotify_info}
interval=2
[separator]
[volume]
command=${volume_info}
min_width= 100%
interval=once
signal=3
[separator]
[brightness]
command=printf "%.1f%%" $(${pkgs.xorg.xbacklight}/bin/xbacklight)
label=
min_width= 100%
signal=2
interval=once
[separator]
[cpu_usage]
command=cut -d' ' -f 1-3 < /proc/loadavg
label=
interval=2
[separator]
[ram_usage]
command=free -h | grep "Mem" | awk '{print $3}'
label=
interval=2
align=center
[separator]
[battery]
command=${battery_info}
interval=10
instance=BAT1
[separator]
[date]
command=${fancyDate}
interval=1
label=
[separator]
[time]
command=date +'%H:%M'
interval=1
label=
[separator]
command=${pkgs.xkblayout-state}/bin/xkblayout-state print %s
label=
interval=2
[separator]
'';
i3_conf = with import ../theme.nix; ''
set $mod Mod4
font pango:${uiFont.name} ${toString uiFont.size}
floating_modifier $mod
hide_edge_borders both
new_window pixel 1
new_float pixel 1
bindsym $mod+Return exec ${pkgs.xfce.terminal}/bin/xfce4-terminal
bindsym $mod+y exec ${pkgs.chromium}/bin/chrome-browser
bindsym $mod+t exec ${pkgs.xfce.thunar}/bin/thunar
bindsym $mod+Shift+w exec ${pkgs.xautolock}/bin/xautolock -locknow
bindsym $mod+d exec ${pkgs.rofi}/bin/rofi -display-run -show run
bindsym $mod+Shift+q kill
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
bindsym $mod+p workspace prev
bindsym $mod+n workspace next
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
bindsym $mod+h split h
bindsym $mod+v split v
bindsym $mod+f fullscreen toggle
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
bindsym $mod+Shift+z floating toggle
bindsym $mod+Shift+c reload
bindsym $mod+Shift+r restart
set $WS1 1
set $WS2 2
set $WS3 3
set $WS4 4
set $WS5 5
set $WS6 6
set $WS7 7
set $WS8 8
set $WS9 9
set $WS10 10
bindsym $mod+0 workspace $WS10
bindsym $mod+1 workspace $WS1
bindsym $mod+2 workspace $WS2
bindsym $mod+3 workspace $WS3
bindsym $mod+4 workspace $WS4
bindsym $mod+5 workspace $WS5
bindsym $mod+6 workspace $WS6
bindsym $mod+7 workspace $WS7
bindsym $mod+8 workspace $WS8
bindsym $mod+9 workspace $WS9
bindsym $mod+Shift+0 move container to workspace $WS10
bindsym $mod+Shift+1 move container to workspace $WS1
bindsym $mod+Shift+2 move container to workspace $WS2
bindsym $mod+Shift+3 move container to workspace $WS3
bindsym $mod+Shift+4 move container to workspace $WS4
bindsym $mod+Shift+5 move container to workspace $WS5
bindsym $mod+Shift+6 move container to workspace $WS6
bindsym $mod+Shift+7 move container to workspace $WS7
bindsym $mod+Shift+8 move container to workspace $WS8
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 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 XF86MonBrightnessUp exec --no-startup-id ${pkgs.light}/bin/light +A 10 && pkill -RTMIN+2 i3blocks
bindsym XF86MonBrightnessDown exec --no-startup-id ${pkgs.light}/bin/light -A 10 && pkill -RTMIN+2 i3blocks
mode " " {
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
bindsym Escape mode "default"
bindsym Space mode "default"
}
bindsym $mod+r mode " "
#class container-border container-bg fg indicator window-border
client.focused ${gray.dark} ${black} ${white} ${white} ${gray.medium}
client.focused_inactive ${black} ${black} ${gray.medium} ${white} ${black}
client.unfocused ${black} ${black} ${gray.medium} ${white} ${black}
client.urgent ${red.light} ${black} ${white} ${white} ${red.light}
client.placeholder ${black} ${black} ${gray.medium} ${white} ${black}
bar {
status_command "${pkgs.i3blocks}/bin/i3blocks -c ${pkgs.writeText "i3blocks.conf" i3blocks_conf}"
position top
font pango:${uiFont.name},FontAwesome ${toString uiFont.size}
separator_symbol "// "
colors {
separator ${gray.medium}
background ${black}
statusline ${gray.medium}
# border bg fg
focused_workspace ${black} ${black} ${white}
active_workspace ${black} ${black} ${gray.medium}
inactive_workspace ${black} ${black} ${gray.medium}
urgent_workspace ${black} ${black} ${red.light}
binding_mode ${black} ${black} ${red.light}
}
}
'';
in {
services.xserver = with import ../constants.nix; with import ../theme.nix; {
enable = true;
layout = commaSep [ "de" "gr" "ru" ];
xkbVariant = commaSep [ "T3" "polytonic" "phonetic_winkeys" ];
xkbOptions = commaSep [ "terminate:ctrl_alt_bksp" "grp:alt_space_toggle" ];
libinput.enable = true;
xautolock = let i3lock = "${pkgs.i3lock}/bin/i3lock -e -c ${lib.strings.removePrefix "#" black}"; in {
enable = true;
time = 15;
locker = i3lock;
nowlocker = i3lock;
enableNotifier = true;
notifier = ''${pkgs.libnotify}/bin/notify-send -u normal -a xautolock "Locking soon" "The screen will lock in 10 seconds."'';
};
displayManager.auto = { enable = true; user = "kfm"; };
desktopManager.xterm.enable = false;
desktopManager.wallpaper.mode = "fill";
windowManager.default = "i3";
windowManager.i3 = {
enable = true;
configFile = pkgs.writeText "i3.conf" i3_conf;
extraPackages = [];
};
};
i18n = {
defaultLocale = "en_GB.UTF-8";
consoleUseXkbConfig = true;
consoleColors = with import ../theme.nix; map (c: lib.strings.removePrefix "#" c) colorPalette;
};
services.compton = {
enable = true;
fade = true;
shadow = true;
menuOpacity = "0.9";
shadowOpacity = "0.5";
fadeDelta = 2;
};
}

86
configs/packages.nix Normal file
View File

@@ -0,0 +1,86 @@
{ pkgs, ... }:
with pkgs;
{
fonts.fonts = [
eb-garamond
fira-code
font-awesome-ttf
hasklig
lmodern
powerline-fonts
roboto
];
environment.systemPackages = [
chromium
ffmpeg
firefox firefoxPackages.tor-browser
git
gnumake
htop
imagemagick
libnotify
libreoffice-fresh
lxappearance
mpv
pamixer
pmount
ripgrep tree
rlwrap
w3m
wget
whois
xclip
xfce.ristretto
xfce.terminal
xfce.thunar
youtubeDL
zathura
zip unzip
];
programs.command-not-found.enable = true;
programs.java.enable = true;
programs.light.enable = true;
users.users.kfm.packages = [
audacity
biber
calibre
clojure
ctags
franz
fsharp
gcc
gnuplot
grive2
haskellPackages.ghcid
haskellPackages.hakyll
haskellPackages.hasktags
haskellPackages.hindent
haskellPackages.hoogle
haskellPackages.idris
haskellPackages.pandoc haskellPackages.pandoc-citeproc
inkscape
jo
lua
maxima
mypy
nasm
nodejs
ocaml
par
perl
python3
racket-minimal
ruby
rustup
scala
spotify
stack
swiProlog
texlive.combined.scheme-tetex
tinycc
];
}

63
configs/shells.nix Normal file
View File

@@ -0,0 +1,63 @@
{ pkgs, ... }:
let scripts = import ../dot/scripts.nix pkgs;
in {
environment.shellAliases =
let rlwrap = cmd: "${pkgs.rlwrap}/bin/rlwrap ${cmd}";
in {
":r" = ''echo "You stupid!"'';
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 --";
ghci = "${pkgs.stack}/bin/stack ghc -- --interactive";
ip = "${pkgs.iproute}/bin/ip -c";
ocaml = rlwrap "${pkgs.ocaml}/bin/ocaml";
tmux = "${pkgs.tmux}/bin/tmux -2";
gdrive = ''sh -c "cd ~/google-drive && ${pkgs.grive2}/bin/grive" >/dev/null 2>&1 &'';
} // scripts;
environment.extraInit = ''
function mcd {
newdir='_mcd_command_failed_'
if [ -d "$1" ]; then
echo "$1 already exists."
newdir="$1"
else
if [ -n "$2" ]; then
command mkdir -p -m $1 "$2" && newdir="$2"
else
command mkdir -p "$1" && newdir="$1"
fi
fi
cd "$newdir"
}
'';
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestions.enable = true;
syntaxHighlighting.enable = true;
syntaxHighlighting.highlighters = [ "main" "brackets" "pattern" "cursor" "root" "line" ];
interactiveShellInit = ''
setopt INTERACTIVE_COMMENTS
setopt MULTIOS
setopt AUTO_NAME_DIRS
setopt PUSHD_MINUS PUSHD_TO_HOME AUTO_PUSHD
'';
promptInit = ''
PROMPT="%{$fg_bold[white]%}%~ \$([[ \$? == 0 ]] && echo \"%{$fg_bold[green]%}\" || echo \"%{$fg_bold[red]%}\")%#%{$reset_color%} "
RPROMPT='$(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[cyan]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}*"
'';
ohMyZsh.enable = true;
ohMyZsh.plugins = [ "common-aliases" ];
};
programs.bash = {
promptInit = ''PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) '';
enableCompletion = true;
};
}

View File

@@ -1,116 +0,0 @@
pkgs: defaultApplications:
let theme = import ../theme.nix; in
with theme;
''
set $mod Mod4
font pango:${uiFont.name} ${toString uiFont.size}
floating_modifier $mod
hide_edge_borders both
new_window pixel 1
new_float pixel 1
bindsym $mod+Return exec ${defaultApplications.terminal}
bindsym $mod+y exec ${defaultApplications.webBrowser}
bindsym $mod+t exec ${defaultApplications.fileManager}
bindsym $mod+Shift+w exec ${pkgs.xautolock}/bin/xautolock -locknow
bindsym $mod+Shift+q kill
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
bindsym $mod+p workspace prev
bindsym $mod+n workspace next
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
bindsym $mod+h split h
bindsym $mod+v split v
bindsym $mod+f fullscreen toggle
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
bindsym $mod+Shift+z floating toggle
bindsym $mod+Shift+c reload
bindsym $mod+Shift+r restart
bindsym $mod+d exec ${pkgs.rofi}/bin/rofi -display-run -show run
set $WS1 1
set $WS2 2
set $WS3 3
set $WS4 4
set $WS5 5
set $WS6 6
set $WS7 7
set $WS8 8
set $WS9 9
set $WS10 10
bindsym $mod+0 workspace $WS10
bindsym $mod+1 workspace $WS1
bindsym $mod+2 workspace $WS2
bindsym $mod+3 workspace $WS3
bindsym $mod+4 workspace $WS4
bindsym $mod+5 workspace $WS5
bindsym $mod+6 workspace $WS6
bindsym $mod+7 workspace $WS7
bindsym $mod+8 workspace $WS8
bindsym $mod+9 workspace $WS9
bindsym $mod+Shift+0 move container to workspace $WS10
bindsym $mod+Shift+1 move container to workspace $WS1
bindsym $mod+Shift+2 move container to workspace $WS2
bindsym $mod+Shift+3 move container to workspace $WS3
bindsym $mod+Shift+4 move container to workspace $WS4
bindsym $mod+Shift+5 move container to workspace $WS5
bindsym $mod+Shift+6 move container to workspace $WS6
bindsym $mod+Shift+7 move container to workspace $WS7
bindsym $mod+Shift+8 move container to workspace $WS8
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 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 XF86MonBrightnessUp exec --no-startup-id ${pkgs.light}/bin/light +A 10 && pkill -RTMIN+2 i3blocks
bindsym XF86MonBrightnessDown exec --no-startup-id ${pkgs.light}/bin/light -A 10 && pkill -RTMIN+2 i3blocks
mode " " {
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
bindsym Escape mode "default"
bindsym Space mode "default"
}
bindsym $mod+r mode " "
#class container-border container-bg fg indicator window-border
client.focused ${gray.dark} ${black} ${white} ${white} ${gray.dark}
client.focused_inactive ${black} ${black} ${gray.dark} ${white} ${black}
client.unfocused ${black} ${black} ${gray.dark} ${white} ${black}
client.urgent ${red.light} ${black} ${white} ${white} ${red.light}
client.placeholder ${black} ${black} ${gray.dark} ${white} ${black}
bar {
status_command "${pkgs.i3blocks}/bin/i3blocks -c ${pkgs.writeTextFile {
name = "i3blocks.conf";
text = import ./i3blocks.nix { inherit pkgs theme; };
}}"
position top
font pango:${uiFont.name},FontAwesome ${toString uiFont.size}
separator_symbol "// "
colors {
separator ${gray.dark}
background ${black}
statusline ${gray.dark}
# border bg fg
focused_workspace ${black} ${black} ${white}
active_workspace ${black} ${black} ${gray.light}
inactive_workspace ${black} ${black} ${gray.dark}
urgent_workspace ${black} ${black} ${red.light}
binding_mode ${black} ${black} ${red.light}
}
}
''

View File

@@ -1,176 +0,0 @@
{ pkgs, theme }:
let
spotify_info = pkgs.writeBash "spotify.info" ''
STATUS=$(${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'PlaybackStatus'|egrep -A 1 "string"|cut -b 26-|cut -d '"' -f 1|egrep -v ^$)
if [[ "$STATUS" == 'Playing' ]]; then
printf '\uf1bc '
printf '\uf04b'
elif [[ "$STATUS" == 'Paused' ]]; then
printf '\uf1bc '
printf '\uf04c'
elif [[ "$STATUS" == 'Stopped' ]]; then
printf '\uf1bc '
printf '\uf04d'
else
exit 1
fi
printf ' '
METADATA=$(${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata')
ARTIST=$(echo "$METADATA" | egrep -A 2 "artist" | egrep -v "artist" | egrep -v "array" | cut -b 27- | cut -d '"' -f 1 | egrep -v ^$)
TITLE=$(echo "$METADATA" | egrep -A 1 "title" | egrep -v "title" | cut -b 44- | cut -d '"' -f 1 | egrep -v ^$)
printf "%s \u2237 %s" "$ARTIST" "$TITLE"
'';
battery_info = pkgs.writeBash "battery.info" ''
BAT_DIR="/sys/class/power_supply/$BLOCK_INSTANCE/"
[ -d BAT_DIR ] && cd BAT_DIR || exit 1
status=$(cat status)
charge_f=$((100 * $(cat charge_now) / $(cat charge_full)))
if [[ "$charge_f" -lt 20 ]]; then
printf '\uf244'
elif [[ "$charge_f" -lt 40 ]]; then
printf '\uf243'
elif [[ "$charge_f" -lt 60 ]]; then
printf '\uf242'
elif [[ "$charge_f" -lt 80 ]]; then
printf '\uf241'
else
printf '\uf240'
fi
printf ' '
if [[ "$status" == 'Charging' ]]; then
printf '\uf106'
elif [[ "$status" == 'Discharging' ]]; then
printf '\uf107'
elif [[ "$status" == 'Full' ]]; then
printf '\uf0e7'
else
printf '[%s]' "$status"
fi
printf ' '
if [[ "$status" != 'Full' ]]; then
rate_raw=$(($(cat voltage_now) * $(cat power_now)))
rate=$(bc <<< "scale=1; $rate_raw / 10^12")
printf '%s\u2009W, ' "$rate"
fi
charge_d=$((100 * $(cat charge_now) / $(cat charge_full)))
printf '%s%%\n' "$charge_d"
if [[ "$status" == 'Discharging' ]]; then
if [[ "$charge_d" -lt 10 ]]; then
printf '\n#E41C28'
elif [[ "$charge_d" -lt 20 ]]; then
printf '\n#EEBF13'
fi
fi
'';
volume_info = pkgs.writeBash "volume.info" ''
if [[ "$BLOCK_BUTTON" == 1 ]]; then
${pkgs.pamixer}/bin/pamixer -i 5
elif [[ "$BLOCK_BUTTON" == 3 ]]; then
${pkgs.pamixer}/bin/pamixer -d 5
elif [[ "$BLOCK_BUTTON" == 2 ]]; then
${pkgs.pamixer}/bin/pamixer -t
fi
if $(${pkgs.pamixer}/bin/pamixer --get-mute); then
printf '\uf026 0%%\n\n#EEBF13'
else
volume=$(${pkgs.pamixer}/bin/pamixer --get-volume)
printf '\uf028 %s%%' "$volume"
fi
'';
fancyDate = pkgs.writeC "fancy_date.c" {} ''
#include <stdio.h>
#include <time.h>
#include <wchar.h>
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
with theme;
''
markup=pango
align=center
color=${white}
[spotify]
command=${spotify_info}
interval=2
[separator]
[volume]
command=${volume_info}
min_width= 100%
interval=once
signal=3
[separator]
[brightness]
command=printf "%.1f%%" $(${pkgs.xorg.xbacklight}/bin/xbacklight)
label=
min_width= 100%
signal=2
interval=once
[separator]
[cpu_usage]
command=cut -d' ' -f 1-3 < /proc/loadavg
label=
interval=2
[separator]
[ram_usage]
command=free -h | grep "Mem" | awk '{print $3}'
label=
interval=2
align=center
[separator]
[battery]
command=${battery_info}
#echo "$(cat /sys/class/power_supply/BAT1/capacity)% ($(cat /sys/class/power_supply/BAT1/status))"
interval=10
instance=BAT1
[separator]
[date]
command=${fancyDate}
interval=1
label=
[separator]
[time]
command=date +'%H:%M'
interval=1
label=
[separator]
command=${pkgs.xkblayout-state}/bin/xkblayout-state print %s
label=
interval=2
[separator]
''

View File

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

View File

@@ -1,4 +1,4 @@
pkgs: defaultApplications: pkgs:
let let
bingWallpaper = pkgs.writeBash "bing-wallpaper.sh" '' bingWallpaper = pkgs.writeBash "bing-wallpaper.sh" ''
PICTURE_DIR="$HOME/pictures/external/bing/" PICTURE_DIR="$HOME/pictures/external/bing/"
@@ -17,7 +17,7 @@ let
fi fi
done done
''; '';
colorize = pkgs.writeBash "colorize.sh" '' colorize = pkgs.writeDash "colorize.sh" ''
highlight=$(which highlight 2>/dev/null) highlight=$(which highlight 2>/dev/null)
pygmentize=$(which pygmentize 2>/dev/null) pygmentize=$(which pygmentize 2>/dev/null)
@@ -40,7 +40,7 @@ let
cat "$2" | colorize "$1" cat "$2" | colorize "$1"
fi fi
''; '';
easyBackup = pkgs.writeBash "easy-backup.sh" '' easyBackup = pkgs.writeDash "easy-backup.sh" ''
if [ -d "$1" ]; then if [ -d "$1" ]; then
OUTPUT_ROOT=''${1}/backup/current OUTPUT_ROOT=''${1}/backup/current
rsync -hav --delete --stats --progress --exclude-from=$HOME/bin/backup.exclude $HOME/* $OUTPUT_ROOT/ rsync -hav --delete --stats --progress --exclude-from=$HOME/bin/backup.exclude $HOME/* $OUTPUT_ROOT/
@@ -149,22 +149,22 @@ let
echo Compiler for "$ext" not found!;; echo Compiler for "$ext" not found!;;
esac esac
''; '';
gitPullAll = pkgs.writeBash "git-pull-all.sh" '' gitPullAll = pkgs.writeDash "git-pull-all.sh" ''
# store the current dir # store the current dir
CUR_DIR=$(pwd) CUR_DIR=$(pwd)
# Let the person running the script know what's going on. # 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" 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 # Find all git repositories and update it to the master latest revision
for i in $(find . -name ".git" | cut -c 3-); do for i in $(find . -name ".git" | cut -c 3-); do
echo ""; echo "";
echo -e "\033[33m"+$i+"\033[0m"; echo -e "\033[33m"+$i+"\033[0m";
# We have to go to the .git parent directory to call the pull command # We have to go to the .git parent directory to call the pull command
cd "$i"; cd "$i";
cd ..; cd ..;
# finally pull # finally pull
git pull origin master; git pull origin master;
# lets get back to the CUR_DIR # lets get back to the CUR_DIR
cd $CUR_DIR cd $CUR_DIR
done done
echo -e "\n\033[32mComplete!\033[0m\n" echo -e "\n\033[32mComplete!\033[0m\n"
''; '';
@@ -172,40 +172,40 @@ let
haskellDefinition = pkgs.writeBash "hdef.sh" '' haskellDefinition = pkgs.writeBash "hdef.sh" ''
paths="" paths=""
while true; do while true; do
if [ -d "$1" ]; then if [ -d "$1" ]; then
paths="$paths $1" paths="$paths $1"
else else
break break
fi fi
shift shift
done done
str="$1" str="$1"
shift shift
lower=$(echo "$str" | tr A-Z a-z) lower=$(echo "$str" | tr A-Z a-z)
if [ "''${lower:0:1}" == "''${str:0:1}" ]; then if [ "''${lower:0:1}" == "''${str:0:1}" ]; then
expr="($str( |$)|[[:space:]]+$str[[:space:]]*::)" expr="($str( |$)|[[:space:]]+$str[[:space:]]*::)"
else else
kws="(class|data|type|newtype)" kws="(class|data|type|newtype)"
eow="([ \n\t]|$)" eow="([ \n\t]|$)"
expr="$kws[[:space:]]+($str$eow|[^=]+=>[[:space:]]+$str$eow)" expr="$kws[[:space:]]+($str$eow|[^=]+=>[[:space:]]+$str$eow)"
fi fi
${haskellFind} $paths -print0 | xargs -0 grep -En --colour=never -A10 "$@" "^$expr" | ${gripe} hcol | ${highlight} $str ${haskellFind} $paths -print0 | xargs -0 grep -En --colour=never -A10 "$@" "^$expr" | ${gripe} hcol | ${highlight} $str
''; '';
haskellFind = pkgs.writeBash "hfind.sh" '' haskellFind = pkgs.writeDash "hfind.sh" ''
paths="" paths=""
while true; do while true; do
if [ -d "$1" ]; then if [ -d "$1" ]; then
paths="$paths $1" paths="$paths $1"
else else
break break
fi fi
shift shift
done done
find $paths \( -name "*.hs" -or -name "*.hsi" -or -name "*.lhs" -or -name "*.hs-boot" \) -a -not \( -name ".*" -or -path "*/_darcs/*" -o -name '.£*' \) "$@" 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" '' haskellGrep = pkgs.writeDash "hgrep.sh" ''
if [ -z "$1" -o "$1" == "--help" -o "$1" == "-h" ]; then if [ -z "$1" -o "$1" == "--help" -o "$1" == "-h" ]; then
echo "Usage: hg [PATH] IDENTIFIER [GREP OPTIONS...]" echo "Usage: hg [PATH] IDENTIFIER [GREP OPTIONS...]"
echo "Seaches for uses of the given Haskell identifier." echo "Seaches for uses of the given Haskell identifier."
@@ -214,17 +214,17 @@ let
paths="" paths=""
while true; do while true; do
if [ -d "$1" ]; then if [ -d "$1" ]; then
paths="$paths $1" paths="$paths $1"
else else
break break
fi fi
shift shift
done done
colour=always colour=always
if [ "$TERM" == "dumb" -o "$NO_COLORS" == "1" ]; then if [ "$TERM" == "dumb" -o "$NO_COLORS" == "1" ]; then
colour=never colour=never
fi fi
${haskellFind} $paths -print0 | xargs -0 grep -nw --colour=$colour "$@" ${haskellFind} $paths -print0 | xargs -0 grep -nw --colour=$colour "$@"
''; '';
@@ -278,7 +278,7 @@ let
for line in sys.stdin: for line in sys.stdin:
sys.stdout.write(reduce(lambda s, f: f(s), hlfuns, line)) sys.stdout.write(reduce(lambda s, f: f(s), hlfuns, line))
''; '';
haskellTags = pkgs.writeBash "htags.sh" '' haskellTags = pkgs.writeDash "htags.sh" ''
id="[a-z_][a-zA-Z0-9_\']*" id="[a-z_][a-zA-Z0-9_\']*"
ws="[ \\t]" ws="[ \\t]"
ID="[A-Z][a-zA-Z0-9_\']*" ID="[A-Z][a-zA-Z0-9_\']*"
@@ -633,7 +633,7 @@ let
echo ''${1// /-} echo ''${1// /-}
} }
eval $(${spotifyCli} eval) eval $(${spotifyCli} eval)
${defaultApplications.webBrowser} "http://genius.com/$(normalise "$SPOTIFY_ARTIST")-$(normalise "$SPOTIFY_TITLE")-lyrics" ${pkgs.xdg_utils}/bin/xdg-open "http://genius.com/$(normalise "$SPOTIFY_ARTIST")-$(normalise "$SPOTIFY_TITLE")-lyrics"
''; '';
in { in {
compile = compile; compile = compile;

View File

@@ -1,4 +1,3 @@
defaultApplications:
with import ../theme.nix; with import ../theme.nix;
'' ''
[Configuration] [Configuration]

View File

@@ -1,4 +1,4 @@
{ rec {
uiFont = { name = "Roboto"; size = 10; }; uiFont = { name = "Roboto"; size = 10; };
terminalFont = { terminalFont = {
regular = { name = "Roboto Mono for Powerline"; }; regular = { name = "Roboto Mono for Powerline"; };
@@ -11,19 +11,18 @@
white = "#ffffff"; white = "#ffffff";
black = "#000000"; black = "#000000";
veryDark = "#080808"; 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 colorPalette = [
gray = { light = "#bbbbbb"; dark = "#151515"; }; gray.dark red.dark green.dark yellow.dark blue.dark magenta.dark cyan.dark gray.light
red = { light = "#de575c"; dark = "#de575c"; }; gray.dark red.light green.light yellow.light blue.light magenta.light cyan.light gray.light
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"; };
}
# Antares color scheme
gray = { light = "#bbbbbb"; dark = "#151515"; medium = "#aaaaaa"; };
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"; };
}