You are missing the curly braces that wrap an attribute set.
Also there is usually no nixpkgs passed to a module, but pkgs instead.
Last but not least, the args of a module are usually called args if you need them all.
inputs is usually used for the args of the outputs function. Which you do not use the @ pattern at at all, so you have to use the name of the input directly.
So far I don’t see a reason for specialArgs, and you got inputs and args swapped. To reduce confusion for the reader it should be the other way around. Also as you have the module inline, there is no need to get the input from the module args, instead you can use it directly.