{ config, lib, pkgs, ... }: let uiFont = "Roboto"; uiFontSize = 10; defaultTerminal = "${pkgs.lxqt.qterminal}/bin/qterminal"; white = "#ffffff"; black = "#000000"; lightGray = "#aaaaaa"; darkGray = "#888888"; red = "#ff0000"; spotify_info = pkgs.writeScript "spotify.info" '' #!/bin/bash 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.writeScript "battery.info" '' #!/usr/bin/env bash cd "/sys/class/power_supply/$BLOCK_INSTANCE/" 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.writeScript "volume.info" '' #!/usr/bin/env bash 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.writeScript "fancy_date.py" '' #!/usr/bin/env python3 from datetime import datetime now = datetime.now() print(now.strftime("%d\u2009{}\u2009%Y ⟨%V⟩").format(chr(0x2160 + (now.month - 1)))) ''; i3blocks_conf = pkgs.writeText "i3blocks.conf" '' markup=pango align=center color=${white} [spotify] command=${spotify_info} interval=1 [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=date +'%F [%a(%V):%j]' command=${fancyDate} interval=30 label= [separator] [time] command=date +'%H:%M' interval=30 label= [separator] ''; i3_conf = pkgs.writeText "i3.conf" '' set $rofsize 12 set $mainfont ${uiFont} ${uiFontSize} set $accent-color ${darkGray} set $bg-color ${black} set $border-color ${black} set $inactive-bg-color ${black} set $inactive-text-color ${darkGray} set $active-text-color ${lightGray} set $indicator-color ${white} set $text-color ${white} set $urgent-color ${red} set $ws-bg-color ${black} set $ws-border-color ${black} set $ws-inactive-bg-color ${black} set $terminal ${defaultTerminal} set $file-manager ${pkgs.gnome3.nautilus}/bin/nautilus set $browser ${pkgs.google-chrome}/bin/google-chrome-stable set $mod Mod4 font pango:${uiFont} ${uiFontSize} floating_modifier $mod hide_edge_borders both new_window pixel 1 new_float pixel 1 bindsym $mod+Return exec $terminal bindsym $mod+y exec $browser bindsym $mod+t exec $file-manager 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 -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.xorg.xbacklight}/bin/xbacklight + 10 && pkill -RTMIN+2 i3blocks bindsym XF86MonBrightnessDown exec --no-startup-id ${pkgs.xorg.xbacklight}/bin/xbacklight - 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 $mod+r mode "  " client.focused $accent-color $bg-color $text-color $indicator-color $accent-color client.focused_inactive $border-color $inactive-bg-color $inactive-text-color $indicator-color $border-color client.unfocused $border-color $inactive-bg-color $inactive-text-color $indicator-color $border-color client.urgent $urgent-color $bg-color $text-color $indicator-color $urgent-color bar { status_command "${pkgs.i3blocks}/bin/i3blocks -c ${i3blocks_conf}" position top font pango:$font,FontAwesome $size separator_symbol " // " colors { separator $inactive-text-color background $inactive-bg-color statusline $inactive-text-color focused_workspace $ws-border-color $ws-bg-color $text-color active_workspace $ws-border-color $ws-bg-color $active-text-color inactive_workspace $ws-border-color $ws-inactive-bg-color $inactive-text-color urgent_workspace $ws-border-color $ws-bg-color $urgent-color } } exec --no-startup-id ${pkgs.networkmanagerapplet}/bin/nm-applet ''; vim_conf = pkgs.writeText "vim.conf" '' let mapleader="," let maplocalleader=";" filetype off set packpath^=~/.vim packadd minpac call minpac#init() call minpac#add('LnL7/vim-nix') call minpac#add('MarcWeber/vim-addon-mw-utils') call minpac#add('Shougo/neocomplete.vim') call minpac#add('Shougo/vimproc.vim') call minpac#add('airblade/vim-gitgutter') call minpac#add('bling/vim-bufferline') call minpac#add('ctrlpvim/ctrlp.vim') call minpac#add('dhruvasagar/vim-table-mode') call minpac#add('fsharp/vim-fsharp') call minpac#add('garbas/vim-snipmate') call minpac#add('gerw/vim-latex-suite') call minpac#add('godlygeek/tabular') call minpac#add('idris-hackers/idris-vim') call minpac#add('k-takata/minpac', {'type':'opt'}) call minpac#add('kien/rainbow_parentheses.vim') call minpac#add('leafgarland/typescript-vim') call minpac#add('mattn/emmet-vim') call minpac#add('mhinz/vim-startify') call minpac#add('mxw/vim-jsx') call minpac#add('pangloss/vim-javascript') call minpac#add('raichoo/purescript-vim') call minpac#add('rust-lang/rust.vim') call minpac#add('scrooloose/nerdcommenter') call minpac#add('scrooloose/nerdtree') call minpac#add('scrooloose/syntastic') call minpac#add('tomtom/tlib_vim') call minpac#add('toyamarinyon/vim-swift') call minpac#add('tpope/vim-fugitive') call minpac#add('tpope/vim-git') call minpac#add('tpope/vim-repeat') call minpac#add('tpope/vim-speeddating') call minpac#add('tpope/vim-surround') call minpac#add('vim-airline/vim-airline') call minpac#add('vim-airline/vim-airline-themes') call minpac#add('vim-pandoc/vim-pandoc-syntax') call minpac#add('vim-scripts/Gundo') call minpac#add('vim-scripts/SuperTab') let g:vimtex_disable_version_warning = 1 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(".") + 1}/%{line("$")}' let g:airline_theme='simple' 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 nnoremap :GundoToggle map ,s :SyntasticToggleMode map tw :GhcModTypeInsert map ts :GhcModSplitFunCase map tq :GhcModType map te :GhcModTypeClear let g:haskellmode_completion_ghc = 1 let g:SuperTabDefaultCompletionType = '' " '' if has("gui_running") imap =SuperTabAlternateCompletion("\c-x>\c-o>") else " no gui if has("unix") inoremap =SuperTabAlternateCompletion("\c-x>\c-o>") endif endif vmap a= :Tabularize /= vmap a; :Tabularize /:: vmap a- :Tabularize /-> """ {{{ Set commands syntax on colorscheme delek filetype plugin indent on set path=$PWD/** set wildmenu set shortmess+=I set noshowcmd set nocompatible set tabstop=4 set shiftwidth=4 set expandtab set number set nowb set noswapfile set mouse=a set ruler set ignorecase smartcase set showmatch set encoding=utf8 set ffs=unix,dos,mac set autoindent smartindent set nowrap set laststatus=2 set noshowmode " vim-airline is installed, no need for that set linespace=0 set nohlsearch set clipboard=unnamedplus,autoselect set completeopt=menuone,menu,longest set wildmode=longest,list,full set nopaste set title set titleold="" set titlestring=VIM:\ %F set list set listchars=tab:▸\ ,extends:❯,precedes:❮ set showbreak=↪ set norelativenumber set foldlevelstart=30 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\+' call matchadd('colorcolumn', '\%101v', 100) highlight folded ctermbg=black highlight colorcolumn ctermbg=red highlight matchparen cterm=bold ctermbg=black ctermfg=white if exists("+undofile") " 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 " This is only present in 7.3+ if isdirectory($HOME . '/.vim/undo') == 0 :silent !mkdir -p ~/.vim/undo > /dev/null 2>&1 endif set undodir=./.vim-undo// set undodir+=~/.vim/undo// set undofile endif """ }}} " map m :%s/^M// " improve up/down navigation in wrapped lines nnoremap j gj nnoremap k gk nnoremap 0 ^ " greek input nnoremap η h nnoremap ξ j nnoremap κ k nnoremap λ l nnoremap ι i " nmap t ok " nmap T Oj function! AdjustTabbingTo2() set noexpandtab tabstop=4 retab! set expandtab tabstop=2 retab! endfunction " nmap t AdjustTabbingTo2() nmap ddkP nmap ddp vmap xkP`[V`] vmap xp`[V`] """ }}} """ {{{ Practicalities function! StripTrailingWhitespaces() let _s=@/ let l=line(".") let c=col(".") %s/\s\+$//e let @/=_s call cursor(l,c) endfunction 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 StripTrailingWhitespaces() " autocmd bufnewfile,bufread *.md set filetype=markdown 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 *.tex set filetype=tex autocmd bufnewfile,bufread *.c set keywordprg=man\ 3 autocmd bufnewfile,bufread *.h set keywordprg=man\ 3 autocmd filetype make setlocal noexpandtab autocmd! bufnewfile,buffilepre,bufread *.md set filetype=markdown ".pandoc autocmd bufreadpre * setlocal foldmethod=indent autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif endif nnoremap @=(foldlevel('.')?'za':"\") vnoremap zf highlight TrailSpace ctermbg=red guibg=darkred match TrailSpace /\s\+$/ command! RandomLine execute 'normal! '.(system('/bin/bash -c "echo -n $RANDOM"') % line('$')).'G' 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() ''; in { imports = [ "${builtins.fetchTarball https://github.com/rycee/home-manager/archive/master.tar.gz}/nixos" ]; home-manager.users.my_username = { }; nixpkgs.config.allowUnfree = true; security.sudo.enable = true; fonts.fonts = with pkgs; [ roboto font-awesome-ttf fira-code eb-garamond lmodern ]; environment.systemPackages = with pkgs; [ stack python3 rustup nasm gcc tinycc nodejs ocaml fsharp clojure racket-minimal jo haskellPackages.hasktags perl ruby scala swiProlog jdk haskellPackages.idris ctags ffmpeg mpv youtubeDL inkscape imagemagick zathura calibre google-play-music-desktop-player spotify gnome3.gnome-music audacity par haskellPackages.pandoc biber google-chrome firefox lynx w3m lxappearance lxqt.qterminal kitty arc-icon-theme arc-kde-theme arc-theme breeze-qt5 xorg.xbacklight pamixer gnome3.nautilus kdeconnect vim git wget htop zip unzip ripgrep tmux whois tree texlive.combined.scheme-full rlwrap lua libreoffice-fresh pmount gnumake franz grive2 geogebra gnuplot maxima ]; /*networking.hostname = "scardanelli";*/ networking.networkmanager.enable = true; services.xserver.enable = true; services.xserver.layout = "de, gr, ru"; services.xserver.xkbVariant = "T3, polytonic, phonetic"; services.xserver.xkbOptions = "terminate:ctrl_alt_bksp, grp:alt_space_toggle"; i18n.consoleUseXkbConfig = true; services.xserver.libinput.enable = true; services.xserver.displayManager.lightdm.enable = true; services.xserver.displayManager.lightdm.greeters.gtk.clock-format = "%F"; services.xserver.displayManager.lightdm.greeters.gtk.iconTheme = { package = pkgs.arc-icon-theme; name = "Arc"; }; services.xserver.displayManager.lightdm.greeters.gtk.theme = { package = pkgs.arc-theme; name = "Arc-Dark"; }; services.xserver.windowManager.default = "i3"; services.xserver.windowManager.i3.enable = true; services.xserver.windowManager.i3.extraPackages = with pkgs; [ i3blocks networkmanagerapplet ]; services.xserver.windowManager.i3.configFile = i3_conf; environment.etc.i3blocks_conf.source = i3blocks_conf; environment.etc.vimrc.source = vim_conf; programs.home-manager.enable = true; programs.rofi = { enable = true; lines = 4; font = uiFont + " " + uiFontSize; terminal = defaultTerminal; theme = "Arc-Dark"; }; services.compton = { enable = true; fade = true; shadow = true; fadeDelta = 2; }; services.openssh.enable = true; hardware.pulseaudio.enable = true; hardware.bluetooth.enable = true; programs.vim.defaultEditor = true; programs.zsh.enable = true; programs.zsh.autosuggestions.enable = true; programs.zsh.enableCompletion = true; programs.zsh.syntaxHighlighting.enable = true; programs.zsh.syntaxHighlighting.highlighters = [ "main" "brackets" "pattern" "cursor" "root" "line" ]; programs.zsh.ohMyZsh.enable = true; programs.zsh.ohMyZsh.plugins = [ "common-aliases" "git" "git-extras" "history" "jsontools" ]; programs.zsh.ohMyZsh.theme = "muse"; users.users.kfm = { createHome = true; description = "Kierán Meinhardt"; extraGroups = [ "wheel" "networkmanager" ]; group = "users"; home = "/home/kfm"; shell = pkgs.zsh; uid = 1234; password = "kfm"; }; }