I've written a working script that makes connecting to my college's Wi-Fi and signing into its captive portal more convenient. It is launched with a keyboard shortcut and uses nmcli to open or run the applications, windows, and scripts needed for the login process.
I'd like to expand it into a more complete project with interactive console prompts. It should collect information from the user, save that information somewhere, and load it again on future runs. I have some programming experience, but I'm an English Language Teaching student who works on computer projects as a hobby and occasionally contributes to open-source software. I'm not sure what concepts or technologies I should research to build this properly. What topics would be a good starting point?
4 Answers
Before deciding on the implementation, define exactly what needs to be remembered between runs. Ordinary preferences can go in a configuration file such as JSON, TOML, or INI. Do not automatically store Wi-Fi, portal, or account passwords as plain text, though. If credentials are involved, research your desktop environment’s keyring or Secret Service API and keep secrets out of configuration files and version control.
Python would probably be a comfortable choice for this kind of project. The main topics to research are input() for prompts, JSON or another configuration format for saving settings, file handling, subprocess management for running nmcli and other programs, and input validation. You could also look into logging and separating the project into functions or modules as it gets larger.
You could also use C# if that is the language you already know. .NET can produce a Linux application, although for a lightweight personal command-line utility, Python may involve less setup and be quicker to iterate on. The important part is learning the same core concepts: interactive CLI design, persistent application settings, file formats, error handling, and launching external processes.
For a small command-line tool, Bash can handle the basics. Look into the read command for collecting input, shell redirection for writing files, and tools such as sed, awk, or jq for reading structured data. Bash is fine if the workflow stays simple, but parsing and maintaining stored data can become awkward as the project grows.

Python sounds like the best fit for me. I used it a long time ago and have forgotten most of it, but I remember finding it practical and convenient. I’ll start by refreshing those basics and then look into configuration files and subprocesses.