diff options
Diffstat (limited to '')
| -rw-r--r-- | configuration.nix | 611 |
1 files changed, 0 insertions, 611 deletions
diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index 99d44aec..00000000 --- a/configuration.nix +++ /dev/null @@ -1,611 +0,0 @@ -{ config, pkgs, ... }: - -# rollback to a previously working channel version, useful -# when "doas nixos-rebuild switch --upgrade" breaks: -# -# $ doas nix-channel --rollback - -let - enable-virtualization = true; - extra-groups = if enable-virtualization then [ "docker" ] else []; - extra-packages = with pkgs; [ - ] ++ (if enable-virtualization then [ gitlab-runner ] else []); - work = { - packages = with pkgs; { - proprietary = [ - slack - zoom-us - openfortivpn - skypeforlinux - chromium - ]; - libre = [ - yubioath-desktop - clojure # =clj= - ]; - }; - config = { - yubioauth-support = true; - }; - }; -in { - imports = [ /etc/nixos/hardware-configuration.nix ]; - - # Use the systemd-boot EFI boot loader. - boot = { - loader = { - efi.canTouchEfiVariables = true; - grub = { - enable = true; - version = 2; - efiSupport = true; - device = "nodev"; - }; - }; - initrd.luks.devices = { - crypted = { - device = "/dev/nvme0n1p2"; - preLVM = true; - }; - }; - }; - - hardware = { - bluetooth.enable = true; - pulseaudio = { - package = pkgs.pulseaudioFull; - enable = true; - extraModules = [ pkgs.pulseaudio-modules-bt ]; - extraConfig = '' - # Switch between headset and headphone mode (e.g. for calls and music) automatically - load-module module-bluetooth-policy auto_switch=2 - # Echo cancellation and noise cleanup of mic - load-module module-echo-cancel aec_method=webrtc - - # https://til.flourishing.stream/2020/05/24/cancelamento-de-ruido-pulseaudio/ - ### Enable Echo/Noise-Cancellation - load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink - set-default-source echoCancel_source - set-default-sink echoCancel_sink - ''; - }; - }; - - networking = { - hostName = "usurpador"; - networkmanager.enable = true; - }; - - console = { - keyMap = "br-abnt2"; - }; - - # Select internationalisation properties. - i18n = { - defaultLocale = "fr_FR.UTF-8"; - }; - - # Set your time zone. - time.timeZone = "America/Sao_Paulo"; - - documentation = { - enable = true; - man.enable = true; - dev.enable = true; - man.generateCaches = true; - nixos.includeAllModules = true; - }; - - environment = { - enableDebugInfo = true; - - systemPackages = let - pkgs-19 = import (fetchTarball - "https://github.com/NixOS/nixpkgs/archive/b0d748e244df6c977b2a1db3873ffdc271e59615.tar.gz") - { }; - pkgs-21 = import (fetchTarball - "https://github.com/NixOS/nixpkgs/archive/e6377ff35544226392b49fa2cf05590f9f0c4b43.tar.gz") - { }; - bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/bmake $out/bin/make - ''; - }); - tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/tcc $out/bin/c99 - ''; - }); - timidity-with-more-formats = pkgs.timidity.overrideAttrs (oldAttrs: { - configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; - buildInputs = oldAttrs.buildInputs ++ (with pkgs; [ libogg libvorbis flac ]); - }); - mktorrent-latest = pkgs.mktorrent.overrideAttrs (oldAttrs: rec { - version = "de7d011b35458de1472665f50b96c9cf6c303f39"; - src = pkgs.fetchFromGitHub { - owner = "Rudde"; - repo = "mktorrent"; - rev = version; - sha256 = "1gsky1ijxrfsw07lvfjw4annjkdfpmnp8nnddi1wakbzqn6v5dwq"; - }; - }); - - in with pkgs; - [ - vagrant - - ## Documentation - posix_man_pages - scheme-manpages - - ## DVCS - mr - fossil - mercurial - cvs - pkgs-19.bitkeeper - pkgs-19.packer - gitAndTools.gitFull - gitAndTools.gitRemoteGcrypt - gitAndTools.git-open - - ## Personal data tools - borgbackup - pass - gnupg - pinentry_gtk2 - - ## CLI tools - groff - mktorrent-latest - pkgs-21.diffoscope - diffoscope - bash-completion - nix-bash-completions - youtube-dl - wget - tmux - sox # =play=, SoX - Sound eXchange - gettext - perlPackages.Po4a - rlwrap - jq - rq - openvpn - xclip - psmisc # =killall= - tree - feh - qrencode - bind # =dig= - rsync - moreutils # =vipe=, =sponge=, errno - graphviz # =dot= and others - mkpasswd - direnv - recutils - sqlite - trash-cli - entr - mailutils - ffmpeg-full - ledger - gnuplot - ranger - electrum - zathura - st - pavucontrol - newsboat - acpi - xsel - nixfmt - nvi - fzf - calcurse - pandoc - cloc - inetutils # telnet - lsof - lsscsi - gotop - imagemagick - enscript - tcl - python3 - unzip - - ## System utilities - pmutils - btrfs-progs - - ## Mail - isync - notmuch - afew - # alot FIXME - pkgs-21.alot - w3m - urlscan - md4c - docutils - timidity-with-more-formats - - ## Conversations - # gomuks - weechat - # poezio - - ## Programming tools - perl - shellcheck - gcc - musl.dev - clang - clang-tools - valgrind - gdb - sbcl - nodejs_latest - quickjs - deno - lilypond - ghostscript - pdftk - guile_3_0 - - ## POSIX - bmake-with-alias - byacc - bc - lzip - gnugrep - file - ed - tinycc-with-posix-alias - m4 - bintools-unwrapped - units - - ## Containers and VMs - qemu - expect - - ## xmonad - xorg.xmodmap - xorg.xmessage - dmenu - escrotum - xorg.xbacklight - playerctl - lightdm - fvwm # =xpmroot= - haskellPackages.xmobar - arandr - alsaUtils # for xmonad volume commands - yad - amfora - cmus # remove it, use just mpv? - mutagen - - ## EuAndreh overlay - # xyz-euandreh.remembering-latest - # xyz-euandreh.git-permalink-latest - # xyz-euandreh.autoqemu-latest - - ## GUI programs - # frescobaldi broken - inkscape - # dino - fractal - poedit - audacity - zbar - (mpv-with-scripts.override { - scripts = with mpvScripts; [ mpris sponsorblock ]; - }) - firefox - libreoffice - - ## Candidates to be replaced by alternatives - transmission-gtk # https://github.com/btpd/btpd - tdesktop # telegram -> gomuks - whatsapp-for-linux - ] ++ work.packages.libre ++ work.packages.proprietary ++ extra-packages; - - etc = { - "with-email.sh".text = '' - #!/bin/sh - set -u - . ~/.bashrc - - while getopts 's:' flag; do - case "$flag" in - s) - SUBJECT="$OPTARG" - ;; - *) - exit 2 - ;; - esac - done - shift $((OPTIND - 1)) - - now() { - date '+%Y-%m-%dT%H:%M:%S%Z' - } - - OUT="$(echo 'mkstemp(template)' | m4 -D template="${"\${TMPDIR:-/tmp}"}/m4-tmpname.")" - printf 'Running command: %s\nStarting at: %s\n\n' "$*" "$(now)" >> "$OUT" - (sh -c "$@" 2>&1) >> "$OUT" - STATUS="$?" - printf '\nFinished at: %s\n' "$(now)" >> "$OUT" - - mail \ - -a 'Content-Type: text/plain; charset=UTF-8' \ - -a 'From:cron@euandre.org' \ - -s " (exit status: $STATUS) - ${"\${SUBJECT:-NO SUBJECT}"}" \ - eu@euandre.org < "$OUT" - ''; - }; - }; - - nixpkgs = let allow-unfree = builtins.length work.packages.proprietary > 0; - in { - config = { - android_sdk.accept_license = allow-unfree; - allowUnfree = allow-unfree; - }; - overlays = let - use-local = false; - euandreh-nixpkgs = import (if use-local then - ../package-repository/default.nix - else - fetchTarball { - url = - "https://euandreh.xyz/package-repository.git/snapshot/package-repository-main.tar.gz"; - }) { inherit pkgs; }; - in [ euandreh-nixpkgs ]; - }; - - # Look at - # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro - - programs = { - bash.enableCompletion = true; - autojump.enable = true; - msmtp = { - enable = true; - extraConfig = '' - defaults - auth on - tls on - port 587 - syslog on - - account euandreh - host box.euandre.org - from eu@euandre.org - user eu@euandre.org - # msmtp in cron's MAILTO environment doesn't include PASSWORD_STORE_DIR - passwordeval pass show Mail-in-a-Box - - account euandrehxyz - host mail.euandreh.xyz - from eu@euandreh.xyz - user eu@euandreh.xyz - passwordeval pass show VPS/kuvira/mail - - account euandreharrobaponto - host mail.arrobaponto.org - from euandreh@arrobaponto.org - user euandreh@arrobaponto.org - passwordeval pass show VPS/toph/mail - - account nubank - host smtp.gmail.com - from andre.moreira@nubank.com.br - user andre.moreira@nubank.com.br - passwordeval pass show andre.moreira@nubank.com.br - - account default : euandreh - ''; - }; - }; - - services = { - # required by vagrant+libvirt - nfs.server.enable = enable-virtualization; - - # Required for local network printer - avahi = { - enable = true; - nssmdns = true; - }; - - printing = { - enable = false; - drivers = let - epson-201401w = with pkgs; - stdenv.mkDerivation rec { - v = "201401w"; - pname = "epson-${v}"; - version = "1.0.0"; - - src = fetchurl { - urls = [ - "https://download.ebz.epson.net/dsc/op/stable/SRPMS/epson-inkjet-printer-${v}-${version}-1lsb3.2.src.rpm" - "https://download3.ebz.epson.net/dsc/f/03/00/03/45/41/92e9c9254f0ee4230a069545ba27ec2858a2c457/epson-inkjet-printer-201401w-1.0.0-1lsb3.2.src.rpm" - ]; - sha256 = "0c60m1sd59s4sda38dc5nniwa7dh1b0kv1maajr0x9d38gqlyk3x"; - }; - - nativeBuildInputs = [ rpmextract autoreconfHook file ]; - - buildInputs = [ libjpeg cups ]; - - unpackPhase = '' - rpmextract $src - tar -zxf epson-inkjet-printer-${v}-${version}.tar.gz - tar -zxf epson-inkjet-printer-filter-${version}.tar.gz - for ppd in epson-inkjet-printer-${v}-${version}/ppds/*; do - substituteInPlace $ppd --replace "/opt/epson-inkjet-printer-${v}" "$out" - substituteInPlace $ppd --replace "/cups/lib" "/lib/cups" - done - cd epson-inkjet-printer-filter-${version} - ''; - - postInstall = '' - cd ../epson-inkjet-printer-${v}-${version} - cp -a lib64 resource watermark $out - mkdir -p $out/share/cups/model/epson-inkjet-printer-${v} - cp -a ppds $out/share/cups/model/epson-inkjet-printer-${v}/ - cp -a Manual.txt $out/doc/ - cp -a README $out/doc/README.driver - ''; - }; - in [ - epson-201401w - ]; - }; - - cron = { - enable = true; - # Keep this so that when the "mail" command fails I also get a notification email - mailto = "eu@euandre.org"; - systemCronJobs = [ - "40 23 * * * root sh /etc/with-email.sh -s '[CRON] usurpador: guix upgrade' -- 'guix pull && guix package -u && systemctl restart guix-daemon.service'" - "40 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: guix upgrade' -- 'guix pull && guix package -u'" - "0 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: guix deploy' -- 'guix deploy -L ~/dev/libre/servers/src/lib ~/dev/libre/servers/src/machines.scm'" - "10 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: mr update' -- 'mr -s safeupdate'" - "20 */6 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: email flush' -- 'msmtp-queue -r'" - "30 */6 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: email sync' -- 'mbsync -a && notmuch new'" - "50 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: borg backup' -- '~/dev/libre/dotfiles/src/bin/backup'" - ]; - }; - - xserver = { - enable = true; - layout = "br"; - xkbOptions = "caps:swapescape"; - - # Touchpad support - libinput.enable = true; - - config = '' - Section "Device" - Identifier "Intel Graphics" - Driver "intel01" - Option "Backlight" "intel_backlight" - EndSection - ''; - - windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - }; - displayManager = { - defaultSession = "none+xmonad"; - - lightdm.enable = true; - - # The config inception was inspired by: - # http://ubuntuforum-br.org/index.php?topic=13784.0 - # Lambda symbol name taken from: - # http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap - # To test a keycode: - # xmodmap -e 'keycode 118 = bar Greek_lamda' - sessionCommands = '' - ${pkgs.fvwm}/bin/xpmroot ~/annex/docs/emotion.png & - ''; - }; - }; - - clipmenu.enable = true; - blueman.enable = true; - pcscd.enable = work.config.yubioauth-support; - }; - - security = { - sudo.enable = false; - doas = { - enable = true; - extraConfig = '' - permit persist setenv { NIX_PATH } :wheel - ''; - }; - }; - - users = { - extraUsers = let - andrehUser = { - andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "libvirtd" ] ++ extra-groups ; - }; - }; - # From the Guix manual: - # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup - buildUser = (i: { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = [ "guixbuild" ]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.shadow; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system - }; - }); - # merge all users - in pkgs.lib.fold (str: acc: acc // buildUser str) andrehUser - # for i in `seq -w 1 10` - (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n + 1) 10)); - - extraGroups.guixbuild = { name = "guixbuild"; }; - }; - - systemd = { - services = { - # Derived from Guix guix-daemon.service.in - # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 - guix-daemon = { - enable = true; - description = "Build daemon for GNU Guix"; - serviceConfig = { - ExecStart = - "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; - }; - wantedBy = [ "multi-user.target" ]; - }; - }; - user.services = { - mpris-proxy = { - enable = true; - description = "Mpris proxy, added to support bluetooth media keys"; - serviceConfig = { - After = [ "network.target" "sound.target" ]; - ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; - WantedBy = [ "default.target" ]; - }; - }; - }; - }; - - system = { - stateVersion = "20.03"; - autoUpgrade = { - enable = true; - dates = "0:10"; - }; - }; - - xdg.portal = { - enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; - }; - - virtualisation.libvirtd.enable = enable-virtualization; - virtualisation.docker.enable = enable-virtualization; -} |
