well this is a common misunderstanding when it comes to rules, rules are not "made" to generate passwords, but to modify them, maybe take a look at masks and maskfiles
maybe an approach would be to use a basic "generator mask" like
(8 times lower chars)
?l?l?l?l?l?l?l?l
and combine this with an also self generated ruleset which will do the things you mentioned, add/replace position 0 to 7 with digit 0-9, swap letter to upper and so on, you can use maskprocessor or hahscat --sdout to help you generating these "basic" rules and then using hashcat utils like combinator, combinator 3 to combine these rules with each other
see output of
Code:
mp64.exe -1 "luds" ???1???1???1???1???1???1???1???1 > maskfile
to get a feeling how to use maskprocessor to generate masks or rules (see wiki), this will generate a maskfile with 8 positions and all combination (65536) of lower, upper, digits and special chars, each line is a mask on its own, you could "clean this list and removing entries like ?s?s?s?s?s?s?s?s (last line) because this password would consist of 8 time special chars and therefore "doesnt fit" but you have to do this by hand
line 2400 - 2405 example
Code:
?l?l?d?u?u?u?s?s
?l?l?d?u?u?d?l?l
?l?l?d?u?u?d?l?u
?l?l?d?u?u?d?l?d
?l?l?d?u?u?d?l?s
?l?l?d?u?u?d?u?l
Code:
mp64.exe --combinations ?l?l?d?u?u?d?l?u
30891577600
the main problem is, the logic you mentionend, or better the checking whether the generated password "fits" would slow down the whole process of generating pw candidates and therefore slowing down the whole cracking process so for your special needs you have to put some afford beforehand and generate the ruleset or masks by hand (at least cleaning)