diff --git a/config/survey.jl b/config/survey.jl
index cfc2eef..6eb0f06 100644
--- a/config/survey.jl
+++ b/config/survey.jl
@@ -1 +1,248 @@
-Survey("Emacs User Survey — 2022")
+Survey(
+ "Emacs User Survey — 2022",
+ "Help the community have a better understanding of itself and its
+ own diversity in Emacs usage. Discover and show how people are using
+ this versatile tool for everything, from software engineering to
+ academia and journalism.
+
+This takes most people ?–? minutes to complete.
+
+Disclaimer: This is currently just a draft based on the 2020 survey,
+the questions you see now will not neccesarily be in the final survey.",
+ SurveyPart("Emacs Usage",
+ MultiSelect(:emacs_tasks,
+ "Which of the following activities do you use Emacs for?",
+ ["Work", "Hobby projects", :other]),
+ NumberInput(:emacs_years,
+ "How many years have you been using Emacs for?",
+ validators = v -> if v < 0
+ "Seriously? Are we supposed to believe you're just planning ahead?"
+ elseif v > 45
+ "Oh really? 🤨"
+ end),
+ RadioSelect(:emacs_version,
+ "Which version/fork of Emacs do you use?",
+ ["29 (master)" => "29",
+ "28", "27", "26", :other]),
+ MultiSelect(:operating_system,
+ "Which operating system to you use Emacs on?",
+ ["GNU/Linux", "Windows", "MacOS", "BSD", :other]),
+ MultiSelect(:emacs_mode,
+ "How do you run Emacs?",
+ ["Graphical Application (GUI)" => "GUI",
+ "Terminal (TUI)" => "TUI",
+ "Daemon/Client" => "daemon"]),
+ RadioSelect(:keybindings,
+ "Which keybindings do you use?",
+ ["Default (Emacs)" => "Emacs", "Vim", "CUA", :other]),
+ RadioSelect(:starter_kit,
+ "Do you use a starter kit/configuration framework?",
+ ["No, I have lightly configured vanilla Emacs" => "minimal vanilla",
+ "No, I have an extensive, fully-custom configuration" => "maximal vanilla",
+ "Doom Emacs", "Spacemacs", "Prelude",
+ :other]),
+ RadioSelect(:elisp,
+ "What is your level of elisp proficiency?",
+ ["No knowledge" => "none",
+ "I can copy-paste and tweak some code" => "copy-paste",
+ "I can write simple functions" => "simple functions",
+ "Fairly proficient, I can/have written my own package." => "write package",
+ "I maintain multiple packages" => "many packages"]),
+ MultiSelect(:languages,
+ "Which languages do you program (in Emacs) in?",
+ ["Assembly", "C++", "C", "C#", "Clojure",
+ "Erlang", "Go", "HTML/CSS", "Haskell", "Javascript",
+ "Julia", "Java", "Lisp", "Python", "PHP", "Perl",
+ "R", "Rust", "Ruby", "Shell scripting" => "Shell",
+ "SQL", "Typescript", :other])),
+ SurveyPart("First time questions",
+ "All of these questions are optional. Answer these if you're doing the survey for the first time.",
+ RadioSelect(:prior_editor,
+ "Which editor did you use before you started using Emacs?",
+ ["None", "Vim", "VS Code", "IntelliJ", "Atom",
+ "Eclipse", "Nodepad++", :other],
+ mandatory=false),
+ TextArea(:emacs_strengths,
+ "What do you think are Emacs' greatest strengths?",
+ validators=[wordlimit(400), charlimit(6*400)],
+ mandatory=false),
+ TextArea(:emacs_dificulties,
+ "Can you recall any difficulties you faced when initially learning Emacs?
Please be as specific and concrete as your memories permit.",
+ validators=[wordlimit(400), charlimit(6*400)],
+ mandatory=false),
+ RadioSelect(:emacs_introduction,
+ "How were you introduced to Emacs?",
+ ["Friend", "University", "Some part of the internet" => "Internet", :other],
+ mandatory=false),
+ MultiSelect(:emacs_motivations,
+ "What features motivated you to initially try Emacs?",
+ ["Extensibility", "Package/ecosystem",
+ "Community", "Part of the GNU project / FSF"],
+ mandatory=false)),
+ SurveyPart("Packages",
+ MultiSelect(:package_manager,
+ "How do you manage third-party packages?",
+ ["My framework/starter kit's default" => "framework default",
+ "package.el (built-in)" => "package.el",
+ "straight.el" => "straight.el",
+ "use-package" => "use-package.el",
+ "manual (git clone/download)" => "manual",
+ "not sure", :other]),
+ MultiSelect(:package_repositories,
+ "Which package repositories do you use?",
+ ["My framework/starter kit's default" => "framework default",
+ "GNU ELPA" => "ELPA", "Melpa", "Melpa Stable",
+ "Built from source (e.g. using straight)" => "Source",
+ "not sure", :other]),
+ TextArea(:favorite_packages,
+ "Could you list some of your favourite packages? (comma-seperated)";
+ validators = [t -> if length(split(t, ',')) < 2
+ "Come on, surely you like at least two packages?"
+ elseif length(split(t, ',')) > 10
+ "That's a lot of packages. Surely you can cut that down to a top 10?"
+ end, wordlimit(30), charlimit(200)]),
+ MultiSelect(:theme, # people can use a light and dark theme
+ "Which theme do you use?",
+ ["The default theme" => "default",
+ "my own custom theme",
+ "doom-one", "dracula", "gruvbox",
+ "modus-operandi", "modus-vivendi", "nord",
+ "solarized", "solarized-dark", "zenburn",
+ :other]),
+ MultiSelect(:org_usage,
+ "Which use cases of Org Mode apply to your usage (if any)?",
+ ["Note taking", "General document writing",
+ "Task management", "Agenda", "Time tracking",
+ "Personal knowledge database (org-roam)" => "org-roam",
+ "Literate programing / notebooks (babel)" => "babel"],
+ mandatory=false),
+ RadioSelect(:magit_usage,
+ "How often do you use Magit?",
+ ["Frequently", "Rarely", "Never"]),
+ RadioSelect(:tramp_usage,
+ "How often do you use TRAMP?",
+ ["Frequently", "Rarely", "Never"]),
+ MultiSelect(:term_package,
+ "Do you use a terminal emulator in Emacs?",
+ ["No", "eshell", "shell", "term", "ansi-term", "vterm", :other]),
+ RadioSelect(:email_package,
+ "Do you use an Email client in Emacs?",
+ ["No", "Gnus", "Mu4e", "notmuch", "Wanderlust", :other]),
+ RadioSelect(:spell_package,
+ "Do you use a spell checker in Emacs?",
+ ["No", "My framework/starter kit's default" => "framework default",
+ "flyspell", "spell-fu", :other]),
+ RadioSelect(:undo_package,
+ "Do you use an undo package in Emacs?",
+ ["No", "My framework/starter kit's default" => "framework default",
+ "undo-tree", "undo-fu", :other]),
+ RadioSelect(:project_package,
+ "Do you use an project management package in Emacs?",
+ ["No", "My framework/starter kit's default" => "framework default",
+ "project.el", "projectile", :other]),
+ MultiSelect(:selection_package,
+ "Do you use any selection packages?",
+ ["No", "My framework/starter kit's default" => "framework default",
+ "Helm", "Ivy", "Ido", "Icomplete",
+ "Vertico", "Selectrum", "Marginalia", "Consult",
+ :other])),
+ SurveyPart("Contribution",
+ RadioSelect(:emacs_contribution,
+ "Have you ever contributed to Emacs or an ELPA package?",
+ ["No", "Occasionaly", "Frequently"]),
+ TextArea(:emacs_contribution_feedback,
+ "Have you got any feedback on the Emacs/ELPA contribution process?",
+ validators=[wordlimit(400), charlimit(6*400)],
+ mandatory=false),
+ RadioSelect(:melpa_contribution,
+ "Have you ever contributed to a Melpa package?",
+ ["No", "Occasionaly", "Frequently"]),
+ RadioSelect(:isa_package_maintainer,
+ "Do you maintain any Emacs packages?",
+ ["Yes", "No"]),
+ RadioSelect(:has_donated,
+ "Have you ever contributed financially to Emacs development (via the FSF)",
+ ["No",
+ "Yes",
+ "I would if I could donate to Emacs directly" => "Would directly",
+ "I would like to, but cannot" => "Cannot"])),
+ SurveyPart("Demographics (all questions are optional)",
+ NumberInput(:respondent_age,
+ "How old are you?",
+ validators = n -> if n < 8
+ "My, you're advanced for you're age. Suspisiously advanced…"
+ elseif n > 100
+ "Congratulations on becoming a centernarian! How about you get one of your grandchildren to do this survey instead?"
+ end,
+ mandatory=false),
+ RadioSelect(:respondent_gender,
+ "What is your gender?",
+ ["Male", "Female", "Other"],
+ mandatory=false),
+ RadioSelect(:respondant_education,
+ "What is the highest level of education you have completed?",
+ ["High school" => "School",
+ "Asosociate's Degree" => "Asosociates",
+ "Bachelor's Degree" => "Bachelors",
+ "Master's Degree" => "Masters",
+ "PhD or equivalent" => "PhD"],
+ mandatory=false),
+ Dropdown(:respondant_nationality,
+ "What is your nationality?",
+ # taken from https://www.gov.uk/government/publications/nationalities/list-of-nationalities
+ ["Afghan", "Albanian", "Algerian", "American", "Andorran", "Angolan", "Anguillan", "Antigua and Barbuda",
+ "Argentine", "Armenian", "Australian", "Austrian", "Azerbaijani", "Bahamian", "Bahraini", "Bangladeshi",
+ "Barbadian", "Belarusian", "Belgian", "Belizean", "Beninese", "Bermudian", "Bhutanese", "Bolivian",
+ "Bosnia and Herzegovina", "Botswanan", "Brazilian", "British", "British Virgin Islander", "Bruneian",
+ "Bulgarian", "Burkinan", "Burmese", "Burundian", "Cambodian", "Cameroonian", "Canadian", "Cape", "Verdean",
+ "Cayman Islander", "Central", "African", "Chadian", "Chilean", "Chinese", "Colombian", "Comoran",
+ "Congolese (Congo)", "Congolese (DRC)", "Cook Islander", "Costa", "Rican", "Croatian", "Cuban", "Cymraes",
+ "Cymro", "Cypriot", "Czech", "Danish", "Djiboutian", "Dominican", "Dominican Republic citizen", "Dutch",
+ "East Timorese", "Ecuadorean", "Egyptian", "Emirati", "English", "Equatorial", "Guinean", "Eritrean", "Estonian",
+ "Ethiopian", "Faroese", "Fijian", "Filipino", "Finnish", "French", "Gabonese", "Gambian", "Georgian",
+ "German", "Ghanaian", "Gibraltarian", "Greek", "Greenlandic", "Grenadian", "Guamanian", "Guatemalan",
+ "Guinea-Bissau citizen", "Guinean", "Guyanese", "Haitian", "Honduran", "Hong", "Konger", "Hungarian", "Icelandic",
+ "Indian", "Indonesian", "Iranian", "Iraqi", "Irish", "Israeli", "Italian", "Ivorian", "Jamaican", "Japanese",
+ "Jordanian", "Kazakh", "Kenyan", "Kittitian", "Kiribati citizen", "Kosovan", "Kuwaiti", "Kyrgyz", "Lao",
+ "Latvian", "Lebanese", "Liberian", "Libyan", "Liechtenstein citizen", "Lithuanian", "Luxembourger",
+ "Macanese", "Macedonian", "Malagasy", "Malawian", "Malaysian", "Maldivian", "Malian", "Maltese",
+ "Marshallese", "Martiniquais", "Mauritanian", "Mauritian", "Mexican", "Micronesian", "Moldovan", "Monegasque",
+ "Mongolian", "Montenegrin", "Montserratian", "Moroccan", "Mosotho", "Mozambican", "Namibian", "Nauruan",
+ "Nepalese", "New Zealander", "Nicaraguan", "Nigerian", "Nigerien", "Niuean", "North Korean", "Northern",
+ "Irish", "Norwegian", "Omani", "Pakistani", "Palauan", "Palestinian", "Panamanian", "Papua", "New", "Guinean",
+ "Paraguayan", "Peruvian", "Pitcairn Islander", "Polish", "Portuguese", "Prydeinig", "Puerto", "Rican",
+ "Qatari", "Romanian", "Russian", "Rwandan", "Salvadorean", "Sammarinese", "Samoan", "Sao", "Tomean",
+ "Saudi Arabian", "Scottish", "Senegalese", "Serbian", "Seychelles citizen", "Sierra", "Leonean",
+ "Singaporean", "Slovak", "Slovenian", "Solomon Islander", "Somali", "South African", "South Korean",
+ "South Sudanese", "Spanish", "Sri", "Lankan", "St Helenian", "St Lucian", "Stateless", "Sudanese",
+ "Surinamese", "Swazi", "Swedish", "Swiss", "Syrian", "Taiwanese", "Tajik", "Tanzanian", "Thai", "Togolese",
+ "Tongan", "Trinidadian", "Tristanian", "Tunisian", "Turkish", "Turkmen", "Turks and Caicos Islander",
+ "Tuvaluan", "Ugandan", "Ukrainian", "Uruguayan", "Uzbek", "Vatican citizen", "Vanuatu citizen",
+ "Venezuelan", "Vietnamese", "Vincentian", "Wallisian", "Welsh", "Yemeni", "Zambian", "Zimbabwean"],
+ mandatory=false),
+ RadioSelect(:respondent_ocupation,
+ "Which industry do you work in?",
+ ["Academia (Student)" => "Student",
+ "Academia/Research" => "Research",
+ "Education", "FinTech",
+ "Healthcare", "Legal", "Manufacturing",
+ "Software Development", "Telecom",
+ :other],
+ mandatory=false)),
+ SurveyPart("Survey bookeeping",
+ RadioSelect(:survey_prior,
+ "Did you respond to the 2020 Emacs survey?",
+ ["Yes", "No"]),
+ RadioSelect(:survey_referrer,
+ "How did you find out about this survey?",
+ ["r/emacs", "Hacker News", "Direct message",
+ "Discord", "Twitter", "Blog post", "Mailing list",
+ "lobste.rs", "Telegram", "Emacs China", "IRC",
+ :other]),
+ RadioSelect(:survey_ux,
+ "How well do you think this survey platform works?",
+ ["Great", "Ok", "Not great"]),
+ TextArea(:survey_feedback,
+ "Do you have any general feedback on the survey?",
+ validators=[wordlimit(200), charlimit(6*200)],
+ mandatory=false)))