# Concept for tracking changes - Create new commit (if possible) - If force is unset: Diff system's files against current state by copying them into the current state branch - Then, diff the package state against the state branch by dumping it - Else, or if no diff, continue - Copy normal config files into correct directories - Render and copy renderables - Retrieve explicitly installed packages and remove those that are not present in goal and install those that are not present in current state # Ideas - [ ] function to collect new configs - [ ] config options for users and groups - [ ] presets for things like desktops (like Hyprland) - [ ] config options for the template rendering - [ ] config options for themes - [ ] grub config - [ ] Dynamic selection of more configs (i.e. require syntax) - [ ] Own config syntax? - [ ] Autocompletion - [ ] Basic arch install how? -> Probably manual (or semi-automatic) - [ ] Mounts? # REGEX TODO: Improve the below (especially file can be shortened with positive lookahead) - File: `^(^(~|\\.|\\.\\.)?\\/)?([\\w\\/.-]+(?!.*[^\\w\\/.-]+))` - Folder: `^(^(~|\\.|\\.\\.)?\\/)?([\\w\\/.-]+(?!.*[^\\w\\/.-]+))\\/$` - URL (just domain): `^(https?):\\/\\/(([a-z0-9-]+)((?=\\.))\\.)+[a-z]+(?=[a-z]$)` - Full URL: `^(https?):\\/\\/(([a-z0-9-]+)((?=\\.))\\.)+[a-z]+(?=\\/)\\/([\\w\\-?.=]+(?=\\/[\\w\\-?.=])\\/)*([\\w\\-?&.=\\/]+(?=[\\w\\-.=\\/]$))` - UNIX username and groups: `^[a-zA-Z0-9\\-._]{2,19}(?=[a-zA-Z0-9]$)` - Git SSH: `([a-zA-Z0-9\\-._]+(?=[a-zA-Z0-9])[a-zA-Z0-9])@(([a-z0-9\\-]+(?=\\.))\\.)+[a-z]+(?=:):([a-zA-Z0-9\\-._]+(?=\\/)\\/)+([a-zA-Z0-9\\-._]+(?=[a-zA-Z0-9]$))`