gchristensen changed the topic of #nixos-chat to: NixOS but much less topical || https://logs.nix.samueldr.com/nixos-chat
<gchristensen> neat
<joepie91> unfortunately this does create a hard dependency on ES6+
<joepie91> :p
<joepie91> no proxy API below that, and proxies are not polyfillable
<joepie91> but oh well, I was already using sets and maps internally, and frankly you can't really polyfill those without significant perf loss either
<joepie91> so, meh
<gchristensen> https://lobste.rs/s/mc85ko/what_s_your_release_process_like anyone want to write about Nix?
<Drakonis> lobsters lives
<Drakonis> i can throw invites
<ldlework> so I appologized to yorick and showed him my change
<ldlework> he says it works on code he couldn't get to format correctly and thinks I should pr
<gchristensen> "PLEASE consider releasing some form of this tool, or at least documenting the snot out of it... it looks incredible. We'd really use this at work." -- someone, about the nixos test suite
<gchristensen> if only you could get such a great experience without NixOS :)
<Drakonis> kisik21, neovim it
lassulus_ has joined #nixos-chat
lassulus has quit [Ping timeout: 240 seconds]
lassulus_ is now known as lassulus
kisik21 has quit [Ping timeout: 244 seconds]
disasm has quit [Quit: WeeChat 2.0]
* clever waves
* infinisil waves back
<clever> it mounts!
<clever> nix copy --to local?root=/mnt/ ${config.system.build.toplevel}
<clever> ++ nix copy --to /nix/store/b1b7ikz46vqq7f350l2pa1whl5aflrfb-nixos-system-nixos-18.09pre145679.dae9cf6106d
<clever> infinisil: and now bash is eating my arguments for breakfast....
<clever> oh!
<clever> nullglob
<infinisil> That does what exactly?
<infinisil> the nix copy thing
<clever> it will copy it to /mnt/nix/store with a userland chroot (nix just prepends /mnt to paths)
<clever> but, ? is a globing character in bash, and normally, the string fails to match paths, so the glob pattern is just passed directly to the prog
<infinisil> Yeah
<clever> but nix turns on nullglob, to stop that
<clever> and then your flags just randomly vanish!
<infinisil> So local?root=/mnt/ is the syntax to do that? nix copy --to /mnt/ doesn't work?
<infinisil> Ah hah
<clever> i think --to /mnt/ will create a binary cache, with .narinfo files
<clever> which must then be hosted on an http server
<infinisil> Oh I see
<clever> oh, no, it does exactly the same as local?root
<clever> also, `rm -rf` is silly, it cant delete files in a read-only directory, even when it has permission to +w the dir!
<clever> `chmod +w -R ttt` and its fixed
<infinisil> Hmm, so what can I do with these nix copyied derivations?
<clever> you can then chroot into that dir, and use the closure as normal
<clever> you can also use this to copy closures to/from USB sticks, to transport them
<clever> so you could use it to smuggle wifi drivers into a nixos maching lacking wifi drivers
<infinisil> Hmmm
<clever> ive also explained how to use it to "nixops deploy" to machines behind an airgap
<infinisil> I personally don't have any use for it, but good to know that's possible :D
<clever> and in my current use-case, i'm using it to copy a pre-built copy of nixos into a zfs image
<infinisil> Oh! I remember, it's possible to use such an alternate nix store to store secrets
<infinisil> (because it could be encrypted and stuff)
<infinisil> Not sure how practical that is though
<clever> that is another option, put that 2nd store into a luks device
<clever> just make sure nothing depends on the secrets at runtime, or it will leak when you copy the product out
<infinisil> Put every secret into a single derivation
<infinisil> then check nix-store -qR of the result and make sure the derivation isn't in there
<infinisil> That should work fairly well
<clever> or just make sure all secrets have secret in the name, so you can grep qR easily
<clever> you can also put such URI's into NIX_REMOTE
<clever> [clever@amd-nixos:~]$ NIX_REMOTE=local?root=/home/clever/ttt/ nix-store -qR /nix/store/188avy0j39h7iiw3y7fazgh7wk43diz1-hello-2.10
<infinisil> On the other hand, when you name your secret derivations something with "secret", those are exactly the derivations an attacker would try to look for :P
<clever> tank/nix 1.9G 1.2G 710M 63% /mnt/nix
<gchristensen> hot dog my ISP has 400mbps speeds now
<clever> mine has offered gigabit for years, but i only need 300mbit right now
<gchristensen> "for years" :(
<clever> tank/nix 1.9G 672M 1.3G 36% /mnt/nix
<clever> enabling lz4 has halved the size of the nix store
<infinisil> I got about 30mbit :/
<clever> gchristensen: can you think of any zfs params i should set on things like /nix?
<infinisil> clever: Yeah, my compress ratio for /nix/store is also about 2, 2.14 to be exact
<infinisil> clever: xattr=off, atime=off
<gchristensen> clever: I'm a zfs noob :)
<clever> gzip-9 is much much much slower
<clever> tank/nix 1.9G 512M 1.4G 27% /mnt/nix
<clever> gzip shaved another 160mb off, at the cost of being a lot slower
<gchristensen> https://www.cleancss.com/router-default/Motorola/SURFboard_SB how does this page know my LAN IP?
<clever> gchristensen: its one of those p2p media protocols
<clever> i cant remember the name off the top of my head
<gchristensen> creepy :)
<clever> gchristensen: ah, webrtc
<gchristensen> I don't l
<gchristensen> I don't like it :|
<clever> [255 copied (471.4 MiB)]
<clever> error: out of memory
<clever> gchristensen: i suspect there is a memory leak in `nix copy`, copying 2 paths fails, but copying 1 at a time works
<gchristensen> maybe it is trying to copy both at the same time and running out?
<clever> maybe?
<gchristensen> my usual next step wouldbe add a bunch of `-v`'s :P
<clever> the second path is only 58mb, lol
<clever> hmmm, the first path is 1013mb, and it only has 512mb of ram
<gchristensen> hrm
<clever> hmmm, pool fails to import...
<clever> oh, maybe the hostid
<clever> oh, virtio_pci i think
<clever> gchristensen: in the past, i made a nodejs prog to scrape the traffic counters on my ISP router
<clever> it was just ifconfig re-formated into an html table
<clever> i then quickly discovered, the util reformating it, parsed the counters as signed 32bit ints, causing them to max out at 2 billion
<clever> and after 2bil bytes have gone thru, it wraps back to 0
<clever> then i discovered that polling the webpage every minute, caused the router to OOM every 29.5 days, like clockwork
<gchristensen> hah
<gchristensen> I remember that last bit
<clever> gchristensen: it boots!
<clever> sorta, emergency console
<clever> [FAILED] Failed to mount /home.
<clever> ah
<clever> "/home" = { fsType = "zfs"; device = "${poolName}/homet"; };
<clever> tomorrow, i can work on getting it to auto-resize
disasm has joined #nixos-chat
<disasm> Anyone using a usb (low profile sized so it doesn't stick out far) wifi adapter? Any recommendations? The BCM4360 on my macbook pro is so unstable in linux...
vmandela has joined #nixos-chat
jD91mZM2 has joined #nixos-chat
Guanin has quit [Ping timeout: 240 seconds]
Guanin has joined #nixos-chat
Drakonis has quit [Remote host closed the connection]
tertle||eltret has quit [Quit: Connection closed for inactivity]
<jD91mZM2> ldlework: IT WORKS!!!! GOTO TYPE DEFINITION WORKS!!!!
<jD91mZM2> I'm writing the language server you asked for :)
<jD91mZM2> Far from going to work on anything actually complicated, but it's a start!!!
<ivan> nice
<ldlework> jD91mZM2: are you the one working on rnix?
<jD91mZM2> I am
<ldlework> jD91mZM2: you need nix build expressions asap
<jD91mZM2> What do you mean?
<ldlework> I want to build rnix but i don't want to do any of the work
<ldlework> you need a default.nix
<jD91mZM2> Oh, right
<ldlework> jD91mZM2: once you do, i can start tinkering with emacs integration
<jD91mZM2> Normally you use rnix as a library
<jD91mZM2> Not sure how default.nix would help there?
<ldlework> jD91mZM2: you're building a language server right?
<ldlework> as it in starts up and you talk to it?
<jD91mZM2> I am, but it's very early alpha
<ldlework> sure
<jD91mZM2> Oh, you mean default.nix for that
<jD91mZM2> Will do
<ldlework> just saying, once i can build it, i can test emacs' LSP client against it
<jD91mZM2> Cool!
<ldlework> you're implementing the Microsoft Language Server Protocol 3.0 right
<jD91mZM2> Whatever is the current one on their website
<ldlework> 3.x is latest so yeah
<ldlework> jD91mZM2: sad to say though, I made nix-mode work pretty well already ;)
<jD91mZM2> No, that's good! What's nix-mode?
<ldlework> emacs indentation for nix
<jD91mZM2> That's cool!
<ldlework> jD91mZM2: i don't know much about LSP
<ldlework> will we be able to query for indentation or formatting?
<jD91mZM2> Absolutely no clue myself (:
<ldlework> lol
<jD91mZM2> I think formatting is a part of it though, although not sure I can actually implement a formatter myself
<ldlework> jD91mZM2: you have the ast right?
<jD91mZM2> I do
<ldlework> jD91mZM2: are you recording the buffer ranges of ast terms?
<jD91mZM2> I'm recording span information and keeping all the whitespace/comments
<ldlework> nice, then it shouldn't be hard
<ldlework> we send you a buffer position
<ldlework> you figure out what ast term it is
<jD91mZM2> original == parse(ast).to_string()
<ldlework> you find the parent ast term
<ldlework> find the line the parent ast term starts on
<ldlework> find the indentation of that line
<ldlework> then indent the line we care about 1 * tab-width
<ldlework> make sense?
<jD91mZM2> I do have an idea on how I'd do it, but it's just tedious because there are so many AST types
<ldlework> I'm not sure you have to care about all of them
<jD91mZM2> And it raises absurd questions like: What if an attribute is expanded over multiple lines, inside a key?
<jD91mZM2> But yeah you're right, it will probably be easy :D
<ldlework> jD91mZM2: if we could do it in elisp without an AST using just regexps you can do with with a span-retaining AST :)
<sphalerite> \o/ tooooooling!
<ldlework> jD91mZM2: did you write a parsing grammar?
<ldlework> PEG or other
<jD91mZM2> ldlework: It's a recursive descent parser
<ldlework> does PEG fall into that?
<ldlework> PEG is the only grammar parsing I understand
<jD91mZM2> To be entirely honest I don't know what PEG is
<ldlework> "Syntactically, PEGs also look similar to context-free grammars (CFGs), but they have a different interpretation: the choice operator selects the first match in PEG, while it is ambiguous in CFG. This is closer to how string recognition tends to be done in practice, e.g. by a recursive descent parser."
* ldlework shrugs.
<ldlework> the top level expression for my laptop now, https://gist.github.com/dustinlacewell/66039009bcb6a38637cd8f1cfe1ad4a3
<ldlework> absolutely glorious if you ask me
<jD91mZM2> Pushed to GitLab: https://gitlab.com/jD91mZM2/nix-lsp. default.nix coming up, ASAP
<jD91mZM2> Does somebody here happen to know how to use the mozilla overlay in rustPlatform.buildRustPackage?
<jD91mZM2> TFW you have like 2GB of free space in /nix
vmandela has quit [Read error: Connection reset by peer]
vmandela has joined #nixos-chat
__monty__ has joined #nixos-chat
jtojnar has quit [Ping timeout: 260 seconds]
jtojnar has joined #nixos-chat
kisik21 has joined #nixos-chat
kisik21 has quit [Ping timeout: 240 seconds]
kisik21 has joined #nixos-chat
hl has joined #nixos-chat
<gchristensen> is there something like a raid card, but which doesn't actually put the disks in to a raid? just adds more SATA headers?
<gchristensen> or is a raid card without any raid setup what I want?
<joepie91> gchristensen: 'expander' is what you're looking for
<joepie91> there's various kinds
<joepie91> PCIe -> SATA cards, also 'port multipliers' although I'm not sure about the reliability of the latter
<joepie91> gchristensen: if you want reliable advice on anything to do with large-scale storage, #datahoarder is a good place to ask :P
<gchristensen> oh man
<gchristensen> where did I go wrong, I'm usually a #dataminimalist
vmandela has quit [Read error: Connection reset by peer]
vmandela has joined #nixos-chat
vmandela has quit [Read error: Connection reset by peer]
vmandela has joined #nixos-chat
<jD91mZM2> OMG YES!!! nix-lsp is showing me diagnostics!!!
<ldlework> \o/
<ldlework> screenshot
<ldlework> nix-env -iA nixos.imgur-screenshot
<ldlework> quick!
<ldlework> nice
<joepie91> gchristensen: a data minimalist who needs extra SATA ports? right :P
<ldlework> jD91mZM2: i hope you can resolve your nix problem
<ldlework> i would like to try this at some point
<jD91mZM2> ldlework: You could always build it with the mozilla overlay or rustup yourself ::))
<ivan> I'm a 56TB data minimalist
<ldlework> jD91mZM2: don't be silly
<ldlework> :)
<jD91mZM2> :P
jtojnar has quit [Remote host closed the connection]
<jD91mZM2> WE HAVE WIP COMPLETIONS YEE
<jD91mZM2> Oh, it only seems to show me one possible completion
<ldlework> jD91mZM2: you're making a vim integration?
<ldlework> i wish i could make the emacs integration along side
<jD91mZM2> Nah, there is already a language client
<ldlework> oh i see
pie__ has quit [Remote host closed the connection]
pie__ has joined #nixos-chat
<ldlework> jD91mZM2: looks like there is a nice generlized language client for emacs too
<ldlework> I'm excited
<jD91mZM2> :)
<jD91mZM2> Ah yes, seems like completion only actually works when you're typing in a valid syntax
<jD91mZM2> Meaning for example `hi = hel` won't complete, but `hi = hel;` will because the trailing semicolon makes it valid
<jD91mZM2> That's bad, but I don't know exactly how to fix that ):
<jD91mZM2> I do have a system to somewhat catch errors and still continue on, but the problem is that that system makes the whole entry invalid, it doesn't pretend everything is fine and push the entry
<samueldr> just guessing how I'd try to approach: could you remove the erroneous nodes, re-parse the file without them?
<samueldr> I'd assume most of the time the erroneous nodes would be limited to the one currently being edited
<jD91mZM2> What is currently being edited is the problem
<jD91mZM2> It can't find the variable I'm typing at because it didn't parse
<samueldr> oh, but you know the span?
<samueldr> you probably have to rely on external help
<jD91mZM2> I know the cursor position, but not the span of the variable. Could find that out probably
<jD91mZM2> I'm thinking of perhaps instead of looking for a variable at the cursor, I look for the entire scope the cursor is in
<samueldr> (also note that you DO have more experience than me at writing those kind of things!)
<ldlework> jD91mZM2: don't be afraid to just hack it when it comes to a special case like "looking-at-symbol-p"
<ldlework> Nix's valid variable names are not that complex
<jD91mZM2> Doing something pretty hacky atm :)
<samueldr> ldlework: you sure about that?
<samueldr> > let/*'s have*/fun''with''variable''names=''a''; in ''${fun''with''variable''names}''
<{^_^}> "a"
<samueldr> (though yes, identifiers like those are much more simple)
<samueldr> > { " " = "this is not a valid *identifier*"; }." "
<{^_^}> "this is not a valid *identifier*"
<samueldr> the completion has to understand whether to complete with a naked identifier or a string in those situations :/
jtojnar has joined #nixos-chat
<jD91mZM2> Completion currently only deals with simple idents
<jD91mZM2> It's be weird to autocomplete the rest of a string (:
<ldlework> some say it not be like it is but it do
<infinisil> jD91mZM2: tbh, I don't think good auto-completion is possible due to how Nix is
<infinisil> Its dynamic nature and the fact that `with;` exists
<jD91mZM2> yOU uNderEStimAtE mY pOWAh
<jD91mZM2> tries it
<jD91mZM2> gives up
kisik21 has quit [Quit: WeeChat 2.1]
<samueldr> infinisil: you're right :) though one can dream and try
<LnL> don't support it so people stop using it?
<joepie91> jD91mZM2: have a look into how Tern works, if you want to do autocompletion without heavy code analysis
<joepie91> (Tern uses a significantly simplified inference model)
<joepie91> iirc there's a good article on its methodology somewhere
<joepie91> jD91mZM2: ah, here: http://marijnhaverbeke.nl/blog/tern.html
<joepie91> `with` is probably going to be a little iffier
ikwildrpepper has quit [*.net *.split]
<jD91mZM2> I honestly just want something really basic
<samueldr> I think just giving up when "with" is used with something outside the scope of the file is fine
kisik21 has joined #nixos-chat
<jD91mZM2> Currently I'm just giving up on with completely :^)
<disasm> jD91mZM2: ooh! I'm using LSP with hie for haskell, going to try that out now! Should I disable `vim-nix` first?
<jD91mZM2> disasm: It seems to co-operate pretty well!
<jD91mZM2> Might need to disable nix from ale/syntastic though, as it might get priority over the language client
<disasm> jD91mZM2: I haven't built rust on nix before, you have a derivation for it you use?
<jD91mZM2> disasm: I was going to make one, but got stuck because of nix' handling of git repositories
<jD91mZM2> You can use either normal rustup or the mozilla overlays to get rust, and then `cargo install --git "https://gitlab.com/jD91mZM2/nix-lsp"`
<jD91mZM2> Might need cargo +nightly if using rustup
<joepie91> jD91mZM2: I've found Atom's keyword-based completion to be surprisingly effective
<joepie91> it's basically just some sort of weighted fuzzy search, something with word distance from cursor
<joepie91> has no actual understanding of the code
<joepie91> so if you're looking for a 'dumb' autocompletion mechanism, that may be the option to look into
<jD91mZM2> joepie91: That's basically what I get to use every time RLS forgets how things work :^)
<joepie91> lol
<disasm> atom uses LSP I think as well, so you could potentially use nix-lsp with it as well
<jD91mZM2> I already got the dumb completion working - basically checks the current word and then checks where in the AST this word is, and suggests matching variables
<joepie91> jD91mZM2: does it weigh by word distance?
<jD91mZM2> It weighs by scope
<joepie91> close enough
<jD91mZM2> Well, actually, it doesn't have any order
<jD91mZM2> hehe
<joepie91> it weighs by scope but doesn't have any order? :P
<jD91mZM2> Yeah I kinda messed up that sentence
<jD91mZM2> I was thinking of "it will use the variable with that name from the closest scope", in the GOTO lookup
<jD91mZM2> But then I said something else
<jD91mZM2> It'll actually currently return the absolute oppsite. Furthest away first. Whoops.
<jD91mZM2> Easy to fix though, just calling .rev()
<joepie91> haha
<jD91mZM2> I'm not sure if LanguageClient-neovim let's me see what order they are returned in, so I can't test it
<jD91mZM2> But the logs tell me that it's fixed :)
<infinisil> auto-completion would be so nice if it worked with "with" and attrsets
<infinisil> Just for `let in` statements is simple, but also not very useful
<infinisil> And what would be even cooler but also much harder is completion for NixOS options
<jD91mZM2> oooo
<jD91mZM2> Sadly not all imports in nixpkgs are hard-coded
<jD91mZM2> Some of them are like (path: import path)
<jD91mZM2> Which requires evaluation
<infinisil> And potentially even builds
<samueldr> it's probably not possible to somehow piggy back on nix's own evaluations for this (forgetting about builds)
<andi-> jD91mZM2++ very nice to see a language server appearing within days :)
<jD91mZM2> Currently want to get into the formatting business, but I am getting oh so confused to where I should start :P
<jD91mZM2> I could modify the original AST and then print it out. Everything else is lossless now. But it's not clear how that would be any easier than just printing out literally everything
<jD91mZM2> Wish there were fewer AST types to support :P
<samueldr> how many are there?
<jD91mZM2> I would answer, but I've tried and tried again but I just lose count /s
<jD91mZM2> 19
<samueldr> oh, not bad
<samueldr> (still, more than one)
<jD91mZM2> It's really annoying when you need to handle each one in a unique way
<jD91mZM2> Which I basically always do because enums
<samueldr> sure!
<samueldr> I had no idea what to estimate though for a number
<jD91mZM2> I made a nice little .children() function to help, perhaps I could somehow extend that to give me metadata so I can reformat... Not that I know how that'd be useful
<jD91mZM2> So anyway, here's a guide for writing a parser:
<jD91mZM2> 1. Write a parser that keeps all metadata
<jD91mZM2> 2. Throw away all metadata for the formatter
<samueldr> oh, depends whether you format with only one true output per-AST, or format the *lines* (which will be harder) preserving some of the author's intent
<samueldr> a: a + a vs. a:\na + a
<samueldr> (that's why I was trying to preserve all the data in my try)
<jD91mZM2> mmm
<jD91mZM2> I kinda wanted to go for one true output but then again if I want to preserve comments it might be easiest to not do that
<samueldr> too much opinion in the formatter here may cause friction for use
<jD91mZM2> true too
<samueldr> I was kinda thinking (for my use case) dealing with repeated newlines (removing streaks to keep only one empty line max) and mostly doing indent
<samueldr> possibly some things like removing unneeded parens with an additional param
<jD91mZM2> How would you deal with a\n+b?
<samueldr> smack the user^W^W^W I would have made the general rule that splitting up a node increases indent
vmandela has quit [Quit: Leaving]
<samueldr> so a\n\t+b (indulge \t for explaining indents)
<samueldr> and then I probably would always space out operators (due to a-b being an identifier and a/b being a path); since \n\t is a space, the left side (a\n\t) is already spaced, add a space to the right a\n\t+ b
<samueldr> and a\n+\n\b would be a\n\t+\n\tb (b and + are inside the same node, same indent level)
<samueldr> but that's like, my opinion
<samueldr> and I don't know where my over-simplification falls and breaks
drakonis_ has joined #nixos-chat
<gchristensen> joepie91: it isn't for me
<gchristensen> joepie91: it is for my brother, I have disk space and he uses almost all lot of it.
<gchristensen> so I have a small root disk and a 3 disk ZFS pool I've used for backups, and he wants to store much more than it can store and I'm out of sata ports.
<gchristensen> oh dear
<jD91mZM2> Ok indenting seems like it wasn't as impossible as I thought, but I did have to make some sacrifices to the public interface of rnix :(
<jD91mZM2> Needed to have children(): 1. Return metadata also. 2. Return mutable metadata
<jD91mZM2> So now the only way to loop through children of a node is if the node is mutable. Could fix this my copy pasting the function manually, or using a macro (but that might be difficult because then I have nested macros)
<jD91mZM2> Also because of the mutability, no more iterators because we got lifetime errors. UGH
<jD91mZM2> BUT, I did get basic indention, kind of
<sphalerite> jD91mZM2: can't you keep children() public and have a private children_mut()?
<jD91mZM2> > Could fix this my copy pasting the function manually
<{^_^}> undefined variable 'Could' at (string):171:1
<joepie91> gchristensen: definitely ask in #datahoarder then, because it sounds like your brother is one :P
<sphalerite> jD91mZM2: surely you don't have to copy-paste it, and can just implement children_mut on top of children?
<gchristensen> do they have remediation strategies?
<jD91mZM2> sphalerite: No, you can't make immutable stuff mutable
<sphalerite> jD91mZM2: err I meant the other way round
<joepie91> gchristensen: hah. not especially likely
<joepie91> dunno if #datahoarders-anonymous exists :D
<jD91mZM2> sphalerite: But... Then you can't actually call it on an immutable reference
<jD91mZM2> Might be an OK sacrifice
<sphalerite> ooooooh right
<sphalerite> makes sense
<jD91mZM2> Either that or making a macro to generate the exact same code twice but with different mutability
<sphalerite> does that improve clarity over copy-and-paste?
<jD91mZM2> Although nested macros (already have one) don't work well with repetitions
<sphalerite> I think copy-and-paste is justified here
<jD91mZM2> It lessens the maintenance burden because you only need to update one instance
<jD91mZM2> It lessens the lines of code
<jD91mZM2> But it can be very confusing for newcomers
<jD91mZM2> I think that's what I'll do though... tomorrow. Good night!
<jD91mZM2> {^_^}: Good night
<{^_^}> jD91mZM2: Night!
<jD91mZM2> infinisil: I love this feature, it's so cute
jD91mZM2 has quit [Quit: WeeChat 2.0]
<infinisil> Whoa, why did that work, I don't think I coded it to work if {^_^} gets mentioned directly
<sphalerite> lol
<infinisil> Ohhhhh hahaha, I get it, it's a coincidence:
<infinisil> It only works because {^_^}'s username consists of special characters only
<gchristensen> infinisil: (I thought you were going to drop the targeting of the user in the 'good night msg to avoid mistakes?)
<infinisil> Because it does the matching based on only the alphas :P
<infinisil> Ah yeah didn't implement that yet, I could do that quickly though
* gchristensen shrugs
<infinisil> (regarding the matching: "{^_^}: Good night" gets transformed by removing all non-alpha chars and lower casing everything, so it becomes "goodnight", if this equals "night", "goodnight" or "gnight", it triggers)
<infinisil> ,+][ ) ]- .;ni[ +]&]g h{[))} t
<{^_^}> Night!
<sphalerite> >gOoD NIGhT
<sphalerite> why is it neither saying good night not trying to evaluate it?
<infinisil> 5 minute cooldown :P
<infinisil> And evaluation needs the "> " prefix
<infinisil> (I know, my bot is just a bunch of undocumented functions, sorry :P)
Lisanna has quit [Quit: Lisanna]
<sphalerite> aaah right
<joepie91> > >
<{^_^}> error: syntax error, unexpected '>', at (string):171:1
infinisil has quit [Remote host closed the connection]
infinisil has joined #nixos-chat
__monty__ has quit [Quit: leaving]
dmc has quit [Quit: WeeChat 2.2]
dmc has joined #nixos-chat
nckx has quit [Quit: Updating my GNU GuixSD server — gnu.org/s/guix]
kisik21 has quit [Ping timeout: 276 seconds]
nckx has joined #nixos-chat