{ pkgs, ... }:
{
  programs = {
    dircolors = {
    enable = true;
    extraConfig = ''
      # Dark 256 color solarized theme for the color GNU ls utility.
      # Used and tested with dircolors (GNU coreutils) 8.5
      #
      # @author  {@link http://sebastian.tramp.name Sebastian Tramp}
      #
      # More Information at
      # https://github.com/seebi/dircolors-solarized

      # Term Section
      TERM Eterm
      TERM alacritty
      TERM ansi
      TERM color-xterm
      TERM con132x25
      TERM con132x30
      TERM con132x43
      TERM con132x60
      TERM con80x25
      TERM con80x28
      TERM con80x30
      TERM con80x43
      TERM con80x50
      TERM con80x60
      TERM cons25
      TERM console
      TERM cygwin
      TERM dtterm
      TERM dvtm
      TERM dvtm-256color
      TERM eterm-color
      TERM fbterm
      TERM foot
      TERM gnome
      TERM gnome-256color
      TERM jfbterm
      TERM konsole
      TERM konsole-256color
      TERM kterm
      TERM linux
      TERM linux-16color
      TERM linux-c
      TERM mach-color
      TERM mlterm
      TERM putty
      TERM putty-256color
      TERM rxvt
      TERM rxvt-256color
      TERM rxvt-cygwin
      TERM rxvt-cygwin-native
      TERM rxvt-unicode
      TERM rxvt-unicode256
      TERM rxvt-unicode-256color
      TERM screen
      TERM screen-16color
      TERM screen-16color-bce
      TERM screen-16color-s
      TERM screen-16color-bce-s
      TERM screen-256color
      TERM screen-256color-bce
      TERM screen-256color-s
      TERM screen-256color-bce-s
      TERM screen-256color-italic
      TERM screen-bce
      TERM screen-w
      TERM screen.linux
      TERM screen.xterm-256color
      TERM st
      TERM st-meta
      TERM st-256color
      TERM st-meta-256color
      TERM tmux
      TERM tmux-256color
      TERM vt100
      TERM xterm
      TERM xterm-16color
      TERM xterm-256color
      TERM xterm-256color-italic
      TERM xterm-88color
      TERM xterm-color
      TERM xterm-debian
      TERM xterm-kitty
      TERM xterm-termite

      ## Documentation
      #
      # standard colors
      #
      # Below are the color init strings for the basic file types. A color init
      # string consists of one or more of the following numeric codes:
      # Attribute codes:
      # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
      # Text color codes:
      # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
      # Background color codes:
      # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
      #
      #
      # 256 color support
      # see here: http://www.mail-archive.com/bug-coreutils@gnu.org/msg11030.html)
      #
      # Text 256 color coding:
      # 38;5;COLOR_NUMBER
      # Background 256 color coding:
      # 48;5;COLOR_NUMBER

      ## Special files

      NORMAL 00;38;5;244 # no color code at all
      #FILE 00 # regular file: use no color at all
      RESET 0 # reset to "normal" color
      DIR 00;38;5;33 # directory 01;34
      LINK 01;38;5;37 # symbolic link. (If you set this to 'target' instead of a
       # numerical value, the color is as for the file pointed to.)
      MULTIHARDLINK 00 # regular file with more than one link
      FIFO 48;5;230;38;5;136;01 # pipe
      SOCK 48;5;230;38;5;136;01 # socket
      DOOR 48;5;230;38;5;136;01 # door
      BLK 48;5;230;38;5;244;01 # block device driver
      CHR 48;5;230;38;5;244;01 # character device driver
      ORPHAN 48;5;235;38;5;160 # symlink to nonexistent file, or non-stat'able file
      SETUID 48;5;160;38;5;230 # file that is setuid (u+s)
      SETGID 48;5;136;38;5;230 # file that is setgid (g+s)
      CAPABILITY 30;41 # file with capability
      STICKY_OTHER_WRITABLE 48;5;64;38;5;230 # dir that is sticky and other-writable (+t,o+w)
      OTHER_WRITABLE 48;5;235;38;5;33 # dir that is other-writable (o+w) and not sticky
      STICKY 48;5;33;38;5;230 # dir with the sticky bit set (+t) and not other-writable
      # This is for files with execute permission:
      EXEC 01;38;5;64

      ## Archives or compressed (violet + bold for compression)
      .tar    00;38;5;61
      .tgz    01;38;5;61
      .arj    01;38;5;61
      .taz    01;38;5;61
      .lzh    01;38;5;61
      .lzma   01;38;5;61
      .tlz    01;38;5;61
      .txz    01;38;5;61
      .zip    01;38;5;61
      .zst    01;38;5;61
      .z      01;38;5;61
      .Z      01;38;5;61
      .dz     01;38;5;61
      .gz     01;38;5;61
      .lz     01;38;5;61
      .xz     01;38;5;61
      .bz2    01;38;5;61
      .bz     01;38;5;61
      .tbz    01;38;5;61
      .tbz2   01;38;5;61
      .tz     01;38;5;61
      .deb    01;38;5;61
      .rpm    01;38;5;61
      .jar    01;38;5;61
      .rar    01;38;5;61
      .ace    01;38;5;61
      .zoo    01;38;5;61
      .cpio   01;38;5;61
      .7z     01;38;5;61
      .rz     01;38;5;61
      .apk    01;38;5;61
      .gem    01;38;5;61

      # Image formats (yellow)
      .jpg    00;38;5;136
      .JPG    00;38;5;136 #stupid but needed
      .jpeg   00;38;5;136
      .gif    00;38;5;136
      .bmp    00;38;5;136
      .pbm    00;38;5;136
      .pgm    00;38;5;136
      .ppm    00;38;5;136
      .tga    00;38;5;136
      .xbm    00;38;5;136
      .xpm    00;38;5;136
      .tif    00;38;5;136
      .tiff   00;38;5;136
      .png    00;38;5;136
      .PNG    00;38;5;136
      .svg    00;38;5;136
      .svgz   00;38;5;136
      .mng    00;38;5;136
      .pcx    00;38;5;136
      .dl     00;38;5;136
      .xcf    00;38;5;136
      .xwd    00;38;5;136
      .yuv    00;38;5;136
      .cgm    00;38;5;136
      .emf    00;38;5;136
      .eps    00;38;5;136
      .CR2    00;38;5;136
      .ico    00;38;5;136
      .nef    00;38;5;136 # Nikon RAW format
      .NEF    00;38;5;136
      .webp   00;38;5;136 # https://en.wikipedia.org/wiki/WebP
      .heic   00;38;5;136
      .HEIC   00;38;5;136
      .avif   00;38;5;136

      # Files of special interest (base1 + bold)
      .tex             01;38;5;245
      .rdf             01;38;5;245
      .owl             01;38;5;245
      .n3              01;38;5;245
      .ttl             01;38;5;245
      .nt              01;38;5;245
      .torrent         01;38;5;245
      .xml             01;38;5;245
      *Makefile        01;38;5;245
      *Rakefile        01;38;5;245
      *Dockerfile      01;38;5;245
      *build.xml       01;38;5;245
      *rc              01;38;5;245
      *1               01;38;5;245
      .nfo             01;38;5;245
      *README          01;38;5;245
      *README.txt      01;38;5;245
      *readme.txt      01;38;5;245
      .md              01;38;5;245
      *README.markdown 01;38;5;245
      .ini             01;38;5;245
      .yml             01;38;5;245
      .cfg             01;38;5;245
      .conf            01;38;5;245
      .h               01;38;5;245
      .hpp             01;38;5;245
      .c               01;38;5;245
      .cpp             01;38;5;245
      .cxx             01;38;5;245
      .cc              01;38;5;245
      .objc            01;38;5;245
      .sqlite          01;38;5;245
      .go              01;38;5;245
      .sql             01;38;5;245
      .csv             01;38;5;245

      # "unimportant" files as logs and backups (base01)
      .log        00;38;5;240
      .bak        00;38;5;240
      .aux        00;38;5;240
      .lof        00;38;5;240
      .lol        00;38;5;240
      .lot        00;38;5;240
      .out        00;38;5;240
      .toc        00;38;5;240
      .bbl        00;38;5;240
      .blg        00;38;5;240
      *~          00;38;5;240
      *#          00;38;5;240
      .part       00;38;5;240
      .incomplete 00;38;5;240
      .swp        00;38;5;240
      .tmp        00;38;5;240
      .temp       00;38;5;240
      .o          00;38;5;240
      .pyc        00;38;5;240
      .class      00;38;5;240
      .cache      00;38;5;240

      # Audio formats (orange)
      .aac    00;38;5;166
      .au     00;38;5;166
      .flac   00;38;5;166
      .mid    00;38;5;166
      .midi   00;38;5;166
      .mka    00;38;5;166
      .mp3    00;38;5;166
      .mpc    00;38;5;166
      .ogg    00;38;5;166
      .opus   00;38;5;166
      .ra     00;38;5;166
      .wav    00;38;5;166
      .m4a    00;38;5;166
      # http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
      .axa    00;38;5;166
      .oga    00;38;5;166
      .spx    00;38;5;166
      .xspf   00;38;5;166

      # Video formats (as audio + bold)
      .mov    01;38;5;166
      .MOV    01;38;5;166
      .mpg    01;38;5;166
      .mpeg   01;38;5;166
      .m2v    01;38;5;166
      .mkv    01;38;5;166
      .ogm    01;38;5;166
      .mp4    01;38;5;166
      .m4v    01;38;5;166
      .mp4v   01;38;5;166
      .vob    01;38;5;166
      .qt     01;38;5;166
      .nuv    01;38;5;166
      .wmv    01;38;5;166
      .asf    01;38;5;166
      .rm     01;38;5;166
      .rmvb   01;38;5;166
      .flc    01;38;5;166
      .avi    01;38;5;166
      .fli    01;38;5;166
      .flv    01;38;5;166
      .gl     01;38;5;166
      .m2ts   01;38;5;166
      .divx   01;38;5;166
      .webm   01;38;5;166
      # http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
      .axv 01;38;5;166
      .anx 01;38;5;166
      .ogv 01;38;5;166
      .ogx 01;38;5;166
    '';
    settings = pkgs.lib.mkForce { };
    };

    direnv = {
      enable = true;
      nix-direnv.enable = true;
    };

    fish = {
      enable = true;

      shellAbbrs = {
        diff-persist = "sudo rsync -amvxx --dry-run --no-links --exclude '/tmp/*' --exclude '/root/*' / /persist/ | rg -v '^skipping|/$'";
      };

      shellInit = ''
        set fish_greeting

        set pure_color_mute green
        set pure_check_for_new_release false
        set pure_enable_nixdevshell true
        set pure_show_prefix_root_prompt true
        set sponge_regex_patterns 'password|passwd'
      '';
    };

    fzf = {
      enable = true;
    };

    git = {
      enable = true;
      userEmail = "petru@paler.net";
      userName = "Petru Paler";
    };

    home-manager = {
      enable = true;
    };

    less.enable = true;

    lesspipe.enable = false;

    nix-index-database.comma.enable = true;

    nixvim = {
      enable = true;

      defaultEditor = true;
      viAlias = true;
      # makes lessopen complain sometimes
      vimAlias = false;

      opts = {
        tabstop = 4;
        softtabstop = 4;
        shiftwidth = 4;
        expandtab = true;
        shiftround = true;
      };

      plugins = {
        nix.enable = true;
      };
    };

    tmux = {
      enable = true;
      prefix = "C-t";
      terminal = "screen-256color";
      historyLimit = 20000;
      keyMode = "vi";
      extraConfig = ''
        bind-key t send-prefix
        bind-key C-t last-window

        set -g status-left ""
        set -g status-right ""

        setw -g automatic-rename on
        set -g set-titles on

        # first, unset update-environment[SSH_AUTH_SOCK] (idx 3), to prevent
        # the client overriding the global value
        set-option -g -u update-environment[3]
        # And set the global value to our static symlink'd path:
        set-environment -g SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
      '';
    };
  };
}
