diff --git a/ci.nix b/ci.nix new file mode 100644 index 000000000..6d2378759 --- /dev/null +++ b/ci.nix @@ -0,0 +1,21 @@ +# usage: nix-instantiate --eval --strict --json ./ci.nix +with import ./lib; +let + pkgs = import { overlays = [ (import ./submodules/nix-writers/pkgs) ]; }; + system = + import { + modules = [{ + imports = [ + ./krebs + ./krebs/2configs + ]; + }]; + } + ; + + ci-systems = filterAttrs (_: v: v.ci) system.config.krebs.hosts; + + build = host: owner: + ((import (toString ./. + "/${owner}/krops.nix") { name = host; }).test {target = "${getEnv "HOME"}/stockholm-build";}); + +in mapAttrs (n: h: build n h.owner.name) ci-systems diff --git a/jeschli/2configs/git.nix b/jeschli/2configs/git.nix index 77602e0f1..a26022789 100644 --- a/jeschli/2configs/git.nix +++ b/jeschli/2configs/git.nix @@ -35,6 +35,9 @@ let krebs-page = { cgit.desc = "Die Krebs Page"; }; + xmonad-stockholm = { + cgit.desc = "XMonad Stockholm"; + }; }; make-public-repo = name: { cgit ? {}, ... }: { @@ -42,11 +45,13 @@ let public = true; hooks = { post-receive = pkgs.git-hooks.irc-announce { - nick = config.krebs.build.host.name; channel = "#xxx"; + nick = config.krebs.build.host.name; + refs = [ + "refs/heads/master" + ]; server = "irc.r"; - verbose = true; - branches = [ "master" ]; + verbose = true; }; }; }; diff --git a/jeschli/krops.nix b/jeschli/krops.nix index e55f207d3..34f3aaa53 100644 --- a/jeschli/krops.nix +++ b/jeschli/krops.nix @@ -27,14 +27,9 @@ in { target = "root@${name}/var/src"; }; - # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test) - test = pkgs.krops.writeTest "${name}-test" { + # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) + test = { target }: pkgs.krops.writeTest "${name}-test" { + inherit target; source = source { test = true; }; - target = "${lib.getEnv "HOME"}/tmp/${name}-stockholm-test"; - }; - - ci = pkgs.krops.writeTest "${name}-test" { - source = source { test = true; }; - target = "${lib.getEnv "HOME"}/stockholm-build"; }; } diff --git a/krebs/2configs/buildbot-stockholm.nix b/krebs/2configs/buildbot-stockholm.nix index 13d4c6729..0aa9288ec 100644 --- a/krebs/2configs/buildbot-stockholm.nix +++ b/krebs/2configs/buildbot-stockholm.nix @@ -4,11 +4,34 @@ let hostname = config.networking.hostName; + sourceRepos = [ + "http://cgit.enklave.r/stockholm" + "http://cgit.gum.r/stockholm" + "http://cgit.hotdog.r/stockholm" + "http://cgit.ni.r/stockholm" + "http://cgit.prism.r/stockholm" + ]; + + # usage: build USER HOST + # This executable is meant to be run with as working directory. + # USER is expected to be a subdirectory of the working directory. build = pkgs.writeDash "build" '' - set -eu - export USER="$1" - export SYSTEM="$2" - $(nix-build $USER/krops.nix --no-out-link --argstr name "$SYSTEM" --argstr target "$HOME/stockholm-build" -A ci) + set -efu + + user=$1 + host=$2 + + result=$(nix-build \ + --argstr name "$host" \ + --argstr target "$HOME"/stockholm-build \ + --attr test \ + --no-build-output \ + --no-out-link \ + --show-trace \ + "$user"/krops.nix \ + ) + + exec "$result" ''; @@ -31,17 +54,16 @@ in slaves = { testslave = "lasspass"; }; - change_source.stockholm = '' - stockholm_repo = 'http://cgit.hotdog.r/stockholm' + change_source.stockholm = concatMapStrings (repo: '' cs.append( changes.GitPoller( - stockholm_repo, - workdir='stockholm-poller', branches=True, + "${repo}", + workdir='stockholm${elemAt(splitString "." repo) 1}', branches=True, project='stockholm', pollinterval=10 ) ) - ''; + '') sourceRepos; scheduler = { auto-scheduler = '' sched.append( @@ -69,7 +91,7 @@ in builder_pre = '' # prepare grab_repo step for stockholm grab_repo = steps.Git( - repourl=stockholm_repo, + repourl=util.Property('repository', 'http://cgit.hotdog.r/stockholm'), mode='full', submodules=True, ) @@ -176,6 +198,6 @@ in masterhost = "localhost"; username = "testslave"; password = "lasspass"; - packages = with pkgs; [ gnumake jq nix populate ]; + packages = with pkgs; [ gnumake jq nix populate gnutar lzma gzip ]; }; } diff --git a/krebs/2configs/reaktor-krebs.nix b/krebs/2configs/reaktor-krebs.nix index 2e63f1385..ba3715161 100644 --- a/krebs/2configs/reaktor-krebs.nix +++ b/krebs/2configs/reaktor-krebs.nix @@ -15,6 +15,7 @@ with import ; sed-plugin task-add task-delete + task-done task-list ] ++ (attrValues (todo "agenda")) diff --git a/krebs/2configs/reaktor-retiolum.nix b/krebs/2configs/reaktor-retiolum.nix index d5f1851e3..90573ca1c 100644 --- a/krebs/2configs/reaktor-retiolum.nix +++ b/krebs/2configs/reaktor-retiolum.nix @@ -12,6 +12,7 @@ with import ; sed-plugin task-add task-delete + task-done task-list ] ++ (attrValues (todo "agenda")) diff --git a/krebs/2configs/repo-sync.nix b/krebs/2configs/repo-sync.nix index 813dc154b..392e6bed3 100644 --- a/krebs/2configs/repo-sync.nix +++ b/krebs/2configs/repo-sync.nix @@ -20,11 +20,15 @@ let cgit.section = section; hooks = mkDefault { post-receive = pkgs.git-hooks.irc-announce { - nick = config.networking.hostName; - verbose = false; channel = "#xxx"; + refs = [ + "refs/heads/master" + "refs/heads/newest" + "refs/tags/*" + ]; + nick = config.networking.hostName; server = "irc.r"; - branches = [ "master" "newest" ]; + verbose = false; }; }; }; @@ -139,6 +143,7 @@ in { (sync-retiolum { name = "cholerab"; desc = "krebs thesauron & enterprise-patterns"; section = "documentation"; }) + (sync-retiolum { name = "buildbot-classic"; desc = "fork of buildbot"; section = "software"; }) (sync-retiolum { name = "disko"; desc = "take a description of your disk layout and produce a format script"; section = "software"; }) (sync-retiolum { name = "news"; desc = "take a rss feed and a timeout and print it to stdout"; section = "software"; }) (sync-retiolum { name = "krops"; desc = "krebs ops"; section = "software"; }) diff --git a/krebs/3modules/ci.nix b/krebs/3modules/ci.nix new file mode 100644 index 000000000..cf82401d3 --- /dev/null +++ b/krebs/3modules/ci.nix @@ -0,0 +1,162 @@ +{ config, lib, pkgs, ... }: + +with import ; + +let + cfg = config.krebs.ci; + + out = { + options.krebs.ci = api; + config = lib.mkIf cfg.enable imp; + }; + + api = { + enable = mkEnableOption "Enable krebs ci service"; + repos = mkOption { + type = types.attrsOf (types.submodule ({ config, ...}: { + options = { + urls = mkOption { + type = types.listOf types.str; + default = [ "git@localhost:${config._module.args.name}" ]; + }; + }; + })); + }; + }; + + hostname = config.networking.hostName; + getJobs = pkgs.writeDash "get_jobs" '' + nix-build --no-out-link ./ci.nix 2>&1 > /dev/null + nix-instantiate --eval --strict --json ./ci.nix + ''; + + imp = { + krebs.buildbot.master = { + slaves = { + testslave = "lasspass"; + }; + + change_source = mapAttrs' (name: repo: + nameValuePair name (concatMapStrings (url: '' + cs.append( + changes.GitPoller( + "${url}", + workdir='${name}-${elemAt(splitString "." url) 1}', branches=True, + project='${name}', + pollinterval=10 + ) + ) + '') repo.urls) + ) cfg.repos; + + scheduler = mapAttrs' (name: repo: + nameValuePair name '' + sched.append( + schedulers.SingleBranchScheduler( + change_filter=util.ChangeFilter(branch_re=".*"), + treeStableTimer=60, + name="build-all-branches", + builderNames=[ + "${name}", + ] + ) + ) + sched.append( + schedulers.ForceScheduler( + name="${name}", + builderNames=[ + "${name}", + ] + ) + ) + '' + ) cfg.repos; + builder_pre = '' + from buildbot import interfaces + from buildbot.steps.shell import ShellCommand + + class StepToStartMoreSteps(ShellCommand): + def __init__(self, **kwargs): + ShellCommand.__init__(self, **kwargs) + + def addBuildSteps(self, steps_factories): + for sf in steps_factories: + step = interfaces.IBuildStepFactory(sf).buildStep() + step.setBuild(self.build) + step.setBuildSlave(self.build.slavebuilder.slave) + step_status = self.build.build_status.addStepWithName(step.name) + step.setStepStatus(step_status) + self.build.steps.append(step) + + def start(self): + props = self.build.getProperties() + new_steps = json.loads(props.getProperty('steps_json')) + for new_step in new_steps: + self.addBuildSteps([steps.ShellCommand( + name=str(new_step), + command=[ + new_steps[new_step] + ], + timeout=90001, + workdir='build', # TODO figure out why we need this? + )]) + + ShellCommand.start(self) + + ''; + + builder = mapAttrs' (name: repo: + nameValuePair name '' + f_${name} = util.BuildFactory() + f_${name}.addStep(steps.Git( + repourl=util.Property('repository', '${head repo.urls}'), + mode='full', + submodules=True, + )) + + f_${name}.addStep(steps.SetPropertyFromCommand( + env={ + "NIX_REMOTE": "daemon", + "NIX_PATH": "secrets=/var/src/stockholm/null:/var/src", + }, + name="get_steps", + command=["${getJobs}"], + property="steps_json" + )) + f_${name}.addStep(StepToStartMoreSteps(command=["echo"])) # TODO remove dummy command from here + + bu.append( + util.BuilderConfig( + name="${name}", + slavenames=slavenames, + factory=f_${name} + ) + ) + '' + ) cfg.repos; + + enable = true; + web.enable = true; + irc = { + enable = true; + nick = "build|${hostname}"; + server = "irc.r"; + channels = [ "noise" ]; + allowForce = true; + }; + extraConfig = '' + c['buildbotURL'] = "http://build.${hostname}.r/" + ''; + }; + + krebs.buildbot.slave = { + enable = true; + masterhost = "localhost"; + username = "testslave"; + password = "lasspass"; + packages = with pkgs; [ gnumake jq nix populate gnutar lzma gzip ]; + }; + }; + +in out + diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix index 833349769..82ae3b02e 100644 --- a/krebs/3modules/default.nix +++ b/krebs/3modules/default.nix @@ -13,6 +13,7 @@ let ./buildbot/master.nix ./buildbot/slave.nix ./build.nix + ./ci.nix ./current.nix ./exim.nix ./exim-retiolum.nix @@ -109,7 +110,6 @@ let { krebs = import ./krebs { inherit config; }; } { krebs = import ./lass { inherit config; }; } { krebs = import ./makefu { inherit config; }; } - { krebs = import ./mv { inherit config; }; } { krebs = import ./nin { inherit config; }; } { krebs = import ./tv { inherit config; }; } { diff --git a/krebs/3modules/konsens.nix b/krebs/3modules/konsens.nix index 47316d5d6..74895a971 100644 --- a/krebs/3modules/konsens.nix +++ b/krebs/3modules/konsens.nix @@ -68,7 +68,7 @@ let fi cd ${name} git fetch origin - git push origin $(git merge-base ${concatMapStringsSep " " (branch: "origin/${branch}") repo.branchesToCheck}):refs/heads/master + git push origin $(git merge-base --octopus ${concatMapStringsSep " " (branch: "origin/${branch}") repo.branchesToCheck}):refs/heads/master ''; WorkingDirectory = /var/lib/konsens; User = "konsens"; diff --git a/krebs/3modules/mv/default.nix b/krebs/3modules/mv/default.nix deleted file mode 100644 index c8d138a44..000000000 --- a/krebs/3modules/mv/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, ... }: - -with import ; - -{ - hosts = mapAttrs (_: setAttr "owner" config.krebs.users.mv) { - stro = { - ci = true; - cores = 4; - nets = { - retiolum = { - ip4.addr = "10.243.111.111"; - ip6.addr = "42:0:0:0:0:0:111:111"; - aliases = [ - "stro.r" - "cgit.stro.r" - ]; - tinc.pubkey = '' - -----BEGIN RSA PUBLIC KEY----- - MIIBCgKCAQEA0vIzLyoetOyi3R7qOh3gjSvUVjPEdqCvd0NEevDCIhhFy0nIbZ/b - vnuk3EUeTb6e384J8fKB4agig0JeR3JjtDvtjy5g9Cdy2nrU71w8wqU0etmv2PTb - FjbCFfeBXn0N3U7gXwjZGCvjAXa1a4jGb4R2iYBYGG3aY4reCN8B8Ah81h+S0oLg - ZJJfaBmWM5vNRFEI5X4CLaVnwtsoZuXIjYStgNn/9Mg/Y6NQS0H0H+HFeyhigAqG - oYGqNar/2QqPU176V/FwrD30F3qJV1uyzuPta7hmdfOxqYjZ/jqdPSRYtlunYYcq - XbH5oYmzO9NEeVWzjdac/DiV2OP8HufoYwIDAQAB - -----END RSA PUBLIC KEY----- - ''; - }; - }; - ssh.privkey.path = ; - ssh.pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM+7Qa51l0NSkBiaK2s8vQEoeObV3UPZyEzMxfUK/ZAO root@stro"; - }; - }; - users = { - mv = { - mail = "mv@stro.r"; - pubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDfMqkfXsGRaXJ86Pi5svAx4508ij5kc4cMLGwr1CLvFI5G7EHggiHMZYooibmkZimBF1PvLM1lOdoptJ4nSmc3UGuQaeV9BpZ1dNXexc8wOmVPKzAHYZG/2upcV/xVZQ9lk3UOmDym6fDUXThMx4nXdhOjScgWpKp7+0N3JRCf2UHusZjWFGlhE9l4irLFHCwlZeBQ16DNF4fc03vsfZBB1ZrGGZlaVpkcY+FTC3sm8R0iF5QGaq8PgltJoCNnp3L1g3Yn7Elva7kCHjZfJC1pu5icV8vZMNptPn1b10gPsNwb302FCjvZohzRcMo39L2gwdNWQmflYfYk+NPY9EgqkLtSvZJywYu8oTVLeYBAp0ZGzJR4+uIH9at/WQF499HFMxpF4uwYiQweUcPiHrrOqI5zLQoOvqh9Jv0UMsnFynNrszbCTgwzeW8bcvv8ILcjE9of8GXRCrlIMvt7Z9q8xrb5j1RhKscvusyyNOAL+HMZl6jgSxUBDtzRqPZ62QHJsBEBdRXdJRQLGeHNW9kGPrh/tiKGucuT3/HZC+2Rcemxt3RVT60+lHkghrMLi0/VOWBUKL9J94UK5xIE4Gb3RTW9DcNK53U4ql+N4ORSSEuhk3Rqzx3Bzv7AXpLKQCFKdB7tjxzGN7sCQM3PBUUo6Tk0VG2cIKOjzTRnDJlb7Q== mv@stro"; - }; - }; -} diff --git a/krebs/5pkgs/simple/Reaktor/plugins.nix b/krebs/5pkgs/simple/Reaktor/plugins.nix index c6e601475..700f9b40d 100644 --- a/krebs/5pkgs/simple/Reaktor/plugins.nix +++ b/krebs/5pkgs/simple/Reaktor/plugins.nix @@ -160,7 +160,7 @@ rec { task-list = buildSimpleReaktorPlugin "task-list" { pattern = "^task-list"; script = pkgs.writeDash "task-list" '' - ${pkgs.taskwarrior}/bin/task rc:${taskrcFile} list + ${pkgs.taskwarrior}/bin/task rc:${taskrcFile} minimal ''; }; @@ -171,6 +171,13 @@ rec { ''; }; + task-done = buildSimpleReaktorPlugin "task-done" { + pattern = "^task-done: (?P.*)$$"; + script = pkgs.writeDash "task-done" '' + ${pkgs.taskwarrior}/bin/task rc:${taskrcFile} done "$*" + ''; + }; + todo = name: { add = buildSimpleReaktorPlugin "${name}-add" { pattern = "^${name}-add: (?P.*)$$"; diff --git a/krebs/5pkgs/simple/buildbot-classic/default.nix b/krebs/5pkgs/simple/buildbot-classic/default.nix index e6bafbd25..4fae6256d 100644 --- a/krebs/5pkgs/simple/buildbot-classic/default.nix +++ b/krebs/5pkgs/simple/buildbot-classic/default.nix @@ -2,7 +2,7 @@ python2Packages.buildPythonApplication rec { name = "buildbot-classic-${version}"; - version = "0.8.16"; + version = "0.8.17"; namePrefix = ""; patches = []; @@ -10,7 +10,7 @@ python2Packages.buildPythonApplication rec { owner = "krebs"; repo = "buildbot-classic"; rev = version; - sha256 = "0g686n6m0cjfyympl0ksansllx503gby3hx9gmc8hiyx6x5fkjha"; + sha256 = "0yn0n37rs2bhz9q0simnvyzz5sfrpqhbdm6pdj6qk7sab4y6xbq8"; }; postUnpack = "sourceRoot=\${sourceRoot}/master"; diff --git a/krebs/5pkgs/simple/git-hooks/default.nix b/krebs/5pkgs/simple/git-hooks/default.nix index 1930c7f14..0a2c84410 100644 --- a/krebs/5pkgs/simple/git-hooks/default.nix +++ b/krebs/5pkgs/simple/git-hooks/default.nix @@ -6,11 +6,11 @@ with import ; # TODO irc-announce should return a derivation # but it cannot because krebs.git.repos.*.hooks :: attrsOf str irc-announce = - { branches ? [] - , cgit_endpoint ? "http://cgit.${nick}.r" + { cgit_endpoint ? "http://cgit.${nick}.r" , channel , nick , port ? 6667 + , refs ? [] , server , verbose ? false }: /* sh */ '' @@ -57,14 +57,15 @@ with import ; receive_mode=non-fast-forward fi - h=$(echo $ref | sed 's:^refs/heads/::') - - ${optionalString (branches != []) '' - if ! (echo "$h" | grep -qE "${concatStringsSep "|" branches}"); then - echo "we are not serving this branch: $h" + ${optionalString (refs != []) '' + if ! { echo "$ref" | grep -qE "${concatStringsSep "|" refs}"; }; then + echo "we are not announcing this ref: $h" exit 0 fi ''} + + h=$(echo $ref | sed 's:^refs/heads/::') + # empty_tree=$(git hash-object -t tree /dev/null) empty_tree=4b825dc6 diff --git a/krebs/5pkgs/simple/krebspage/default.nix b/krebs/5pkgs/simple/krebspage/default.nix new file mode 100644 index 000000000..f9a446f43 --- /dev/null +++ b/krebs/5pkgs/simple/krebspage/default.nix @@ -0,0 +1,6 @@ +{ fetchgit }: +fetchgit { + url = "https://cgit.lassul.us/krebspage"; + rev = "8711780cef004e19a273a5149677869751cd06dc"; + sha256 = "0131vqrkcw140d7j94bvajkhlwi99kpikb8sy2bi1hgh8ziqplsm"; +} diff --git a/krebs/krops.nix b/krebs/krops.nix index c71e60571..5378d6fb0 100644 --- a/krebs/krops.nix +++ b/krebs/krops.nix @@ -55,14 +55,9 @@ target = "root@${name}/var/src"; }; - # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test) - test = pkgs.krops.writeTest "${name}-test" { + # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) + test = { target }: pkgs.krops.writeTest "${name}-test" { + inherit target; source = source { test = true; }; - target = "${lib.getEnv "HOME"}/tmp/${name}-krops-test-src"; - }; - - ci = pkgs.krops.writeTest "${name}-test" { - source = source { test = true; }; - target = "${lib.getEnv "HOME"}/stockholm-build"; }; } diff --git a/lass/1systems/mors/config.nix b/lass/1systems/mors/config.nix index 90e04cad1..69954a3e9 100644 --- a/lass/1systems/mors/config.nix +++ b/lass/1systems/mors/config.nix @@ -21,7 +21,6 @@ with import ; - @@ -40,6 +39,9 @@ with import ; { predicate = "-p tcp --dport 11100"; target = "ACCEPT"; } #chromecast { predicate = "-p udp -m multiport --sports 32768:61000 -m multiport --dports 32768:61000"; target = "ACCEPT"; } + #quake3 + { predicate = "-p tcp --dport 27950:27965"; target = "ACCEPT"; } + { predicate = "-p udp --dport 27950:27965"; target = "ACCEPT"; } ]; } { @@ -74,6 +76,7 @@ with import ; { environment.systemPackages = [ pkgs.ovh-zone + pkgs.bank ]; } { diff --git a/lass/1systems/prism/config.nix b/lass/1systems/prism/config.nix index 0f20d1c4e..f83721070 100644 --- a/lass/1systems/prism/config.nix +++ b/lass/1systems/prism/config.nix @@ -133,7 +133,6 @@ with import ; - diff --git a/lass/2configs/exim-smarthost.nix b/lass/2configs/exim-smarthost.nix index 191e25831..846000a3a 100644 --- a/lass/2configs/exim-smarthost.nix +++ b/lass/2configs/exim-smarthost.nix @@ -87,6 +87,8 @@ with import ; { from = "hackbeach@lassul.us"; to = lass.mail; } { from = "transferwise@lassul.us"; to = lass.mail; } { from = "cis@lassul.us"; to = lass.mail; } + { from = "afra@lassul.us"; to = lass.mail; } + { from = "ksp@lassul.us"; to = lass.mail; } ]; system-aliases = [ { from = "mailer-daemon"; to = "postmaster"; } diff --git a/lass/2configs/git.nix b/lass/2configs/git.nix index 829e62269..300637ff8 100644 --- a/lass/2configs/git.nix +++ b/lass/2configs/git.nix @@ -23,6 +23,10 @@ let ]; }; + cgit-clear-cache = pkgs.cgit-clear-cache.override { + inherit (config.krebs.git.cgit.settings) cache-root; + }; + repos = public-repos // optionalAttrs config.krebs.build.host.secure restricted-repos; @@ -30,6 +34,10 @@ let rules = concatMap make-rules (attrValues repos); public-repos = mapAttrs make-public-repo { + buildbot-classic = { + cgit.desc = "fork of buildbot"; + cgit.section = "software"; + }; cholerab = { cgit.desc = "krebs thesauron & enterprise-patterns"; cgit.section = "documentation"; @@ -38,6 +46,10 @@ let cgit.desc = "take a description of your disk layout and produce a format script"; cgit.section = "software"; }; + krebspage = { + cgit.desc = "homepage of krebs"; + cgit.section = "configuration"; + }; news = { cgit.desc = "take a rss feed and a timeout and print it to stdout"; cgit.section = "software"; @@ -96,15 +108,20 @@ let inherit cgit collaborators name; public = true; hooks = { - post-receive = pkgs.git-hooks.irc-announce { - # TODO make nick = config.krebs.build.host.name the default - nick = config.krebs.build.host.name; - channel = "#xxx"; - server = "irc.r"; - verbose = config.krebs.build.host.name == "prism"; - # TODO define branches in some kind of option per repo - branches = [ "master" ]; - }; + post-receive = '' + ${pkgs.git-hooks.irc-announce { + # TODO make nick = config.krebs.build.host.name the default + nick = config.krebs.build.host.name; + channel = "#xxx"; + # TODO define refs in some kind of option per repo + refs = [ + "refs/heads/master" + ]; + server = "irc.r"; + verbose = config.krebs.build.host.name == "prism"; + }} + ${cgit-clear-cache}/bin/cgit-clear-cache + ''; }; }; @@ -116,16 +133,22 @@ let make-restricted-repo = name: { admins ? [], collaborators ? [], announce ? false, hooks ? {}, ... }: { inherit admins collaborators name; public = false; - hooks = optionalAttrs announce { - post-receive = pkgs.git-hooks.irc-announce { - # TODO make nick = config.krebs.build.host.name the default - nick = config.krebs.build.host.name; - channel = "#xxx"; - server = "irc.r"; - verbose = false; - # TODO define branches in some kind of option per repo - branches = [ "master" "staging*" ]; - }; + hooks = { + post-receive = '' + ${optionalString announce (pkgs.git-hooks.irc-announce { + # TODO make nick = config.krebs.build.host.name the default + nick = config.krebs.build.host.name; + channel = "#xxx"; + # TODO define refs in some kind of option per repo + refs = [ + "refs/heads/master" + "refs/heads/staging*" + ]; + server = "irc.r"; + verbose = false; + })} + ${cgit-clear-cache}/bin/cgit-clear-cache + ''; } // hooks; }; @@ -133,7 +156,7 @@ let with git // config.krebs.users; repo: singleton { - user = [ lass-mors lass-shodan lass-icarus lass-blue ]; + user = [ lass lass-mors lass-shodan lass-icarus lass-blue ]; repo = [ repo ]; perm = push "refs/*" [ non-fast-forward create delete merge ]; } ++ diff --git a/lass/2configs/mail.nix b/lass/2configs/mail.nix index 2bb51b50a..9246abfed 100644 --- a/lass/2configs/mail.nix +++ b/lass/2configs/mail.nix @@ -176,6 +176,11 @@ let # top index bar in email view set pager_index_lines=7 + # top_index_bar toggle + macro pager ,@1 " set pager_index_lines=0; macro pager ] ,@2 'Toggle indexbar" + macro pager ,@2 " set pager_index_lines=3; macro pager ] ,@3 'Toggle indexbar" + macro pager ,@3 " set pager_index_lines=7; macro pager ] ,@1 'Toggle indexbar" + macro pager ] ,@1 'Toggle indexbar # sidebar set sidebar_width = 20 @@ -186,9 +191,9 @@ let bind index sidebar-next # got to next folder in sidebar bind index sidebar-open # open selected folder from sidebar # sidebar toggle - macro index ,@) " set sidebar_visible=no; macro index ~ ,@( 'Toggle sidebar'" - macro index ,@( " set sidebar_visible=yes; macro index ~ ,@) 'Toggle sidebar'" - macro index ~ ,@( 'Toggle sidebar' # toggle the sidebar + macro index,pager ,@) " set sidebar_visible=no; macro index,pager [ ,@( 'Toggle sidebar'" + macro index,pager ,@( " set sidebar_visible=yes; macro index,pager [ ,@) 'Toggle sidebar'" + macro index,pager [ ,@( 'Toggle sidebar' # toggle the sidebar ''; mutt = pkgs.symlinkJoin { diff --git a/lass/2configs/reaktor-coders.nix b/lass/2configs/reaktor-coders.nix index 86877df7a..9365582b8 100644 --- a/lass/2configs/reaktor-coders.nix +++ b/lass/2configs/reaktor-coders.nix @@ -106,6 +106,12 @@ with import ; exec echo '¯\_(ツ)_/¯' ''; }) + (buildSimpleReaktorPlugin "flip" { + pattern = "^!flip$"; + script = pkgs.writeDash "shrug" '' + exec echo '(╯°□°)╯ ┻━┻' + ''; + }) ]; }; } diff --git a/lass/2configs/repo-sync.nix b/lass/2configs/repo-sync.nix deleted file mode 100644 index 6a07172fe..000000000 --- a/lass/2configs/repo-sync.nix +++ /dev/null @@ -1,142 +0,0 @@ -{ config, lib, pkgs, ... }: - -with import ; - -let - mirror = "git@${config.networking.hostName}:"; - - defineRepo = name: announce: let - repo = { - public = true; - name = mkDefault "${name}"; - cgit.desc = mkDefault "mirror for ${name}"; - cgit.section = mkDefault "mirror"; - hooks = mkIf announce (mkDefault { - post-receive = pkgs.git-hooks.irc-announce { - nick = config.networking.hostName; - verbose = false; - channel = "#xxx"; - server = "irc.r"; - branches = [ "newest" ]; - }; - }); - }; - in { - rules = with git; [ - { - user = with config.krebs.users; [ - config.krebs.users."${config.networking.hostName}-repo-sync" - lass - lass-mors - lass-shodan - ]; - repo = [ repo ]; - perm = push ''refs/*'' [ non-fast-forward create delete merge ]; - } - { - user = attrValues config.krebs.users; - repo = [ repo ]; - perm = fetch; - } - ]; - repos."${name}" = repo; - }; - - sync-retiolum = name: - { - krebs.repo-sync.repos.${name} = { - branches = { - makefu = { - origin.url = "http://cgit.gum/${name}"; - mirror.url = "${mirror}${name}"; - }; - tv = { - origin.url = "http://cgit.ni.r/${name}"; - mirror.url = "${mirror}${name}"; - }; - nin = { - origin.url = "http://cgit.onondaga.r/${name}"; - mirror.url = "${mirror}${name}"; - }; - lassulus = { - origin.url = "http://cgit.lassul.us/${name}"; - mirror.url = "${mirror}${name}"; - }; - makefu-staging = { - origin.url = "http://cgit.gum/${name}"; - origin.ref = "heads/staging"; - mirror.url = "${mirror}${name}"; - }; - tv-staging = { - origin.url = "http://cgit.ni.r/${name}"; - origin.ref = "heads/staging"; - mirror.url = "${mirror}${name}"; - }; - nin-staging = { - origin.url = "http://cgit.onondaga.r/${name}"; - origin.ref = "heads/staging"; - mirror.url = "${mirror}${name}"; - }; - }; - latest = { - url = "${mirror}${name}"; - ref = "heads/newest"; - }; - }; - krebs.git = defineRepo name (config.networking.hostName == "prism"); - }; - - sync-remote = name: url: - { - krebs.repo-sync.repos.${name} = { - branches = { - remote = { - origin.url = url; - mirror.url = "${mirror}${name}"; - }; - }; - }; - krebs.git = defineRepo name (config.networking.hostName == "prism"); - }; - - sync-remote-silent = name: url: - { - krebs.repo-sync.repos.${name} = { - branches = { - remote = { - origin.url = url; - mirror.url = "${mirror}${name}"; - }; - }; - }; - krebs.git = defineRepo name false; - }; - -in { - krebs.repo-sync = { - enable = true; - unitConfig.ConditionPathExists = "!/var/run/ppp0.pid"; - }; - imports = [ - (sync-remote "array" "https://github.com/makefu/array") - (sync-remote "email-header" "https://github.com/4z3/email-header") - (sync-remote "mycube-flask" "https://github.com/makefu/mycube-flask") - (sync-remote "reaktor-titlebot" "https://github.com/makefu/reaktor-titlebot") - (sync-remote "repo-sync" "https://github.com/makefu/repo-sync") - (sync-remote "skytraq-datalogger" "https://github.com/makefu/skytraq-datalogger") - (sync-remote "xintmap" "https://github.com/4z3/xintmap") - (sync-remote "realwallpaper" "https://github.com/lassulus/realwallpaper") - (sync-remote "lassulus-blog" "https://github.com/lassulus/lassulus-blog") - (sync-remote "painload" "https://github.com/krebs/painload") - (sync-remote "Reaktor" "https://github.com/krebs/Reaktor") - (sync-remote "nixos-wiki" "https://github.com/Mic92/nixos-wiki.wiki.git") - (sync-retiolum "go") - (sync-retiolum "much") - (sync-retiolum "newsbot-js") - (sync-retiolum "populate") - (sync-retiolum "stockholm") - (sync-retiolum "wai-middleware-time") - (sync-retiolum "xmonad-stockholm") - (sync-retiolum "nix-writers") - ]; -} diff --git a/lass/2configs/websites/lassulus.nix b/lass/2configs/websites/lassulus.nix index f60a66952..8f24fb212 100644 --- a/lass/2configs/websites/lassulus.nix +++ b/lass/2configs/websites/lassulus.nix @@ -82,6 +82,10 @@ in { c-base:$apr1$aQ6mYNR3$ho.aJ7icqSO.y.xKo3GQf0 ''}; ''; + locations."/krebspage".extraConfig = '' + default_type "text/html"; + alias ${pkgs.krebspage}/index.html; + ''; # TODO make this work! locations."= /ddate".extraConfig = let script = pkgs.writeBash "test" '' diff --git a/lass/krops.nix b/lass/krops.nix index c5a932206..4e045c6db 100644 --- a/lass/krops.nix +++ b/lass/krops.nix @@ -27,14 +27,9 @@ in { target = "root@${name}/var/src"; }; - # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test) - test = pkgs.krops.writeTest "${name}-test" { + # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) + test = { target }: pkgs.krops.writeTest "${name}-test" { + inherit target; source = source { test = true; }; - target = "${lib.getEnv "HOME"}/tmp/${name}-stockholm-test"; - }; - - ci = pkgs.krops.writeTest "${name}-test" { - source = source { test = true; }; - target = "${lib.getEnv "HOME"}/stockholm-build"; }; } diff --git a/makefu/krops.nix b/makefu/krops.nix index 9a701dcac..3838db635 100644 --- a/makefu/krops.nix +++ b/makefu/krops.nix @@ -75,14 +75,9 @@ in { target = "root@${target}/var/src"; }; - # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test) - test = pkgs.krops.writeTest "${name}-test" { + # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) + test = { target ? target }: pkgs.krops.writeTest "${name}-test" { + inherit target; source = source { test = true; }; - target = "${lib.getEnv "HOME"}/tmp/${name}-krops-test-src"; - }; - - ci = pkgs.krops.writeTest "${name}-test" { - source = source { test = true; }; - target = "${lib.getEnv "HOME"}/stockholm-build"; }; } diff --git a/mv/1systems/stro/config.nix b/mv/1systems/stro/config.nix deleted file mode 100644 index 941b3f69e..000000000 --- a/mv/1systems/stro/config.nix +++ /dev/null @@ -1,155 +0,0 @@ -{ config, lib, pkgs, ... }: - -with import ; - -{ - krebs = { - enable = true; - build = { - user = config.krebs.users.mv; - host = config.krebs.hosts.stro; - }; - }; - - imports = [ - - - - - - - - - - - - - - - - ]; - - boot.kernel.sysctl = { - # Enable IPv6 Privacy Extensions - "net.ipv6.conf.all.use_tempaddr" = 2; - "net.ipv6.conf.default.use_tempaddr" = 2; - }; - - boot.initrd.luks = { - cryptoModules = [ "aes" "sha512" "xts" ]; - devices = [ - { - name = "luks1"; - device = "/dev/disk/by-id/ata-TOSHIBA-TR150_467B50JXK8WU-part2"; - } - ]; - }; - - environment = { - profileRelativeEnvVars.PATH = mkForce [ "/bin" ]; - shellAliases = mkForce { - gp = "${pkgs.pari}/bin/gp -q"; - df = "df -h"; - du = "du -h"; - ls = "ls -h --color=auto --group-directories-first"; - dmesg = "dmesg -L --reltime"; - view = "vim -R"; - - reload = "systemctl reload"; - restart = "systemctl restart"; - start = "systemctl start"; - status = "systemctl status"; - stop = "systemctl stop"; - }; - systemPackages = with pkgs; [ - dic - htop - p7zip - q - - pavucontrol - rxvt_unicode.terminfo - - # stockholm - git - gnumake - populate - ]; - variables = { - NIX_PATH = mkForce "secrets=/var/src/stockholm/null:/var/src"; - }; - }; - - fileSystems = { - "/boot" = { - device = "/dev/disk/by-id/ata-TOSHIBA-TR150_467B50JXK8WU-part1"; - }; - "/" = { - device = "/dev/mapper/vg1-root"; - fsType = "btrfs"; - options = ["defaults" "noatime" "ssd" "compress=lzo"]; - }; - "/home" = { - device = "/dev/mapper/vg1-home"; - fsType = "btrfs"; - options = ["defaults" "noatime" "ssd" "compress=lzo"]; - }; - "/tmp" = { - device = "tmpfs"; - fsType = "tmpfs"; - options = ["nosuid" "nodev" "noatime"]; - }; - }; - - hardware.pulseaudio = { - enable = true; - systemWide = true; - }; - - networking.hostName = config.krebs.build.host.name; - - nix = { - binaryCaches = ["https://cache.nixos.org"]; - requireSignedBinaryCaches = true; - # TODO check if both are required: - sandboxPaths = [ "/etc/protocols" pkgs.iana_etc.outPath ]; - useSandbox = true; - }; - - nixpkgs.config.packageOverrides = import pkgs; - - users = { - defaultUserShell = "/run/current-system/sw/bin/bash"; - mutableUsers = false; - users = { - mv = { - inherit (config.krebs.users.mv) home uid; - isNormalUser = true; - }; - }; - }; - - security.sudo.extraConfig = '' - Defaults env_keep+="SSH_CLIENT" - Defaults mailto="${config.krebs.users.mv.mail}" - Defaults !lecture - ''; - - services.cron.enable = false; - services.journald.extraConfig = '' - SystemMaxUse=1G - RuntimeMaxUse=128M - ''; - services.nscd.enable = false; - services.ntp.enable = false; - services.timesyncd.enable = true; - - time.timeZone = "Europe/Berlin"; - - tv.iptables = { - enable = true; - accept-echo-request = "internet"; - }; - - system.stateVersion = "16.03"; -} diff --git a/mv/1systems/stro/source.nix b/mv/1systems/stro/source.nix deleted file mode 100644 index 888d616c8..000000000 --- a/mv/1systems/stro/source.nix +++ /dev/null @@ -1,3 +0,0 @@ -import { - name = "stro"; -} diff --git a/mv/dummy_secrets/default.nix b/mv/dummy_secrets/default.nix deleted file mode 100644 index 84a5e1186..000000000 --- a/mv/dummy_secrets/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, ... }: -{ - users.users.root = { - openssh.authorizedKeys.keys = [ - config.krebs.users.mv.pubkey - ]; - }; -} diff --git a/mv/dummy_secrets/ssh.ed25519 b/mv/dummy_secrets/ssh.ed25519 deleted file mode 100644 index a7d2adab4..000000000 --- a/mv/dummy_secrets/ssh.ed25519 +++ /dev/null @@ -1,3 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -dummy ------END OPENSSH PRIVATE KEY----- diff --git a/mv/source.nix b/mv/source.nix deleted file mode 100644 index 29dfe9723..000000000 --- a/mv/source.nix +++ /dev/null @@ -1,30 +0,0 @@ -with import ; -host@{ name, override ? {} }: let - builder = if getEnv "dummy_secrets" == "true" - then "buildbot" - else "mv"; - _file = + "/mv/1systems/${name}/source.nix"; - pkgs = import { - overlays = map import [ - - - ]; - }; -in - evalSource (toString _file) [ - { - nixos-config.symlink = "stockholm/mv/1systems/${name}/config.nix"; - nixpkgs.git = { - # nixos-17.09 - ref = mkDefault "0653b73bf61f3a23d28c38ab7e9c69a318d433de"; - url = https://github.com/NixOS/nixpkgs; - }; - secrets.file = getAttr builder { - buildbot = toString ; - mv = "/home/mv/secrets/${name}"; - }; - stockholm.file = toString ; - stockholm-version.pipe = "${pkgs.stockholm}/bin/get-version"; - } - override - ] diff --git a/nin/krops.nix b/nin/krops.nix index 2ba896419..d0074840a 100644 --- a/nin/krops.nix +++ b/nin/krops.nix @@ -27,14 +27,9 @@ in { target = "root@${name}/var/src"; }; - # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test) - test = pkgs.krops.writeTest "${name}-test" { + # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) + test = { target }: pkgs.krops.writeTest "${name}-test" { + inherit target; source = source { test = true; }; - target = "${lib.getEnv "HOME"}/tmp/${name}-stockholm-test"; - }; - - ci = pkgs.krops.writeTest "${name}-test" { - source = source { test = true; }; - target = "${lib.getEnv "HOME"}/stockholm-build"; }; } diff --git a/tv/1systems/querel/config.nix b/tv/1systems/querel/config.nix index 07ec8e403..5f981c64c 100644 --- a/tv/1systems/querel/config.nix +++ b/tv/1systems/querel/config.nix @@ -11,9 +11,6 @@ with import ; krebs.build.host = config.krebs.hosts.querel; krebs.build.user = mkForce config.krebs.users.itak; - boot.extraModulePackages = [ - config.boot.kernelPackages.exfat-nofuse - ]; boot.initrd.availableKernelModules = [ "ahci" ]; boot.initrd.luks = { cryptoModules = [ "aes" "sha512" "xts" ]; diff --git a/tv/krops.nix b/tv/krops.nix new file mode 100644 index 000000000..231486ab7 --- /dev/null +++ b/tv/krops.nix @@ -0,0 +1,22 @@ +{ name }: rec { + + inherit (import ../krebs/krops.nix { inherit name; }) + krebs-source + lib + pkgs + ; + + source = lib.evalSource [ + krebs-source + { + nixos-config.symlink = "stockholm/tv/1systems/${name}/config.nix"; + secrets.file = toString ./dummy_secrets; + } + ]; + + # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) + test = { target }: pkgs.krops.writeTest "tv-krops-${name}-ci" { + inherit source target; + }; + +}