From 8e55e595c478167d3adc81f5e833cdefe3251c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Sat, 20 Apr 2019 09:08:39 +0200 Subject: [PATCH] mopidy, mail, telegram --- configs/bluetooth.nix | 4 + configs/chromium.nix | 1 + configs/default.nix | 4 +- configs/docker.nix | 2 + configs/haskell.nix | 2 +- configs/hledger.nix | 1 - configs/i3.nix | 8 +- configs/mail.nix | 39 +++++++++ configs/mopidy.nix | 28 +++++++ configs/python.nix | 2 + configs/todoist.nix | 6 +- deploy.nix | 47 +++++------ modules/telegram-bot.nix | 41 ++++++++++ systems/catullus/configuration.nix | 48 +++++++---- systems/catullus/containers.nix | 124 ++++++++++++----------------- 15 files changed, 232 insertions(+), 125 deletions(-) create mode 100644 configs/mail.nix create mode 100644 configs/mopidy.nix create mode 100644 modules/telegram-bot.nix diff --git a/configs/bluetooth.nix b/configs/bluetooth.nix index 35fcf05..d7ede24 100644 --- a/configs/bluetooth.nix +++ b/configs/bluetooth.nix @@ -9,4 +9,8 @@ }; environment.systemPackages = [ pkgs.blueman ]; + + home-manager.users.me = { + services.blueman-applet.enable = true; + }; } diff --git a/configs/chromium.nix b/configs/chromium.nix index 12baa87..3f63354 100644 --- a/configs/chromium.nix +++ b/configs/chromium.nix @@ -7,6 +7,7 @@ "hdokiejnpimakedhajhdlcegeplioahd" # LastPass "jldhpllghnbhlbpcmnajkpdmadaolakh" # Todoist "dbepggeogbaibhgnhhndojpepiihcmeb" # Vimium + "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine ]; }; diff --git a/configs/default.nix b/configs/default.nix index a149af4..0e1e8f0 100644 --- a/configs/default.nix +++ b/configs/default.nix @@ -18,6 +18,8 @@ + # + @@ -77,7 +79,6 @@ nix-git = pkgs.callPackage {}; sncli = pkgs.python3Packages.callPackage {}; spotify-cli-linux = pkgs.python3Packages.callPackage {}; - todoist = pkgs.unstable.callPackage {}; wttr = pkgs.callPackage {}; n = pkgs.callPackage {}; @@ -317,6 +318,7 @@ qrencode tmuxp unstable.zola + unstable.hugo wordnet xsv wttr diff --git a/configs/docker.nix b/configs/docker.nix index 3488fe1..26e7dab 100644 --- a/configs/docker.nix +++ b/configs/docker.nix @@ -1,4 +1,6 @@ +{ pkgs, ... }: { virtualisation.docker.enable = true; users.users.me.extraGroups = [ "docker" ]; + environment.systemPackages = [ pkgs.docker pkgs.docker_compose ]; } diff --git a/configs/haskell.nix b/configs/haskell.nix index 236744e..bba8d11 100644 --- a/configs/haskell.nix +++ b/configs/haskell.nix @@ -25,11 +25,11 @@ stack2nix cabal-install hlint + haskellPackages.brittany (haskellPackages.ghcWithHoogle (import )) ] ++ map haskell.lib.justStaticExecutables [ haskellPackages.ghcid haskellPackages.hakyll - haskellPackages.brittany haskellPackages.hfmt haskellPackages.hasktags haskellPackages.hindent diff --git a/configs/hledger.nix b/configs/hledger.nix index f37d221..4662bc8 100644 --- a/configs/hledger.nix +++ b/configs/hledger.nix @@ -7,7 +7,6 @@ server = { enable = true; user = config.users.users.me; - capabilities = [ "view" ]; }; }; } diff --git a/configs/i3.nix b/configs/i3.nix index 1627982..4cd4ad5 100644 --- a/configs/i3.nix +++ b/configs/i3.nix @@ -13,6 +13,11 @@ in with config.niveum; { windowManager.i3.enable = true; }; + sound.mediaKeys = { + enable = true; + volumeStep = "5%"; + }; + home-manager.users.me.xsession.windowManager.i3 = { enable = true; config = rec { @@ -157,9 +162,6 @@ in with config.niveum; { "${modifier}+w" = "layout tabbed"; "${modifier}+x" = "exec --no-startup-id ${new-workspace}"; "${modifier}+y" = "exec ${applications.browser}"; - "XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5"; - "XF86AudioMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t"; - "XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5"; }; }; }; diff --git a/configs/mail.nix b/configs/mail.nix new file mode 100644 index 0000000..89f35d1 --- /dev/null +++ b/configs/mail.nix @@ -0,0 +1,39 @@ +{ config, pkgs, ... }: +{ + environment.systemPackages = [ + pkgs.notmuch + pkgs.offlineimap + pkgs.msmtp + pkgs.neomutt + ]; + + home-manager.users.me = { + accounts.email.maildirBasePath = "${config.users.users.me.home}/mail"; + accounts.email.accounts.hu-berlin = { + address = "meinhark@hu-berlin.de"; + userName = "meinhark"; + realName = config.niveum.user.fullName; + imap = { + host = "mailbox.cms.hu-berlin.de"; + port = 993; + tls.enable = true; + }; + smtp = { + host = "mailhost.cms.hu-berlin.de"; + port = 25; + tls.enable = true; + }; + msmtp.enable = true; + notmuch.enable = true; + offlineimap = { + enable = true; + postSyncHookCommand = "notmuch new"; + }; + primary = true; + }; + + programs.offlineimap = { + enable = true; + }; + }; +} diff --git a/configs/mopidy.nix b/configs/mopidy.nix new file mode 100644 index 0000000..f9b9fee --- /dev/null +++ b/configs/mopidy.nix @@ -0,0 +1,28 @@ +{ pkgs, ... }: +let secrets = import ; +in { + services.mopidy = { + enable = true; + extensionPackages = [ + pkgs.mopidy-spotify + pkgs.mopidy-iris + pkgs.mopidy-gmusic + pkgs.mopidy-moped + pkgs.mopidy-soundcloud + pkgs.mopidy-youtube + ]; + configuration = '' + [mpd] + hostname = :: + + [spotify] + username = ${secrets.spotify.username} + password = ${secrets.spotify.password} + client_id = ${secrets.spotify.clientId} + client_secret = ${secrets.spotify.clientSecret} + + [soundcloud] + auth_token = ${secrets.soundcloud.authToken} + ''; + }; +} diff --git a/configs/python.nix b/configs/python.nix index 70dc56e..4bb4764 100644 --- a/configs/python.nix +++ b/configs/python.nix @@ -6,6 +6,8 @@ py.black py.python-language-server py.pyls-mypy + py.pyls-black + py.pyls-isort py.flake8 ]) ) diff --git a/configs/todoist.nix b/configs/todoist.nix index 8be3f20..bd60ed3 100644 --- a/configs/todoist.nix +++ b/configs/todoist.nix @@ -1,9 +1,11 @@ { pkgs, ... }: -let secrets = import ; +let + secrets = import ; + todoist = pkgs.unstable.callPackage {}; in { environment.systemPackages = [ (pkgs.unstable.writers.writeDashBin "todoist" '' - ${pkgs.todoist}/bin/todoist --color $@ + ${todoist}/bin/todoist --color $@ '') ]; diff --git a/deploy.nix b/deploy.nix index ccf90e7..15767ec 100644 --- a/deploy.nix +++ b/deploy.nix @@ -10,11 +10,24 @@ let pkgs = import "${krops}/pkgs" {}; importJson = (import {}).lib.importJSON; - source = {path, other ? {}}: lib.evalSource [({ + niveum = path: { nixpkgs.git = { url = https://github.com/NixOS/nixpkgs-channels; ref = (importJson ./nixpkgs.json).rev; }; + system.file = toString path; + lib.file = toString ./lib; + packages.file = toString ./packages; + configs.file = toString ./configs; + dot.file = toString ./dot; + modules.file = toString ./modules; + + nixos-config.symlink = "system/configuration.nix"; + }; + + minimal = path: other: lib.evalSource [(niveum path // other)]; + + regular = path: minimal path (niveum path // { nixos-unstable.git = { url = https://github.com/NixOS/nixpkgs-channels; ref = "nixos-unstable"; @@ -27,41 +40,23 @@ let url = https://cgit.krebsco.de/stockholm; ref = "7e1b197dab13d024ba491c96dc959306324943c0"; }; - system.file = toString path; - lib.file = toString ./lib; - packages.file = toString ./packages; - systems.file = toString ./systems; - configs.file = toString ./configs; - dot.file = toString ./dot; - modules.file = toString ./modules; - - nixos-config.symlink = "system/configuration.nix"; - } // other)]; + }); systems.scardanelli = pkgs.krops.writeDeploy "deploy-scardanelli" { - source = source { - path = ./systems/scardanelli; - other.art.file = ./art; - }; + source = regular ./systems/scardanelli; target = scardanelli-ssh; }; systems.homeros = pkgs.krops.writeDeploy "deploy-homeros" { - source = source { - path = ./systems/homeros; - other.art.file = ./art; - }; + source = regular ./systems/homeros; target = homeros-ssh; }; systems.catullus = pkgs.krops.writeDeploy "deploy-catullus" { - source = source { - path = ./systems/catullus; - other = { - secrets.pass = { - dir = toString ~/.password-store; - name = "catullus"; - }; + source = minimal ./systems/catullus { + secrets.pass = { + dir = toString ~/.password-store; + name = "catullus"; }; }; target = catullus-ssh; diff --git a/modules/telegram-bot.nix b/modules/telegram-bot.nix new file mode 100644 index 0000000..eddfbf5 --- /dev/null +++ b/modules/telegram-bot.nix @@ -0,0 +1,41 @@ +{ lib, config, pkgs, ... }: +with lib; +let + cfg = config.niveum.telegramBots; + + botService = name: bot: nameValuePair "telegram-bot-${name}" { + enable = bot.enable; + startAt = bot.time; + serviceConfig.Type = "oneshot"; + wantedBy = [ "network-online.target" ]; + script = '' + ${pkgs.curl}/bin/curl -s -X POST "https://api.telegram.org/bot${bot.token}/sendMessage" \ + -d chat_id="${bot.chatId}" \ + -d text="$(${bot.command})" ${ + if bot.parseMode == null then "" + else "-d parse_mode=${bot.parseMode}" + } + ''; + }; +in { + options.niveum.telegramBots = mkOption { + type = types.attrsOf (types.submodule { + options = { + enable = mkEnableOption "Telegram bot"; + time = mkOption { type = types.str; }; + token = mkOption { type = types.strMatching "[0-9A-Za-z:-]+"; }; + chatId = mkOption { type = types.strMatching "[0-9]+|@[A-Za-z0-9]+"; }; + command = mkOption { type = types.str; }; + parseMode = mkOption { + type = types.nullOr (types.enum ["HTML" "Markdown"]); + default = null; + }; + }; + }); + default = {}; + }; + + config = { + systemd.services = attrsets.mapAttrs' botService cfg; + }; +} diff --git a/systems/catullus/configuration.nix b/systems/catullus/configuration.nix index c82d202..05b3060 100644 --- a/systems/catullus/configuration.nix +++ b/systems/catullus/configuration.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, lib, ... }: let sshKey = { homeros = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDn13Y6CznabMvKJPIrr/dj1TX4boe8F98yc3FDElJeprQo2RXlDzjg/po9/lHTHaoC5yQUjlRg/AnI4vizYkn2sqJebAeSPahmpS+l0eFnjZgsqds2cCFqSPB6Qc5YEkGRhN4aq/ABz0jdFJLBYOYGxuuXowYxyNrqrItxDR7tF7upG+kVjYiDoP/qFm8C7zv6Zy8aoehNbzf8HlIJd0ITbMr/vUftNsQ8C84QmbZljReHmchPgE8GUfVLTlCORkhndbvNX3jXo+75y7JOIZZ6193FZHM4seg/VSDWYLJtpnhttD1w6qmiLrlimqbJB9ihoXq2eDmQ+4zo6hxQ6pFH6P0xQClJ0hxVWn6hEM3rkMwoMfbq4v54gKJsYxcGdnwjAX6d9DQv/QVjmVZffKWsGGoC7uz7bdmc0akVKi+GLSPOx8sJwXqvyvFStfqLaweVcuikUqQ72JLK7pZyliA7na6KuQ1PE3LTpfSr0lbBJ73xtS2rU1nF/Oe5zwA4LX5s/QeDVmS86D8acUrSCO62pBB3Yv8go0KR4mEvfxLiUWV6gR2uTeIPXvo4ouYFZqyABAGybjUATlGCXJaeHd/y/VWkpIB8ocqNESlRMCEe4TrYjw91AEmYBL6kWIeop3dyhovm3dTB3fQvC97kbL16wuXBrOcN4lEc+56ShhmvdQ== kieran.meinhardt@gmail.com"; @@ -9,8 +9,37 @@ in { + + { + sound.enable = true; + + sound.extraConfig = '' + defaults.ctl.card 1 + defaults.pcm.card 1 + ''; + + hardware.pulseaudio = { + enable = true; + systemWide = true; + package = pkgs.pulseaudioFull; + }; + + users.users.root.extraGroups = [ "audio" ]; + } + { + documentation.enable = false; + documentation.doc.enable = false; + documentation.man.enable = false; + documentation.info.enable = false; + fonts.fontconfig.enable = false; + } ]; + nixpkgs.config.packageOverrides = pkgs: { + autorenkalender = pkgs.callPackage {}; + literature-quote = pkgs.callPackage {}; + }; + boot.loader.grub.enable = false; boot.loader.generic-extlinux-compatible.enable = true; @@ -26,26 +55,11 @@ in { environment.variables.TERM = "linux"; environment.variables.HTOPRC = toString ; - documentation.enable = false; - documentation.doc.enable = false; - documentation.man.enable = false; - documentation.info.enable = false; - fonts.fontconfig.enable = false; - programs.tmux.enable = true; - environment.systemPackages = with pkgs; [ - git - vim - htop - ]; + environment.systemPackages = with pkgs; [ git vim htop ]; users.mutableUsers = false; - services.syncthing = { - enable = true; - openDefaultPorts = true; - }; - services.openssh.enable = true; users.users.root.openssh.authorizedKeys.keys = [ sshKey.homeros diff --git a/systems/catullus/containers.nix b/systems/catullus/containers.nix index 5fe2a3d..253e59c 100644 --- a/systems/catullus/containers.nix +++ b/systems/catullus/containers.nix @@ -4,81 +4,57 @@ let telegram-betacode = pkgs.python3Packages.callPackage {}; # telegram-horoscope = pkgs.python3Packages.callPackage {}; telegram-proverb = pkgs.python3Packages.callPackage {}; - autorenkalender = pkgs.callPackage {}; - literature-quote = pkgs.callPackage {}; in { - # containers.telegram-bots = { - # autoStart = true; - # config = { - systemd.services.quotebot = { - enable = true; - startAt = "08:00"; - serviceConfig.Type = "oneshot"; - wantedBy = [ "multi-user.target" ]; - environment = { - TELEGRAM_AUTORENKALENDER_CHAT = "18980945"; - TELEGRAM_AUTORENKALENDER_TOKEN = lib.strings.removeSuffix "\n" (builtins.readFile ); - }; - script = '' - TELEGRAM_ENDPOINT="https://api.telegram.org/bot$TELEGRAM_AUTORENKALENDER_TOKEN" - ${pkgs.curl}/bin/curl -s \ - -X POST "$TELEGRAM_ENDPOINT/sendMessage" \ - -d chat_id="$TELEGRAM_AUTORENKALENDER_CHAT" \ - -d parse_mode=Markdown \ - -d text="$(${literature-quote}/bin/literature-quote)" - ''; - }; + niveum.telegramBots.quotebot = { + enable = true; + time = "08:00"; + token = lib.strings.removeSuffix "\n" (builtins.readFile ); + chatId = "18980945"; + command = "${pkgs.literature-quote}/bin/literature-quote"; + parseMode = "Markdown"; + }; - systemd.services.autorenbot = { - enable = true; - startAt = "07:00"; - serviceConfig.Type = "oneshot"; - wantedBy = [ "multi-user.target" ]; - environment = { - TELEGRAM_AUTORENKALENDER_CHAT = "@autorenkalender"; - TELEGRAM_AUTORENKALENDER_TOKEN = lib.strings.removeSuffix "\n" (builtins.readFile ); - }; - script = '' - TELEGRAM_ENDPOINT="https://api.telegram.org/bot$TELEGRAM_AUTORENKALENDER_TOKEN" - ${pkgs.curl}/bin/curl -s \ - -X POST "$TELEGRAM_ENDPOINT/sendMessage" \ - -d chat_id="$TELEGRAM_AUTORENKALENDER_CHAT" \ - -d text="$(${autorenkalender}/bin/autorenkalender)" - ''; - }; - systemd.services.telegram-reverse = { - wantedBy = [ "multi-user.target" ]; - description = "Telegram bot for reversing things"; - environment.TELEGRAM_REVERSE_TOKEN = builtins.readFile ; - enable = true; - script = ''${telegram-reverse}/bin/telegram-reverse''; - serviceConfig.Restart = "always"; - }; - systemd.services.telegram-betacode = { - wantedBy = [ "multi-user.target" ]; - description = "Telegram bot for converting Ancient Greek betacode into unicode"; - environment.TELEGRAM_BETACODE_TOKEN = builtins.readFile ; - enable = true; - script = ''${telegram-betacode}/bin/telegram-betacode''; - serviceConfig.Restart = "always"; - }; - systemd.services.telegram-proverb = { - wantedBy = [ "multi-user.target" ]; - description = "Telegram bot for generating inspiring but useless proverbs"; - environment.TELEGRAM_PROVERB_TOKEN = builtins.readFile ; - enable = true; - script = ''${telegram-proverb}/bin/proverb_bot.py''; - serviceConfig.Restart = "always"; - }; - # systemd.services.telegram-horoscope = { - # wantedBy = [ "multi-user.target" ]; - # description = "Telegram bot for generating horoscope charts"; - # environment.TELEGRAM_HOROSCOPE_TOKEN = builtins.readFile ; - # environment.GOOGLE_MAPS_API_KEY = builtins.readFile ; - # enable = true; - # script = ''${telegram-horoscope}/bin/telegram-horoscope''; - # serviceConfig.Restart = "always"; - # }; - # }; + niveum.telegramBots.autorenkalender = { + enable = true; + time = "07:00"; + token = lib.strings.removeSuffix "\n" (builtins.readFile ); + chatId = "@autorenkalender"; + command = "${pkgs.autorenkalender}/bin/autorenkalender"; + }; + + systemd.services.telegram-reverse = { + wantedBy = [ "multi-user.target" ]; + description = "Telegram bot for reversing things"; + environment.TELEGRAM_REVERSE_TOKEN = builtins.readFile ; + enable = true; + script = ''${telegram-reverse}/bin/telegram-reverse''; + serviceConfig.Restart = "always"; + }; + + systemd.services.telegram-betacode = { + wantedBy = [ "multi-user.target" ]; + description = "Telegram bot for converting Ancient Greek betacode into unicode"; + environment.TELEGRAM_BETACODE_TOKEN = builtins.readFile ; + enable = true; + script = ''${telegram-betacode}/bin/telegram-betacode''; + serviceConfig.Restart = "always"; + }; + + systemd.services.telegram-proverb = { + wantedBy = [ "multi-user.target" ]; + description = "Telegram bot for generating inspiring but useless proverbs"; + environment.TELEGRAM_PROVERB_TOKEN = builtins.readFile ; + enable = true; + script = ''${telegram-proverb}/bin/proverb_bot.py''; + serviceConfig.Restart = "always"; + }; + # systemd.services.telegram-horoscope = { + # wantedBy = [ "multi-user.target" ]; + # description = "Telegram bot for generating horoscope charts"; + # environment.TELEGRAM_HOROSCOPE_TOKEN = builtins.readFile ; + # environment.GOOGLE_MAPS_API_KEY = builtins.readFile ; + # enable = true; + # script = ''${telegram-horoscope}/bin/telegram-horoscope''; + # serviceConfig.Restart = "always"; # }; }