{ pkgs, ... }: with pkgs; let # nix-channel --add https://nixos.org/channels/nixos-unstable nixos-unstable unstable = import { }; # nix-channel --add https://github.com/nix-community/NUR/archive/master.tar.gz NUR nur = import { inherit pkgs; }; myNur = nur.repos.schmittlauch; desktopApps = [ firefox chromium falkon thunderbird calibre dino zotero keepassxc ding aspell aspellDicts.de aspellDicts.en # for kate/KDE applications hunspellDicts.de-de hunspellDicts.en-us hunspellDicts.en-gb-ise seafile-client alacritty libreoffice-qt # fresh with KDE integration backintime-common anki-bin signal-desktop (tor-browser-bundle-bin.override { mediaSupport = true; pulseaudioSupport = true; # prevent segfault on Intel graphics systems useHardenedMalloc = false; }) pdfpc quaternion nheko gpx-viewer gpxsee cawbird subsurface yate # split and merge PDFs in a GUI pdfarranger qbittorrent #(pkgs.pidgin-with-plugins.override { # plugins = [ pkgs.pidginotr ];}) # for Hibiscus banking software jameica #ToDo: which of these drivers is actually used? geckodriver chromedriver ]; graphicsApps = [ inkscape darktable hugin luminanceHDR exiftool gimp xournal ] ++ ( with gimpPlugins; [ resynthesizer fourier lqrPlugin ] ); multimediaApps = [ mpv vlc #amarok clementine elisa yt-dlp #sonic-pi musescore audacity avidemux #linphone soundkonverter ]; cliApps = [ myVim htop tmux httpie ponysay gti tree lsof mosh openssh sshfs-fuse cryfs smbnetfs # for FUSE smb mounting sshuttle thefuck gnupg unar lzop p7zip pwgen pandoc agrep pdfgrep torsocks ncdu psmisc # for killall dos2unix reptyr # re-bind running program to other tty xclip unzip myNur.lolcommits # from NUR ]; nixHelpers = [ lorri nix-review nixpkgs-fmt nix-top statix ]; kdeTools = with plasma5Packages; with kdeGear; [ okular gwenview yakuake kmail kontact korganizer akonadi-mime #for KOrganizer kaddressbook kdeconnect dolphin spectacle kate kleopatra qdirstat ark kwalletmanager ktouch kcharselect konversation okteta krdc skanlite akonadiconsole plasma-browser-integration ] ++ ( with kdeFrameworks; [ networkmanager-qt kcrash breeze-gtk phonon-backend-vlc #(phonon-backend-vlc.override {qtbase=qt5.qtbase; qtx11extras=qt5.qtx11extras;}) ] ); devTools = [ curl httpie gdb strace ltrace valgrind zeal gcc shellcheck mtr ripgrep gitui lazygit pre-commit # Haskell ghc cabal2nix ]; latexApps = [ texmaker kile biber # customize texlive installation ( texlive.combine { inherit (texlive) scheme-medium xetex luatex unicode-math fontspec collection-binextra collection-fontsrecommended collection-latex collection-latexextra collection-latexrecommended collection-langgerman moderncv fontawesome5 academicons acronym ccicons fontawesome biblatex logreq koma-script ; } ) ]; pythonApps = with python3Packages; [ notebook ipython pip numpy matplotlib jedi flake8 mypy ]; fonts = [ comic-neue source-sans-pro source-serif-pro fira-code ubuntu_font_family twemoji-color-font open-sans (iosevka-bin.override { variant = "curly-slab"; }) myNur.vollkorn # TODO: humor-sans ]; games = [ superTuxKart #hedgewars ]; in { home.packages = desktopApps ++ latexApps ++ pythonApps ++ graphicsApps ++ cliApps ++ multimediaApps ++ devTools ++ kdeTools ++ fonts ++ nixHelpers ++ games ; programs.home-manager.enable = true; programs.home-manager.path = "$HOME/.nix-defexpr/channels/home-manager"; home.stateVersion = "18.09"; programs.direnv = { enable = true; enableZshIntegration = true; }; # programs.vim = # { enable = true; # }; programs.bat.enable = true; services.gpg-agent = { enable = true; enableSshSupport = true; pinentryFlavor = "qt"; }; programs.ssh = { enable = true; # ssh host config matchBlocks = import ./secrets/ssh_hosts.nix; }; programs.tmux = { enable = true; keyMode = "vi"; extraConfig = # for direnv not messing up the environment ''set-option -g update-environment "DIRENV_DIFF DIRENV_DIR DIRENV_WATCHES" set-environment -gu DIRENV_DIFF set-environment -gu DIRENV_DIR set-environment -gu DIRENV_WATCHES set-environment -gu DIRENV_LAYOUT bind-key -T copy-mode-vi 'v' send -X begin-selection bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel''; terminal = "screen-256color"; }; systemd.user.startServices = true; services.lorri.enable = true; # media button control support from Bluetooth devices services.mpris-proxy.enable = true; fonts.fontconfig.enable = true; programs.git = let contacts = import ./secrets/contacts.nix; in { enable = true; includes = [ { condition = "gitdir:~/Seafile/Studium/"; contents = { user.name = contacts.realName; user.email = contacts.uniMail; }; } { condition = "gitdir:~/src/nixpkgs/"; contents = { user.name = "Trolli Schmittlauch"; user.email = contacts.nixosMail; }; } ] # set default name for several other common locations ++ map (dir: { condition = "gitdir:${dir}"; contents = { user.name = "Trolli Schmittlauch"; user.email = contacts.mainMail; }; }) [ "~/src/" "~/bin/" "~/tmp/" "~/nixconfigs/" ]; extraConfig = { credential.helper = "cache"; push.default = "simple"; init.defaultBranch = "mainline"; diff.tool = "vimdiff"; merge.tool = "vimdiff"; core.excludesfile = toString (pkgs.writeText ".gitignore_global" '' # Direnv stuff .direnv .envrc # Editor files # ################ *~ *.swp *.swo ''); core.whitespace = "-blank-at-eol,blank-at-eof,space-before-tab"; }; lfs.enable = true; }; # shell config programs.zsh = { enable = true; enableSyntaxHighlighting = true; history.ignoreSpace = true; initExtra = '' # Uncomment following line if you want red dots to be displayed while waiting for completion COMPLETION_WAITING_DOTS="true" ### Fix slowness of pastes with zsh-syntax-highlighting.zsh pasteinit() { OLD_SELF_INSERT=''${''${(s.:.)widgets[self-insert]}[2,3]} zle -N self-insert url-quote-magic # I wonder if you'd need `.url-quote-magic`? } pastefinish() { zle -N self-insert $OLD_SELF_INSERT } zstyle :bracketed-paste-magic paste-init pasteinit zstyle :bracketed-paste-magic paste-finish pastefinish # automatic rehash of path completion zstyle ':completion:*' rehash true eval "$(${pkgs.thefuck}/bin/thefuck --alias)" ## helper functions nixify() { if [ ! -e ./.envrc ]; then echo "eval \"$(lorri direnv)\"" > .envrc direnv allow fi if [ ! -e shell.nix ]; then cat > shell.nix <<'EOF' with import {}; mkShell { buildInputs = [ bashInteractive ]; } EOF ${EDITOR:-vim} default.nix fi } binpath() { realpath $(${pkgs.which}/bin/which $1) } ''; oh-my-zsh = { enable = true; theme = "bira"; plugins = [ "git" "python" "systemd" "gpg-agent"]; }; }; home.shellAliases = { ip = "ip --color"; ipb = "ip --color --brief"; ll = "ls -l"; wavesynth = "nix-shell -p sox --run 'play -n synth brownnoise synth pinknoise mix synth 0 0 0 15 40 80 trapezium amod 0.2 20'"; vim = "nvim"; }; home.sessionVariables = { EDITOR = "nvim"; }; }