using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TidyOS.Views
{
    public partial class PluginsReview : UserControl
    {
        private NavigationManager navigationManager;
        private Dictionary<TreeNode, bool> pendingChanges;
        private PSPluginHandler PSPlugins;

        public PluginsReview(NavigationManager navigationManager, Dictionary<TreeNode, bool> pendingChanges, PSPluginHandler PSPlugins)
        {
            InitializeComponent();

            this.navigationManager = navigationManager;
            this.pendingChanges = pendingChanges;
            this.PSPlugins = PSPlugins;

            LoadSummary();
        }

        private void LoadSummary()
        {
            textSummary.Text = ""; // Clear current content

            if (pendingChanges.Count == 0)
            {
                textSummary.Text = $"No plugins selected. Please select plugins to apply or revert.\n";
                btnRun.Enabled = false;
            }
            else
            {
                // Otherwise, show the status of selected plugins
                int step = 1;
                foreach (var entry in pendingChanges)
                {
                    var node = entry.Key;
                    bool shouldApply = entry.Value;

                    string status = shouldApply ? "To be Applied" : "To be Reverted";
                    string descriptionText = string.Empty;

                    if (node.Tag is JsonPluginHandler plugin)
                    {
                        descriptionText = $"Native Plugin: {plugin.PlugID}\r\n{plugin.PlugInfo}";
                    }
                    else if (node.Tag is string psScriptPath)
                    {
                        descriptionText = $"PowerShell Script: {Path.GetFileName(psScriptPath)}\r\n{psScriptPath}";
                    }

                    // Process layout with indentations
                    textSummary.Text += $"Step {step++}:" + Environment.NewLine; ;
                    textSummary.Text += $"  - Plugin: {node.Text} ({status})" + Environment.NewLine;
                    textSummary.Text += $"    Description: {descriptionText}" + Environment.NewLine;
                    textSummary.Text += $"    Status: [{status}...]" + Environment.NewLine;
                    textSummary.Text += new string('-', 35) + Environment.NewLine; // Separator, 40 dashes for visual clarity
                }
            }
        }

        private async void btnRun_Click(object sender, EventArgs e)
        {
            btnRun.Enabled = false;

            int step = 1;
            foreach (var entry in pendingChanges)
            {
                var node = entry.Key;
                bool shouldApply = entry.Value;

                // Update status to "In Progress"
                UpdateSummaryStatus(step, "In Progress");

                if (shouldApply)
                {
                    if (node.Tag is JsonPluginHandler plugin)
                    {
                        Logger.Log($"Applying plugin: {plugin.PlugID}");
                        await Task.Run(() => plugin.PlugDoFeature()); // Simulate work
                        node.BackColor = Color.LightGreen;
                        Logger.Log($"Activated plugin: {plugin.PlugID}");
                    }
                    else if (node.Tag is string psScriptPath)
                    {
                        Logger.Log($"Executing PowerShell script: {Path.GetFileName(psScriptPath)}");
                        await PSPlugins.ExecutePlugin(psScriptPath);
                        node.BackColor = Color.LightGreen;
                        Logger.Log($"Executed PowerShell script: {Path.GetFileName(psScriptPath)}");
                    }
                }
                else
                {
                    if (node.Tag is JsonPluginHandler plugin)
                    {
                        Logger.Log($"Undoing plugin: {plugin.PlugID}");
                        await Task.Run(() => plugin.PlugUndoFeature()); // Simulate work
                        node.BackColor = Color.LightGray;
                        Logger.Log($"Deactivated plugin: {plugin.PlugID}");
                    }
                    else if (node.Tag is string psScriptPath)
                    {
                        Logger.Log($"PowerShell script cannot be undone: {Path.GetFileName(psScriptPath)}");
                        node.BackColor = Color.LightGray;
                    }
                }

                // Update status to "Completed" or "Reverted"
                UpdateSummaryStatus(step, shouldApply ? "Completed" : "Reverted");

                step++;
            }

            btnRun.Enabled = true;
            Logger.Log("Execution completed.");
            pendingChanges.Clear();
        }

        // Helper method to update the status in the summary
        private void UpdateSummaryStatus(int step, string newStatus)
        {
            string[] lines = textSummary.Lines;
            string stepPrefix = $"Step {step}:";
            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i].StartsWith(stepPrefix))
                {
                    // Find the line starting with "Status:" under this step
                    for (int j = i + 1; j < lines.Length; j++)
                    {
                        if (lines[j].TrimStart().StartsWith("Status:"))
                        {
                            lines[j] = $"    Status: [{newStatus}]";
                            break;
                        }
                    }
                    break;
                }
            }
            textSummary.Lines = lines;
        }

        private void btnViewScript_Click(object sender, EventArgs e)
        {
            StringBuilder scriptDisplay = new StringBuilder();
            bool scriptFound = false;

            foreach (var entry in pendingChanges)

            if (scriptFound)
            {
                textSummary.Text = scriptDisplay.ToString();
            }
            else
            {
                MessageBox.Show("No checked scripts found to display.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}

{
                var node = entry.Key;
                bool shouldApply = entry.Value;
                if (shouldApply && node.Tag is string scriptPath && File.Exists(scriptPath))
                {
                    scriptFound = true;
                    string scriptContent = File.ReadAllText(scriptPath);
                    scriptDisplay.AppendLine($"--- Content of {Path.GetFileName(scriptPath)} ---");
                    scriptDisplay.AppendLine(scriptContent);
                    scriptDisplay.AppendLine(new string('-', 50));
                }
            }

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Windows.Forms;
using Views;

namespace TidyOS.Views
{
    public partial class PluginsView : UserControl
    {
        private PSPluginHandler PSPlugins;
        private NavigationManager navigationManager;
        private Dictionary<TreeNode, bool> pendingChanges = new Dictionary<TreeNode, bool>();
        private static readonly HttpClient httpClient = new HttpClient();
        private readonly string pluginsDirectory = Path.Combine(Application.StartupPath, "plugins");

        public PluginsView(NavigationManager navigationManager)
        {
            InitializeComponent();
            this.navigationManager = navigationManager;
            InitializeUI();
        }

        // Set up the form controls
        private void InitializeUI()
        {
            btnPluginsDir.Text = "\uED25"; // Folder icon
            btnRefresh.Text = "\uE72C"; // Refresh icon
        }

        private void PluginsView_Load(object sender, EventArgs e)
        {
            LoadPlugins();
        }

        public async void LoadPlugins()
        {
            // Load native JSON plugins
            await JsonPluginHandler.LoadPlugins(pluginsDirectory, treePlugins.Nodes);
            Logger.Log("Plugins [Native] initialized");

            // Load PowerShell plugins
            PSPlugins = new PSPluginHandler();
            PSPlugins.LoadPowerShellPlugins(treePlugins);
            Logger.Log("Plugins [PS] initialized.");

            // Expand all nodes
            ExpandAllNodes(treePlugins.Nodes);
        }

        private void ExpandAllNodes(TreeNodeCollection nodes)
        {
            foreach (TreeNode node in nodes)
            {
                node.Expand();
                ExpandAllNodes(node.Nodes);
            }
        }

        private void treePlugins_AfterCheck(object sender, TreeViewEventArgs e)
        {
            var node = e.Node;
            bool shouldApply = node.Checked;

            pendingChanges[node] = shouldApply;
            node.BackColor = shouldApply ? Color.LimeGreen : Color.PaleVioletRed;

            LogLevel logLevel = shouldApply ? LogLevel.Info : LogLevel.Warning;

            if (node.Tag is JsonPluginHandler jsonPlugin)
            {
                Logger.Log($"{(shouldApply ? "Activated" : "Deactivated")} Plugin: {jsonPlugin.PlugID}", logLevel);
            }
            else if (node.Tag is string psScriptPath)
            {
                Logger.Log($"{(shouldApply ? "Activated" : "Deactivated")} PowerShell script: {Path.GetFileName(psScriptPath)}", logLevel);
            }
        }

        // Refresh the tree view
        public void RefreshPlugins()
        {
            treePlugins.Nodes.Clear();

            // Reload
            LoadPlugins();
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            RefreshPlugins();
        }

        private void btnPluginsDir_Click(object sender, EventArgs e)
        {
            try
            {
                Process.Start("explorer.exe", pluginsDirectory);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Failed to open plugins directory: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnImport_Click(object sender, EventArgs e)
        {
            using (var folderBrowserDialog = new FolderBrowserDialog())
            {
                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    string sourceDirectory = folderBrowserDialog.SelectedPath;
                    string[] files = Directory.GetFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly)
                        .Where(file => file.EndsWith(".json") || file.EndsWith(".ps1")).ToArray();

                    List<string> importedPlugins = new List<string>(); // List to store imported plugin names

                    foreach (var file in files)
                    {
                        try
                        {
                            string fileName = Path.GetFileName(file);
                            string destinationPath = Path.Combine(pluginsDirectory, fileName);
                            File.Copy(file, destinationPath, true); // Overwrite if file exists
                            importedPlugins.Add(fileName); // Add to the imported plugins list
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show($"Failed to import {file}: {ex.Message}");
                        }
                    }

                    // Show imported plugins
                    if (importedPlugins.Count > 0)
                    {
                        string message = "Imported Plugins:\n" + string.Join("\n", importedPlugins);
                        MessageBox.Show(message, "Import Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("No plugins were imported.", "Import Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            var pluginsReview = new PluginsReview(navigationManager, pendingChanges, PSPlugins);
            navigationManager.SwitchView(pluginsReview); // Switch view using the shared NavigationManager
        }

    }
}

using Newtonsoft.Json;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TidyOS
{
    public class JsonPluginHandler
    {
        public string PlugID { get; set; }
        public string PlugInfo { get; set; }
        public string[] PlugCheck { get; set; }
        public string[] PlugDo { get; set; }
        public string[] PlugUndo { get; set; }
        public string PlugCategory { get; set; }
        public bool? PlugDefaultState { get; set; }

        public bool PlugCheckFeature()
        {
            bool isFeatureActive = true;
            foreach (var command in PlugCheck)
            {
                if (!ExecuteCommandAndCheckResult(command))
                {
                    isFeatureActive = false;
                    break;
                }
            }
            Logger.Log($"Feature '{PlugID}' is {(isFeatureActive ? "active" : "inactive")}");
            return isFeatureActive;
        }

        // PlugCheck Helper to execute commands and check the result
        private bool ExecuteCommandAndCheckResult(string command)
        {
            try
            {
                var process = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = "cmd.exe",
                        Arguments = $"/c {command}",
                        RedirectStandardOutput = true,
                        UseShellExecute = false,
                        CreateNoWindow = true,
                    }
                };
                process.Start();
                process.WaitForExit();

                // Read the output of the command
                string output = process.StandardOutput.ReadToEnd();

                // Check if output contains "1" (indicating active) or "0" (indicating inactive)
                bool isActive = output.Contains("1");

                //Logger.Log($"Plugin executed successfully: {command}. Result: {(isActive ? "active" : "inactive")}", System.Drawing.Color.Black);
                return isActive;
            }
            catch (Exception ex)
            {
                Logger.Log($"Error executing plugin: {command}. Exception: {ex.Message}", LogLevel.Error);
                return false;
            }
        }

        public async void PlugDoFeature()
        {
            await ExecuteFeatureCommands(PlugDo);
        }

        public async void PlugUndoFeature()
        {
            await ExecuteFeatureCommands(PlugUndo);
        }

        private async Task ExecuteFeatureCommands(string[] commands)
        {
            foreach (var command in commands)
            {
                await ExecuteCommand(command);
            }
        }

        private async Task ExecuteCommand(string command)
        {
            try
            {
                var process = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = IsPowerShellCommand(command) ? "powershell.exe" : "cmd.exe",
                        Arguments = IsPowerShellCommand(command) ? $"-Command \"{command}\"" : $"/c \"{command}\"",
                        RedirectStandardOutput = true,
                        RedirectStandardError = true,
                        UseShellExecute = false,
                        CreateNoWindow = true,
                    }
                };

                // Event handler for handling output data
                process.OutputDataReceived += (sender, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        Logger.Log($"Output: {e.Data}");
                    }
                };

                // Event handler for handling error data
                process.ErrorDataReceived += (sender, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        Logger.Log($"Error: {e.Data}", LogLevel.Error);
                    }
                };

                process.Start();

                // Begin asynchronous reading of the output and error streams
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                // Wait for the process to exit
                await process.WaitForExitAsync();

                // Log command execution
                Logger.Log($"Plugin executed command: {command}");
            }
            catch (Exception ex)
            {
                Logger.Log($"Error executing plugin: {command}. Exception: {ex.Message}", LogLevel.Error);
            }
        }

        // Determine if command should be run with Ps
        private bool IsPowerShellCommand(string command)
        {
            return command.StartsWith("powershell.exe") || command.Contains("Get-") || command.Contains("Set-");
        }

        // Get plugin information
        public string GetPluginInformation()
        {
            return $"{PlugInfo.Replace("\\n", Environment.NewLine)}";
        }

        private static void AddToPluginCategory(TreeNodeCollection pluginCategory, TreeNode node, string category)
        {
            if (pluginCategory == null)
                throw new ArgumentNullException(nameof(pluginCategory));
            var existingCategory = pluginCategory.Cast<TreeNode>().FirstOrDefault(n => n.Text == category);

            if (existingCategory == null)
            {
                existingCategory = new TreeNode(category)
                {
                    BackColor = System.Drawing.Color.LightBlue,
                    ForeColor = System.Drawing.Color.Black
                };
                pluginCategory.Add(existingCategory);
            }

            existingCategory.Nodes.Add(node);
        }

        public static async Task LoadPlugins(string pluginDirectory, TreeNodeCollection pluginCategory)
        {
            if (Directory.Exists(pluginDirectory))
            {
                var pluginFiles = Directory.GetFiles(pluginDirectory, "*.json");

                foreach (var file in pluginFiles)
                {
                    // Exclude bloatware filter files starting with "_"
                    var fileName = Path.GetFileName(file);
                    if (fileName.StartsWith("_", StringComparison.OrdinalIgnoreCase) &&
                        fileName.EndsWith(".json", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }

                    try
                    {
                        var json = File.ReadAllText(file);
                        var plugin = JsonConvert.DeserializeObject<JsonPluginHandler>(json);

                        if (plugin != null)
                        {
                            // Execute PlugCheck if available
                            bool isActive = false;
                            if (plugin.PlugCheck != null && plugin.PlugCheck.Any())
                            {
                                isActive = plugin.PlugCheckFeature();
                            }
                            else if (plugin.PlugDefaultState.HasValue)
                            {
                                // Use PlugDefaultState if no PlugCheck is defined
                                isActive = plugin.PlugDefaultState.Value;
                            }

                            var pluginNode = new TreeNode(plugin.PlugID)
                            {
                                ToolTipText = plugin.PlugInfo,
                                Checked = isActive,
                                Tag = plugin // Store plugin object in Tag property
                            };

                            // Add to the appropriate category
                            AddToPluginCategory(pluginCategory, pluginNode, plugin.PlugCategory);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Log($"Error loading plugin from file '{file}': {ex.Message}", LogLevel.Error);
                    }
                }
            }
        }
    }
}

public static class ProcessExtensions
{
    public static async Task WaitForExitAsync(this Process process)
    {
        var tcs = new TaskCompletionSource<bool>();
        process.EnableRaisingEvents = true;
        process.Exited += (sender, args) => tcs.TrySetResult(true);
        await tcs.Task;
    }
}

using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

public class PSPluginHandler
{
    public void LoadPowerShellPlugins(TreeView treeView)
    {
        var scriptDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins");

        if (!Directory.Exists(scriptDirectory))
        {
            MessageBox.Show("plugins directory does not exist.");
            return;
        }

        // Create a Plugins category in the TreeView
        TreeNode dependencyCategory = new TreeNode("Plugins");
        treeView.Nodes.Add(dependencyCategory);
        dependencyCategory.BackColor = System.Drawing.Color.LightBlue;
        dependencyCategory.ForeColor = System.Drawing.Color.Black;

        var scriptFiles = Directory.GetFiles(scriptDirectory, "*.ps1");

        foreach (var file in scriptFiles)
        {
            var scriptName = Path.GetFileNameWithoutExtension(file);

            // Create a TreeNode for each ps script
            var scriptNode = new TreeNode
            {
                ToolTipText = file,
                Text = $"{scriptName} [PS]",
                Tag = file // Store the file path as the Tag
            };

            // Add the script node to the Dependecy category
            dependencyCategory.Nodes.Add(scriptNode);
        }
    }

    // Execute the selected PowerShell script
    public async Task ExecutePlugin(string pluginPath)
    {
        try
        {
            using (var process = new Process())
            {
                process.StartInfo.FileName = "powershell.exe";
                process.StartInfo.Arguments = $"-NoProfile -ExecutionPolicy Bypass -File \"{pluginPath}\"";
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;

                var outputBuilder = new StringBuilder();
                var errorBuilder = new StringBuilder();

                // Handle output from PowerShell script
                process.OutputDataReceived += (sender, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        outputBuilder.AppendLine(e.Data);
                        Logger.Log($"PowerShell script output: {e.Data}");
                    }
                };

                // Handle error from PowerShell script
                process.ErrorDataReceived += (sender, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        errorBuilder.AppendLine(e.Data);
                        Logger.Log($"PowerShell script error: {e.Data}", LogLevel.Error);
                    }
                };

                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                await Task.Run(() =>
                {
                    process.WaitForExit();
                });

                Logger.Log($"PowerShell script executed successfully: {pluginPath}");
            }
        }
        catch (Exception ex)
        {
            Logger.Log($"Error executing PowerShell script: {pluginPath}. Exception: {ex.Message}");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Views;

namespace TidyOS.Views
{
    public partial class ExperienceView : UserControl
    {
        private FeatureCatalog experienceManager;
        private List<FeatureBase> allFeatures;
        private int selectedCategoryIndex = 0; //Store the index of the selected category

        public ExperienceView()
        {
            InitializeComponent();
            experienceManager = new FeatureCatalog();
            PopulateCategories();
            LoadFeatures("Start");
        }

        private void LoadFeatures(string category)
        {
            allFeatures = experienceManager.GetFeatures(category);
            UpdateFeatureList(allFeatures);
        }

        private void UpdateFeatureList(List<FeatureBase> features)
        {
            clbFeatures.Items.Clear();

            foreach (var feature in features)
            {
                var item = new FeatureListItem(feature);
                clbFeatures.Items.Add(item, feature.CheckFeature());
            }
        }

        private void textSearch_TextChanged(object sender, EventArgs e)
        {
            string search = textSearch.Text.ToLower();

            var filtered = allFeatures
                .Where(f =>
                    f.ID().ToLower().Contains(search) ||
                    f.Info().ToLower().Contains(search))
                .ToList();

            UpdateFeatureList(filtered);
        }

        // Update the category label with the selected category's name
        private void UpdateCategoryLabel(int categoryIndex)
        {
            lblExperienceCategory.Text = experienceManager.GetCategories()[categoryIndex]; // Update label to show selected category
        }

        // Load the features of the selected category into the CheckedListBox
        private void LoadExperienceFeatures(int categoryIndex)
        {
            clbFeatures.Items.Clear();

            // Get features for the selected category
            var features = experienceManager.GetFeatures(experienceManager.GetCategories()[categoryIndex]);

            foreach (var feature in features)
            {
                var item = new FeatureListItem(feature);
                int index = clbFeatures.Items.Add(item);
                clbFeatures.SetItemChecked(index, feature.CheckFeature()); // Set checked state based on feature status
            }
        }

        // Populate categories into the FlowPanel with circular buttons
        private void PopulateCategories()
        {
            // Clear any previous category buttons
            flowPanelCategories.Controls.Clear();

            // Get the list of categories
            var categories = experienceManager.GetCategories();

            // Loop through categories to create buttons
            for (int i = 0; i < categories.Count; i++)
            {
                var btn = new Button
                {
                    Text = "●",
                    Width = 25,
                    Height = 25,
                    FlatStyle = FlatStyle.Flat,
                    FlatAppearance = { BorderSize = 0 },
                    Tag = i  // Store the index for category selection
                };

                if (i == 0)
                {
                    btn.ForeColor = Color.Magenta; // Highlight the default (first) category
                }
                else
                {
                    btn.ForeColor = Color.Gray; // Standard color for other buttons
                }

                // Set the tooltip to show the category name
                tt.SetToolTip(btn, categories[i]);

                // Add the button's click event handler
                btn.Click += CategoryButton_Click;

                // Add the button to the FlowPanel
                flowPanelCategories.Controls.Add(btn);
            }

            // Initialize the first category by default
            selectedCategoryIndex = 0;
            UpdateCategoryLabel(0);
            LoadExperienceFeatures(0);  // Load features for the first category
        }

        private void CategoryButton_Click(object sender, EventArgs e)
        {
            Button clickedButton = sender as Button;
            int categoryIndex = (int)clickedButton.Tag;

            // Update selected category index
            selectedCategoryIndex = categoryIndex;

            // Update the category label with the new category name
            UpdateCategoryLabel(categoryIndex);

            // Highlight the selected button
            HighlightSelectedCategoryButton(categoryIndex);

            // Load features of the selected category into the CheckedListBox
            LoadExperienceFeatures(categoryIndex);
        }

        // Highlight the button for the selected category
        private void HighlightSelectedCategoryButton(int selectedIndex)
        {
            for (int i = 0; i < flowPanelCategories.Controls.Count; i++)
            {
                if (flowPanelCategories.Controls[i] is Button btn)
                {
                    btn.ForeColor = (i == selectedIndex) ? Color.Magenta : Color.Gray;
                }
            }
        }

        private void clbFeatures_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (clbFeatures.Items[e.Index] is FeatureListItem item)
            {
                FeatureBase feature = item.Feature;
                bool enable = (e.NewValue == CheckState.Checked);

                bool success = enable ? feature.DoFeature() : feature.UndoFeature();

                if (!success)
                {
                    // MessageBox.Show("Action failed", "Fehler");
                    Logger.Log($"Failed to {(enable ? "enable" : "disable")} {feature.ID()}", LogLevel.Error);
                    // Reset the checkbox to its previous state
                    clbFeatures.SetItemCheckState(e.Index, e.CurrentValue); // old value
                }
                else
                {
                    Logger.Log($"{feature.ID()} {(enable ? "enabled" : "disabled")}", LogLevel.Info);
                }
            }
        }

        private void textSearch_Click(object sender, EventArgs e)
        {
            textSearch.Clear();
        }

        private void btnApply_Click(object sender, EventArgs e)
        {
            // Get the features for the selected category
            var features = experienceManager.GetFeatures(experienceManager.GetCategories()[selectedCategoryIndex]);

            // Loop through all features and activate them
            foreach (var feature in features)
            {
                if (!feature.CheckFeature())
                {
                    feature.DoFeature();
                }
            }

            // Reload the features to update the UI
            LoadExperienceFeatures(selectedCategoryIndex);
        }

        private void btnRevert_Click(object sender, EventArgs e)
        {
            // Get the features for the selected category
            var features = experienceManager.GetFeatures(experienceManager.GetCategories()[selectedCategoryIndex]);

            // Loop through all features and deactivate them
            foreach (var feature in features)
            {
                if (feature.CheckFeature())
                {
                    feature.UndoFeature();
                }
            }

            // Reload the features to update the UI
            LoadExperienceFeatures(selectedCategoryIndex);
        }

        /// <summary>
        /// Handles the CheckedChanged event for switching between showing the feature ID and description.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbToggleDescription_CheckedChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < clbFeatures.Items.Count; i++)
            {
                if (clbFeatures.Items[i] is FeatureListItem item)
                {
                    if (cbToggleDescription.Checked)
                    {
                        // Show the description when checked
                        clbFeatures.Items[i] = new FeatureListItem(item.Feature) { DisplayText = item.Feature.Info() };
                    }
                    else
                    {
                        // Show the ID when unchecked
                        clbFeatures.Items[i] = new FeatureListItem(item.Feature) { DisplayText = item.Feature.ID() };
                    }
                }
            }

            // Refresh the CheckedListBox to show the changes
            clbFeatures.Refresh();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using TidyOS.Properties; // for Resources.PredefinedApps
using Windows.Foundation;
using Windows.Management.Deployment;

namespace TidyOS.Views
{
    public partial class AppManagerView : UserControl
    {
        // Stores app name to full package name mapping
        private readonly Dictionary<string, string> appDirectory = new Dictionary<string, string>();

        // Holds all app names for filtering
        private readonly List<string> allPackages = new List<string>();

        // Keeps track of successfully/failed uninstalled apps
        private readonly List<string> uninstallSuccessList = new List<string>();

        private readonly List<string> uninstallFailedList = new List<string>();

        public AppManagerView(NavigationManager navigationManager)
        {
            InitializeComponent();
            LoadApps();
            InitializeUI();
        }

        // Set up the form controls
        private void InitializeUI()
        {
            btnRefresh.Text = "\uE72C"; // Refresh icon
        }

        // Loads apps and filters them against predefined list
        private void LoadApps()
        {
            Task.Run(async () =>
            {
                await RetrieveApps(true);
                Invoke(new MethodInvoker(FilterAppsByPredefined));
            });
        }

        // Retrieves installed apps using PackageManager API
        private async Task RetrieveApps(bool reset)
        {
            if (reset)
            {  // Clear UI elements on the UI thread
                Invoke(new MethodInvoker(() =>
                {
                    checkedListBoxApps.Items.Clear();
                }));

                appDirectory.Clear();
                allPackages.Clear();
            }

            var packageManager = new PackageManager();
            // Run package lookup on a background thread to avoid UI freezing
            var packages = await Task.Run(() => packageManager.FindPackagesForUserWithPackageTypes(string.Empty, PackageTypes.Main));

            foreach (var package in packages)
            {
                string appName = package.Id.Name;
                string fullName = package.Id.FullName;
                // Avoid duplicates
                if (!appDirectory.ContainsKey(appName))
                {
                    // Update internal tracking
                    appDirectory[appName] = fullName;
                    allPackages.Add(appName);

                    // Invoke to update UI on the main thread
                    Invoke(new MethodInvoker(() => checkedListBoxApps.Items.Add(appName)));
                }
            }
        }

        // Triggered when the Remove button is clicked
        private async void btnRemove_Click(object sender, EventArgs e)
        {
            Enabled = false;
            uninstallSuccessList.Clear();
            uninstallFailedList.Clear();

            //nothing selected?
            if (checkedListBoxApps.CheckedItems.Count == 0)
            {
                MessageBox.Show("You haven't selected anything!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Enabled = true;
                return;
            }

            // Confirm uninstall of selected apps
            var selectedApps = string.Join(Environment.NewLine, checkedListBoxApps.CheckedItems.Cast<string>());
            if (MessageBox.Show($"Are you sure you want to uninstall the following apps?\n\n{selectedApps}", "Confirm uninstall", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
            {
                Enabled = true;
                return;
            }

            try
            {
                // Uninstall selected apps
                foreach (string packageName in checkedListBoxApps.CheckedItems)
                    await UninstallApp(packageName);

                // Refresh the app list and update UI
                await RetrieveApps(true);
                Invoke(new MethodInvoker(DisplayUninstallResults)); // Show results
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error during uninstallation: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                Enabled = true; // Re-enable controls
            }
        }

        // Uninstalls an app by its package name
        private async Task UninstallApp(string packageName)
        {
            string packageFullName;
            if (!appDirectory.TryGetValue(packageName, out packageFullName)) return;

            try
            {
                var packageManager = new PackageManager();
                var deploymentOperation = packageManager.RemovePackageAsync(packageFullName);

                var resetEvent = new ManualResetEvent(false);
                deploymentOperation.Completed = (op, status) => resetEvent.Set();
                await Task.Run(() => resetEvent.WaitOne());

                if (deploymentOperation.Status == AsyncStatus.Completed)
                {
                    uninstallSuccessList.Add(packageFullName);
                    Logger.Log("Successfully uninstalled: " + packageFullName);
                }
                else
                {
                    uninstallFailedList.Add(packageFullName);
                    Logger.Log("Failed to uninstall: " + packageFullName + " - Error: " + deploymentOperation.ErrorCode);
                }
            }
            catch (Exception ex)
            {
                uninstallFailedList.Add(packageFullName);
                Logger.Log("Exception while uninstalling " + packageFullName + ": " + ex.Message);
            }

            appDirectory.Remove(packageName);
        }

        // Displays summary after uninstall process completes
        private void DisplayUninstallResults()
        {
            string message = "App uninstall finished!\n\nOf the " + (uninstallSuccessList.Count + uninstallFailedList.Count) + " total app(s), " + uninstallSuccessList.Count + " were uninstalled.\n\n";

            if (uninstallSuccessList.Count > 0)
                message += "Successfully uninstalled:\n" + string.Join("\n", uninstallSuccessList);

            if (uninstallFailedList.Count > 0)
                message += "\nFailed to uninstall:\n" + string.Join("\n", uninstallFailedList);

            MessageBox.Show(message, "TidyOS", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        // Filters the app list using predefined package names from resources
        private void FilterAppsByPredefined()
        {
            // Get the predefined apps from the resource
            string predefined = Resources.PredefinedApps;
            if (string.IsNullOrWhiteSpace(predefined)) return;

            // Split the predefined string into individual app names, trimmed of any leading/trailing whitespace
            string[] predefinedApps = predefined.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                                .Select(app => app.Trim())
                                                .ToArray();

            // Update the filter text with the predefined apps (comma-separated)
            textFilter.Text = string.Join(", ", predefinedApps);
            // Filter the app list based on the predefined apps
            FilterAppsBySearch(predefinedApps);
        }

        // Filters the app list based on the search string (now works with predefined app names)
        private void FilterAppsBySearch(string[] searchTerms = null)
        {
            // Use the text from the filter if no predefined apps are provided
            if (searchTerms == null)
            {
                searchTerms = textFilter.Text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                             .Select(term => term.Trim())
                                             .ToArray();
            }
            checkedListBoxApps.Items.Clear();

            // Add apps that match the search term
            foreach (string appName in allPackages)
            {
                // Check if the app name or full name matches any of the predefined apps
                if (searchTerms.Any(term => appName.ToLower().Contains(term.ToLower())))
                {
                    checkedListBoxApps.Items.Add(appName);
                }
            }
        }

        private void textFilter_TextChanged(object sender, EventArgs e)
        {
            FilterAppsBySearch();
        }

        // Opens the online feed with known bloatware app names
        private void btnAppsFeed_Click(object sender, EventArgs e)
        {
            Process.Start(new ProcessStartInfo("https://github.com/builtbybel/TidyOS/blob/main/bloatware_feed.txt") { UseShellExecute = true });
            MessageBox.Show(
                "The Bloatware Feed is now open. Copy the app names from the list and paste them into the text field above. The app will then search for matches.",
                "Bloatware Feed Instructions",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information
            );
        }

        // Reloads the app list
        private void btnShowAllInstalled_Click(object sender, EventArgs e)
        {
            textFilter.Text = string.Empty;
            checkedListBoxApps.Items.Clear();

            foreach (var appName in allPackages)
            {
                checkedListBoxApps.Items.Add(appName);
            }
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            FilterAppsByPredefined();
        }

        private void btnSelect_Click(object sender, EventArgs e)
        {
            bool shouldCheck = checkedListBoxApps.CheckedItems.Count < checkedListBoxApps.Items.Count;

            for (int i = 0; i < checkedListBoxApps.Items.Count; i++)
            {
                checkedListBoxApps.SetItemChecked(i, shouldCheck);
            }

            btnSelect.Text = shouldCheck ? "Unselect All" : "Select All";
        }
    }
}

using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace TidyOS.Views
{
    public partial class AboutView : UserControl
    {
        public AboutView()
        {
            InitializeComponent();
            InitializeUI();
        }

        private void InitializeUI()
        {
            lblAppVersion.Text = $"Version: {Program.GetAppVersion()}";
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            Updater.Utils.CheckForAppUpdates();
        }

        private void btnGitHub_Click(object sender, EventArgs e)
        {
            Process.Start("https://github.com/builtbybel/TidyOS");
        }

        private void btnOpenLog_Click(object sender, EventArgs e)
        {
            try
            {
                string exePath = AppDomain.CurrentDomain.BaseDirectory;
                string logPath = Path.Combine(exePath, "app.log");

                if (File.Exists(logPath))
                {
                    Process.Start(new ProcessStartInfo
                    {
                        FileName = logPath,
                        UseShellExecute = true // Let Windows pick the default app
                    });
                }
                else
                {
                    MessageBox.Show("Looks like no logs have been generated yet. Run the app first to create some logs.",
                        "No Log File Found", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Whoops! Something went wrong while trying to open the log file:\n\n{ex.Message}",
                    "Oops, Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
    }
}

using System;
using System.Windows.Forms;
using TidyOS.Views;

namespace TidyOS
{
    public static class NavigationHandler
    {
        // Cached views to prevent re-instantiation
        private static ExperienceView _experienceView;
        private static AppManagerView _appManagerView;
        private static PluginsView _pluginsView;
        private static AboutView _aboutView;

        /// <summary>
        /// Initializes navigation buttons and binds click events to view switching.
        /// Views are created lazily upon first access.
        /// Buttons are disabled when the default view (ExperienceView) is shown.
        /// </summary>
        /// <param name="btnExperience">Button to show Experience view</param>
        /// <param name="btnApps">Button to show App Manager view</param>
        /// <param name="btnPlugins">Button to show Plugins view</param>
        /// <param name="btnBack">Button to go back to the previous view</param>
        /// <param name="btnAbout">Button to show About view</param>
        /// <param name="navigationManager">The navigation manager instance</param>
        public static void InitializeNavigation(
            Button btnExperience,
            Button btnApps,
            Button btnPlugins,
            Button btnAbout,
            Button btnBack,
            Label lblHeader,
            NavigationManager navigationManager)
        {
            if (btnExperience == null || btnApps == null || btnPlugins == null || btnBack == null || btnAbout == null || lblHeader == null || navigationManager == null)
                return;

            // Navigation button event handlers
            btnExperience.Click += (s, e) =>
            {
                if (_experienceView == null)
                    _experienceView = new ExperienceView();

                lblHeader.Text = "Customizing";
                btnExperience.Enabled = false;   // Disable btnExperience if ExperienceView is active
                navigationManager.SwitchView(_experienceView);
            };

            btnApps.Click += (s, e) =>
            {
                if (_appManagerView == null)
                    _appManagerView = new AppManagerView(navigationManager);

                lblHeader.Text = "Debloating";
                btnExperience.Enabled = true;
                navigationManager.SwitchView(_appManagerView);
            };

            btnPlugins.Click += (s, e) =>
            {
                if (_pluginsView == null)
                    _pluginsView = new PluginsView(navigationManager);

                lblHeader.Text = "Scripting";
                btnExperience.Enabled = true;
                navigationManager.SwitchView(_pluginsView);
            };

            btnAbout.Click += (s, e) =>
            {
                if (_aboutView == null)
                    _aboutView = new AboutView();

                lblHeader.Text = "Settings";
                btnExperience.Enabled = true;
                navigationManager.SwitchView(_aboutView);
            };

            // Back button event handler
            btnBack.Click += (s, e) =>
            {
                btnExperience.Enabled = true;
                navigationManager.GoBack();

                if (navigationManager.CurrentView is ExperienceView)
                    lblHeader.Text = "Customizing";
                else if (navigationManager.CurrentView is AppManagerView)
                    lblHeader.Text = "Debloating";
                else if (navigationManager.CurrentView is PluginsView)
                    lblHeader.Text = "Scripting";
                else if (navigationManager.CurrentView is AboutView)
                    lblHeader.Text = "Settings";
            };
        }

        /// <summary>
        /// Loads and shows the default view when the form is first shown.
        /// </summary>
        /// <param name="navigationManager">The navigation manager instance</param>
        public static void LoadDefaultView(NavigationManager navigationManager, Button btnExperience, Label lblHeader)
        {
            if (_experienceView == null)
                _experienceView = new ExperienceView();

            lblHeader.Text = "TidyOS"; // Default header text
            btnExperience.Enabled = false;             // Disable btnExperience when ExperienceView is loaded
            navigationManager.SwitchView(_experienceView);
        }
    }
}

using System;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Windows.Forms;
using TidyOS;

namespace Updater
{
    public static class Utils
    {
        // Check for app updates
        public static bool CheckForAppUpdates()
        {
            if (!IsInternetAvailable())
            {
                MessageBox.Show("No internet connection. Update check failed.", "Update", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            try
            {
                string versionInfoUrl = "https://raw.githubusercontent.com/builtbybel/TidyOS/main/src/TidyOS/Properties/AssemblyInfo.cs";
                string assemblyInfo = new WebClient().DownloadString(versionInfoUrl);

                string latestVersion = assemblyInfo
                    .Split('\n')
                    .FirstOrDefault(line => line.Contains("[assembly: AssemblyFileVersion"))?
                    .Split('"')[1]; // Extract version string

                if (latestVersion == Program.GetAppVersion())
                {
                    MessageBox.Show("No new updates available.", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return false;
                }
                else
                {
                    string downloadUrl = "https://github.com/builtbybel/TidyOS/releases";

                    if (MessageBox.Show($"App version {latestVersion} is available.\nOpen the download page?",
                                        "App Update Available",
                                        MessageBoxButtons.YesNo,
                                        MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        Process.Start(downloadUrl);
                    }
                    return true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Failed to check for updates. {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }

        // Check Internet connectivity
        private static bool IsInternetAvailable()
        {
            try
            {
                using (var client = new WebClient())
                using (client.OpenRead("http://clients3.google.com/generate_204"))
                {
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }
    }
}

namespace TidyOS.Views
{
    partial class PluginsReview
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Komponenten-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.lblHeader = new System.Windows.Forms.Label();
            this.btnViewScript = new System.Windows.Forms.Button();
            this.textSummary = new System.Windows.Forms.TextBox();
            this.btnRun = new System.Windows.Forms.Button();
            this.panelHeader = new System.Windows.Forms.Panel();
            this.panelHeader.SuspendLayout();
            this.SuspendLayout();
            //
            // lblHeader
            //
            this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lblHeader.AutoEllipsis = true;
            this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 12F, System.Drawing.FontStyle.Bold);
            this.lblHeader.ForeColor = System.Drawing.Color.Black;
            this.lblHeader.Location = new System.Drawing.Point(34, 22);
            this.lblHeader.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lblHeader.Name = "lblHeader";
            this.lblHeader.Size = new System.Drawing.Size(489, 29);
            this.lblHeader.TabIndex = 263;
            this.lblHeader.Text = "Review your selections";
            this.lblHeader.UseCompatibleTextRendering = true;
            //
            // btnViewScript
            //
            this.btnViewScript.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnViewScript.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(39)))), ((int)(((byte)(39)))), ((int)(((byte)(39)))));
            this.btnViewScript.FlatAppearance.BorderColor = System.Drawing.Color.Black;
            this.btnViewScript.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnViewScript.Font = new System.Drawing.Font("Segoe UI Variable Display", 8.5F);
            this.btnViewScript.ForeColor = System.Drawing.Color.White;
            this.btnViewScript.Location = new System.Drawing.Point(408, 532);
            this.btnViewScript.Margin = new System.Windows.Forms.Padding(4);
            this.btnViewScript.Name = "btnViewScript";
            this.btnViewScript.Size = new System.Drawing.Size(115, 27);
            this.btnViewScript.TabIndex = 264;
            this.btnViewScript.TabStop = false;
            this.btnViewScript.Text = "View script";
            this.btnViewScript.UseCompatibleTextRendering = true;
            this.btnViewScript.UseVisualStyleBackColor = false;
            this.btnViewScript.Click += new System.EventHandler(this.btnViewScript_Click);
            //
            // textSummary
            //
            this.textSummary.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.textSummary.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252)))));
            this.textSummary.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.textSummary.Font = new System.Drawing.Font("Segoe UI Variable Display", 9.75F);
            this.textSummary.ForeColor = System.Drawing.Color.Black;
            this.textSummary.Location = new System.Drawing.Point(33, 91);
            this.textSummary.Margin = new System.Windows.Forms.Padding(4);
            this.textSummary.Multiline = true;
            this.textSummary.Name = "textSummary";
            this.textSummary.ReadOnly = true;
            this.textSummary.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.textSummary.Size = new System.Drawing.Size(494, 433);
            this.textSummary.TabIndex = 262;
            //
            // btnRun
            //
            this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnRun.AutoEllipsis = true;
            this.btnRun.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(79)))), ((int)(((byte)(203)))));
            this.btnRun.Cursor = System.Windows.Forms.Cursors.Default;
            this.btnRun.FlatAppearance.BorderColor = System.Drawing.Color.Black;
            this.btnRun.FlatAppearance.BorderSize = 2;
            this.btnRun.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192)))));
            this.btnRun.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnRun.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 10.5F, System.Drawing.FontStyle.Bold);
            this.btnRun.ForeColor = System.Drawing.Color.Black;
            this.btnRun.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnRun.Location = new System.Drawing.Point(408, 598);
            this.btnRun.Margin = new System.Windows.Forms.Padding(4);
            this.btnRun.Name = "btnRun";
            this.btnRun.Size = new System.Drawing.Size(115, 31);
            this.btnRun.TabIndex = 261;
            this.btnRun.Text = "Run";
            this.btnRun.UseCompatibleTextRendering = true;
            this.btnRun.UseVisualStyleBackColor = false;
            this.btnRun.Click += new System.EventHandler(this.btnRun_Click);
            //
            // panelHeader
            //
            this.panelHeader.AllowDrop = true;
            this.panelHeader.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.panelHeader.Controls.Add(this.lblHeader);
            this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
            this.panelHeader.Location = new System.Drawing.Point(0, 0);
            this.panelHeader.Name = "panelHeader";
            this.panelHeader.Size = new System.Drawing.Size(561, 71);
            this.panelHeader.TabIndex = 324;
            //
            // PluginsReview
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
            this.Controls.Add(this.panelHeader);
            this.Controls.Add(this.btnViewScript);
            this.Controls.Add(this.textSummary);
            this.Controls.Add(this.btnRun);
            this.Name = "PluginsReview";
            this.Size = new System.Drawing.Size(561, 645);
            this.panelHeader.ResumeLayout(false);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Label lblHeader;
        private System.Windows.Forms.Button btnViewScript;
        private System.Windows.Forms.TextBox textSummary;
        private System.Windows.Forms.Button btnRun;
        private System.Windows.Forms.Panel panelHeader;
    }
}

using System;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;

namespace TidyOS
{
    public partial class MainForm : Form
    {
        private NavigationManager _navigationManager;

        public MainForm()
        {
            InitializeComponent();
            // Create navigation manager with target content panel
            _navigationManager = new NavigationManager(panelContent);

            // Initialize navigation buttons and handlers
            NavigationHandler.InitializeNavigation(
                btnExperience,
                btnApps,
                btnPlugins,
                btnAbout,
                btnBack,
                lblHeader,
                _navigationManager);

            // Hook into Load event to defer default view loading
            this.Load += MainForm_Load;

            InitializeUI();
        }

        /// <summary>
        /// Handles the form Load event to load the default view.
        /// </summary>
        private void MainForm_Load(object sender, EventArgs e)
        {
            NavigationHandler.LoadDefaultView(_navigationManager, btnExperience, lblHeader);
        }

        private void InitializeUI()
        {
            btnBack.Text = "\uE72B";
            this.Size = new Size(600, 700);
        }

        private void btnGitHub_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(new ProcessStartInfo("https://github.com/builtbybel/TidyOS") { UseShellExecute = true });

        }
    }
}

namespace TidyOS.Views
{
    partial class ExperienceView
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Komponenten-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.panelHeader = new System.Windows.Forms.Panel();
            this.textSearch = new System.Windows.Forms.TextBox();
            this.lblExperienceCategory = new System.Windows.Forms.Label();
            this.flowPanelCategories = new System.Windows.Forms.FlowLayoutPanel();
            this.btnRevert = new System.Windows.Forms.Button();
            this.btnApply = new System.Windows.Forms.Button();
            this.tt = new System.Windows.Forms.ToolTip(this.components);
            this.clbFeatures = new System.Windows.Forms.CheckedListBox();
            this.cbToggleDescription = new System.Windows.Forms.CheckBox();
            this.panelHeader.SuspendLayout();
            this.SuspendLayout();
            //
            // panelHeader
            //
            this.panelHeader.AllowDrop = true;
            this.panelHeader.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.panelHeader.Controls.Add(this.textSearch);
            this.panelHeader.Controls.Add(this.lblExperienceCategory);
            this.panelHeader.Controls.Add(this.flowPanelCategories);
            this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
            this.panelHeader.Location = new System.Drawing.Point(0, 0);
            this.panelHeader.Name = "panelHeader";
            this.panelHeader.Size = new System.Drawing.Size(561, 108);
            this.panelHeader.TabIndex = 323;
            //
            // textSearch
            //
            this.textSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.textSearch.Font = new System.Drawing.Font("Segoe UI Variable Small", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.textSearch.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(162)))), ((int)(((byte)(168)))), ((int)(((byte)(173)))));
            this.textSearch.Location = new System.Drawing.Point(34, 12);
            this.textSearch.Name = "textSearch";
            this.textSearch.Size = new System.Drawing.Size(423, 27);
            this.textSearch.TabIndex = 2;
            this.textSearch.TabStop = false;
            this.textSearch.Text = "Type here to search";
            this.textSearch.Click += new System.EventHandler(this.textSearch_Click);
            this.textSearch.TextChanged += new System.EventHandler(this.textSearch_TextChanged);
            //
            // lblExperienceCategory
            //
            this.lblExperienceCategory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lblExperienceCategory.AutoEllipsis = true;
            this.lblExperienceCategory.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lblExperienceCategory.ForeColor = System.Drawing.Color.Black;
            this.lblExperienceCategory.Location = new System.Drawing.Point(34, 50);
            this.lblExperienceCategory.Name = "lblExperienceCategory";
            this.lblExperienceCategory.Size = new System.Drawing.Size(272, 23);
            this.lblExperienceCategory.TabIndex = 7;
            this.lblExperienceCategory.Text = "Start";
            this.lblExperienceCategory.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.lblExperienceCategory.UseCompatibleTextRendering = true;
            //
            // flowPanelCategories
            //
            this.flowPanelCategories.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.flowPanelCategories.AutoSize = true;
            this.flowPanelCategories.Cursor = System.Windows.Forms.Cursors.Hand;
            this.flowPanelCategories.Font = new System.Drawing.Font("Segoe MDL2 Assets", 7.25F);
            this.flowPanelCategories.ForeColor = System.Drawing.Color.DarkGray;
            this.flowPanelCategories.Location = new System.Drawing.Point(177, 75);
            this.flowPanelCategories.Name = "flowPanelCategories";
            this.flowPanelCategories.Size = new System.Drawing.Size(190, 24);
            this.flowPanelCategories.TabIndex = 324;
            //
            // btnRevert
            //
            this.btnRevert.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnRevert.AutoEllipsis = true;
            this.btnRevert.BackColor = System.Drawing.Color.Transparent;
            this.btnRevert.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnRevert.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnRevert.FlatAppearance.BorderSize = 0;
            this.btnRevert.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnRevert.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnRevert.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.25F);
            this.btnRevert.ForeColor = System.Drawing.Color.Black;
            this.btnRevert.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnRevert.Location = new System.Drawing.Point(259, 598);
            this.btnRevert.Name = "btnRevert";
            this.btnRevert.Size = new System.Drawing.Size(130, 32);
            this.btnRevert.TabIndex = 502;
            this.btnRevert.TabStop = false;
            this.btnRevert.Text = "Deactivate All";
            this.btnRevert.UseCompatibleTextRendering = true;
            this.btnRevert.UseVisualStyleBackColor = false;
            this.btnRevert.Click += new System.EventHandler(this.btnRevert_Click);
            //
            // btnApply
            //
            this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnApply.AutoEllipsis = true;
            this.btnApply.BackColor = System.Drawing.Color.Transparent;
            this.btnApply.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnApply.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnApply.FlatAppearance.BorderSize = 0;
            this.btnApply.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnApply.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnApply.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.25F);
            this.btnApply.ForeColor = System.Drawing.Color.Black;
            this.btnApply.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnApply.Location = new System.Drawing.Point(395, 598);
            this.btnApply.Name = "btnApply";
            this.btnApply.Size = new System.Drawing.Size(119, 32);
            this.btnApply.TabIndex = 500;
            this.btnApply.TabStop = false;
            this.btnApply.Text = "Activate All";
            this.btnApply.UseCompatibleTextRendering = true;
            this.btnApply.UseVisualStyleBackColor = false;
            this.btnApply.Click += new System.EventHandler(this.btnApply_Click);
            //
            // tt
            //
            this.tt.IsBalloon = true;
            //
            // clbFeatures
            //
            this.clbFeatures.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.clbFeatures.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252)))));
            this.clbFeatures.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.clbFeatures.Font = new System.Drawing.Font("Segoe UI Variable Display", 11.25F);
            this.clbFeatures.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
            this.clbFeatures.FormattingEnabled = true;
            this.clbFeatures.Location = new System.Drawing.Point(48, 113);
            this.clbFeatures.Name = "clbFeatures";
            this.clbFeatures.Size = new System.Drawing.Size(477, 462);
            this.clbFeatures.TabIndex = 325;
            this.clbFeatures.UseCompatibleTextRendering = true;
            this.clbFeatures.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.clbFeatures_ItemCheck);
            //
            // cbToggleDescription
            //
            this.cbToggleDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
            this.cbToggleDescription.Appearance = System.Windows.Forms.Appearance.Button;
            this.cbToggleDescription.AutoEllipsis = true;
            this.cbToggleDescription.BackColor = System.Drawing.Color.Transparent;
            this.cbToggleDescription.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.cbToggleDescription.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.25F);
            this.cbToggleDescription.ForeColor = System.Drawing.Color.Black;
            this.cbToggleDescription.Location = new System.Drawing.Point(34, 598);
            this.cbToggleDescription.Name = "cbToggleDescription";
            this.cbToggleDescription.Size = new System.Drawing.Size(159, 32);
            this.cbToggleDescription.TabIndex = 326;
            this.cbToggleDescription.TabStop = false;
            this.cbToggleDescription.Text = "Toggle Feature Insights";
            this.cbToggleDescription.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            this.cbToggleDescription.UseCompatibleTextRendering = true;
            this.cbToggleDescription.UseVisualStyleBackColor = false;
            this.cbToggleDescription.CheckedChanged += new System.EventHandler(this.cbToggleDescription_CheckedChanged);
            //
            // ExperienceView
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.AutoScroll = true;
            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
            this.Controls.Add(this.cbToggleDescription);
            this.Controls.Add(this.btnRevert);
            this.Controls.Add(this.clbFeatures);
            this.Controls.Add(this.btnApply);
            this.Controls.Add(this.panelHeader);
            this.Name = "ExperienceView";
            this.Size = new System.Drawing.Size(561, 645);
            this.panelHeader.ResumeLayout(false);
            this.panelHeader.PerformLayout();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Panel panelHeader;
        private System.Windows.Forms.TextBox textSearch;
        private System.Windows.Forms.Button btnRevert;
        private System.Windows.Forms.Button btnApply;
        private System.Windows.Forms.Label lblExperienceCategory;
        private System.Windows.Forms.FlowLayoutPanel flowPanelCategories;
        private System.Windows.Forms.ToolTip tt;
        private System.Windows.Forms.CheckedListBox clbFeatures;
        private System.Windows.Forms.CheckBox cbToggleDescription;
    }
}

using System.Collections.Generic;
using System.Windows.Forms;

public class NavigationManager
{
    private Stack<Control> navigationHistory = new Stack<Control>(); // Holds previous views
    private Panel panelContainer; // Reference to the panel container where views are switched
    private Control mainPanel; // Reference to the main panel (start page)
    public Control CurrentView { get; private set; }  // Track current view

    public NavigationManager(Panel panel)
    {
        this.panelContainer = panel;
        this.mainPanel = panel.Controls.Count > 0 ? panel.Controls[0] : null;
    }

    /// <summary>
    /// Checks if there are views in the navigation history to go back to.
    /// </summary>
    public bool CanGoBack()
    {
        return navigationHistory.Count > 0;
    }

    /// <summary>
    /// Adds the current control to the navigation history.
    /// </summary>
    private void AddToHistory()
    {
        if (panelContainer.Controls.Count > 0)
        {
            // Add the currently visible control to the history stack
            navigationHistory.Push(panelContainer.Controls[0]);
        }
    }

    /// <summary>
    /// Switches to a new view and adds the current view to the navigation history.
    /// </summary>
    /// <param name="newView">The new view to display.</param>
    public void SwitchView(Control newView)
    {
        AddToHistory(); // Save the current view before switching

        // Clear the container and display the new view
        panelContainer.Controls.Clear();
        panelContainer.Controls.Add(newView);
        newView.Dock = DockStyle.Fill;
        newView.BringToFront();
    }

    /// <summary>
    /// Navigates back to the previous view in the history, if available.
    /// </summary>
    public void GoBack()
    {
        if (CanGoBack())
        {
            // Pop the last view from the history stack and display it
            Control previousView = navigationHistory.Pop();
            panelContainer.Controls.Clear();
            panelContainer.Controls.Add(previousView);
            previousView.Dock = DockStyle.Fill;
            previousView.BringToFront();

            // Update the current view in lblHeader
            CurrentView = previousView;
        }
    }

    /// <summary>
    /// Clears the navigation history.
    /// </summary>
    public void ClearHistory()
    {
        navigationHistory.Clear();
    }

    /// <summary>
    /// Switches directly to the main panel, clearing the navigation history.
    /// </summary>
    public void GoToMain()
    {
        if (mainPanel != null)
        {
            navigationHistory.Clear(); // Clear the navigation history
            panelContainer.Controls.Clear();
            panelContainer.Controls.Add(mainPanel);
            mainPanel.Dock = DockStyle.Fill;
            mainPanel.BringToFront();
        }
    }
}

using System;
using System.IO;

public static class Logger
{
    private static readonly object _lock = new object();
    private static readonly string logFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app.log");

    /// <summary>
    /// Writes a log message to the file.
    /// </summary>
    public static void Log(string message, LogLevel level = LogLevel.Info)
    {
        string formattedMessage = $"[{DateTime.Now:HH:mm:ss}] [{level}] {message}";
        WriteToFile(formattedMessage);
    }

    /// <summary>
    /// Writes the formatted message to the log file in a thread-safe manner.
    /// </summary>
    private static void WriteToFile(string message)
    {
        try
        {
            lock (_lock)
            {
                File.AppendAllText(logFilePath, message + Environment.NewLine);
            }
        }
        catch (Exception ex)
        {
            // If writing to the file fails, output an error message to the console
            Console.WriteLine($"Error writing to log file: {ex.Message}");
        }
    }
}

public enum LogLevel
{
    Info,
    Error,
    Warning
}

namespace TidyOS.Views
{
    partial class PluginsView
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Komponenten-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.treePlugins = new System.Windows.Forms.TreeView();
            this.btnNext = new System.Windows.Forms.Button();
            this.btnImport = new System.Windows.Forms.Button();
            this.btnPluginsDir = new System.Windows.Forms.Button();
            this.btnRefresh = new System.Windows.Forms.Button();
            this.panelContainer = new System.Windows.Forms.Panel();
            this.panelHeader = new System.Windows.Forms.Panel();
            this.lblHeader = new System.Windows.Forms.Label();
            this.tt = new System.Windows.Forms.ToolTip(this.components);
            this.panelContainer.SuspendLayout();
            this.panelHeader.SuspendLayout();
            this.SuspendLayout();
            //
            // treePlugins
            //
            this.treePlugins.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.treePlugins.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252)))));
            this.treePlugins.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.treePlugins.CheckBoxes = true;
            this.treePlugins.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.25F);
            this.treePlugins.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
            this.treePlugins.FullRowSelect = true;
            this.treePlugins.HotTracking = true;
            this.treePlugins.ItemHeight = 22;
            this.treePlugins.Location = new System.Drawing.Point(48, 89);
            this.treePlugins.Margin = new System.Windows.Forms.Padding(4);
            this.treePlugins.Name = "treePlugins";
            this.treePlugins.ShowLines = false;
            this.treePlugins.ShowNodeToolTips = true;
            this.treePlugins.ShowPlusMinus = false;
            this.treePlugins.Size = new System.Drawing.Size(477, 488);
            this.treePlugins.TabIndex = 256;
            this.treePlugins.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treePlugins_AfterCheck);
            //
            // btnNext
            //
            this.btnNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnNext.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(79)))), ((int)(((byte)(203)))));
            this.btnNext.FlatAppearance.BorderColor = System.Drawing.Color.Black;
            this.btnNext.FlatAppearance.BorderSize = 2;
            this.btnNext.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192)))));
            this.btnNext.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnNext.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.5F);
            this.btnNext.ForeColor = System.Drawing.Color.Black;
            this.btnNext.Location = new System.Drawing.Point(408, 598);
            this.btnNext.Margin = new System.Windows.Forms.Padding(4);
            this.btnNext.Name = "btnNext";
            this.btnNext.Size = new System.Drawing.Size(115, 31);
            this.btnNext.TabIndex = 320;
            this.btnNext.TabStop = false;
            this.btnNext.Text = "Next";
            this.btnNext.UseCompatibleTextRendering = true;
            this.btnNext.UseVisualStyleBackColor = false;
            this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
            //
            // btnImport
            //
            this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnImport.BackColor = System.Drawing.Color.Transparent;
            this.btnImport.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnImport.FlatAppearance.BorderColor = System.Drawing.Color.DimGray;
            this.btnImport.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnImport.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.5F);
            this.btnImport.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221)))));
            this.btnImport.Location = new System.Drawing.Point(349, 19);
            this.btnImport.Name = "btnImport";
            this.btnImport.Size = new System.Drawing.Size(93, 30);
            this.btnImport.TabIndex = 325;
            this.btnImport.Text = "Import";
            this.tt.SetToolTip(this.btnImport, "Import from folder");
            this.btnImport.UseCompatibleTextRendering = true;
            this.btnImport.UseVisualStyleBackColor = false;
            this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
            //
            // btnPluginsDir
            //
            this.btnPluginsDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnPluginsDir.BackColor = System.Drawing.Color.Transparent;
            this.btnPluginsDir.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnPluginsDir.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(231)))), ((int)(((byte)(241)))), ((int)(((byte)(249)))));
            this.btnPluginsDir.FlatAppearance.BorderSize = 0;
            this.btnPluginsDir.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnPluginsDir.Font = new System.Drawing.Font("Segoe MDL2 Assets", 12F);
            this.btnPluginsDir.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221)))));
            this.btnPluginsDir.Location = new System.Drawing.Point(448, 19);
            this.btnPluginsDir.Name = "btnPluginsDir";
            this.btnPluginsDir.Size = new System.Drawing.Size(36, 30);
            this.btnPluginsDir.TabIndex = 324;
            this.btnPluginsDir.TabStop = false;
            this.btnPluginsDir.Text = "...";
            this.tt.SetToolTip(this.btnPluginsDir, "Open plugins folder");
            this.btnPluginsDir.UseMnemonic = false;
            this.btnPluginsDir.UseVisualStyleBackColor = false;
            this.btnPluginsDir.Click += new System.EventHandler(this.btnPluginsDir_Click);
            //
            // btnRefresh
            //
            this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnRefresh.BackColor = System.Drawing.Color.Transparent;
            this.btnRefresh.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnRefresh.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(231)))), ((int)(((byte)(241)))), ((int)(((byte)(249)))));
            this.btnRefresh.FlatAppearance.BorderSize = 0;
            this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnRefresh.Font = new System.Drawing.Font("Segoe MDL2 Assets", 12F);
            this.btnRefresh.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221)))));
            this.btnRefresh.Location = new System.Drawing.Point(490, 19);
            this.btnRefresh.Name = "btnRefresh";
            this.btnRefresh.Size = new System.Drawing.Size(36, 30);
            this.btnRefresh.TabIndex = 323;
            this.btnRefresh.TabStop = false;
            this.btnRefresh.Text = "...";
            this.tt.SetToolTip(this.btnRefresh, "Refresh");
            this.btnRefresh.UseMnemonic = false;
            this.btnRefresh.UseVisualStyleBackColor = false;
            this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
            //
            // panelContainer
            //
            this.panelContainer.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
            this.panelContainer.Controls.Add(this.treePlugins);
            this.panelContainer.Controls.Add(this.panelHeader);
            this.panelContainer.Controls.Add(this.btnNext);
            this.panelContainer.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panelContainer.Location = new System.Drawing.Point(0, 0);
            this.panelContainer.Name = "panelContainer";
            this.panelContainer.Size = new System.Drawing.Size(561, 645);
            this.panelContainer.TabIndex = 328;
            //
            // panelHeader
            //
            this.panelHeader.AllowDrop = true;
            this.panelHeader.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.panelHeader.Controls.Add(this.lblHeader);
            this.panelHeader.Controls.Add(this.btnRefresh);
            this.panelHeader.Controls.Add(this.btnPluginsDir);
            this.panelHeader.Controls.Add(this.btnImport);
            this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
            this.panelHeader.Location = new System.Drawing.Point(0, 0);
            this.panelHeader.Name = "panelHeader";
            this.panelHeader.Size = new System.Drawing.Size(561, 71);
            this.panelHeader.TabIndex = 326;
            //
            // lblHeader
            //
            this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lblHeader.AutoEllipsis = true;
            this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 12F, System.Drawing.FontStyle.Bold);
            this.lblHeader.ForeColor = System.Drawing.Color.Black;
            this.lblHeader.Location = new System.Drawing.Point(34, 22);
            this.lblHeader.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lblHeader.Name = "lblHeader";
            this.lblHeader.Size = new System.Drawing.Size(306, 39);
            this.lblHeader.TabIndex = 326;
            this.lblHeader.Text = "Plugins";
            this.lblHeader.UseCompatibleTextRendering = true;
            //
            // tt
            //
            this.tt.IsBalloon = true;
            //
            // PluginsView
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.panelContainer);
            this.Name = "PluginsView";
            this.Size = new System.Drawing.Size(561, 645);
            this.Load += new System.EventHandler(this.PluginsView_Load);
            this.panelContainer.ResumeLayout(false);
            this.panelHeader.ResumeLayout(false);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.TreeView treePlugins;
        private System.Windows.Forms.Button btnNext;
        private System.Windows.Forms.Button btnImport;
        public System.Windows.Forms.Button btnPluginsDir;
        public System.Windows.Forms.Button btnRefresh;
        private System.Windows.Forms.Panel panelContainer;
        private System.Windows.Forms.Panel panelHeader;
        private System.Windows.Forms.Label lblHeader;
        private System.Windows.Forms.ToolTip tt;
    }
}

namespace TidyOS.Views
{
    partial class AppManagerView
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Komponenten-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.lblHeader = new System.Windows.Forms.Label();
            this.textFilter = new System.Windows.Forms.TextBox();
            this.checkedListBoxApps = new System.Windows.Forms.CheckedListBox();
            this.lblResults = new System.Windows.Forms.Label();
            this.btnSelect = new System.Windows.Forms.Button();
            this.btnRemove = new System.Windows.Forms.Button();
            this.tt = new System.Windows.Forms.ToolTip(this.components);
            this.btnAppsFeed = new System.Windows.Forms.Button();
            this.btnRefresh = new System.Windows.Forms.Button();
            this.panelHeader = new System.Windows.Forms.Panel();
            this.btnShowAllInstalled = new System.Windows.Forms.Button();
            this.panelHeader.SuspendLayout();
            this.SuspendLayout();
            //
            // lblHeader
            //
            this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lblHeader.AutoEllipsis = true;
            this.lblHeader.BackColor = System.Drawing.Color.Transparent;
            this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Display", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
            this.lblHeader.Location = new System.Drawing.Point(34, 14);
            this.lblHeader.Name = "lblHeader";
            this.lblHeader.Size = new System.Drawing.Size(317, 33);
            this.lblHeader.TabIndex = 332;
            this.lblHeader.Text = "These Start menu apps are unnecessary. Add or remove apps by entering names separ" +
    "ated by commas.";
            this.lblHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            //
            // textFilter
            //
            this.textFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.textFilter.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252)))));
            this.textFilter.Font = new System.Drawing.Font("Segoe UI Variable Display", 9F);
            this.textFilter.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.textFilter.Location = new System.Drawing.Point(37, 60);
            this.textFilter.Multiline = true;
            this.textFilter.Name = "textFilter";
            this.textFilter.Size = new System.Drawing.Size(491, 96);
            this.textFilter.TabIndex = 333;
            this.textFilter.TextChanged += new System.EventHandler(this.textFilter_TextChanged);
            //
            // checkedListBoxApps
            //
            this.checkedListBoxApps.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.checkedListBoxApps.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252)))));
            this.checkedListBoxApps.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.checkedListBoxApps.Font = new System.Drawing.Font("Segoe UI Variable Display", 9.75F);
            this.checkedListBoxApps.FormattingEnabled = true;
            this.checkedListBoxApps.Location = new System.Drawing.Point(37, 203);
            this.checkedListBoxApps.Name = "checkedListBoxApps";
            this.checkedListBoxApps.Size = new System.Drawing.Size(491, 380);
            this.checkedListBoxApps.Sorted = true;
            this.checkedListBoxApps.TabIndex = 335;
            this.checkedListBoxApps.ThreeDCheckBoxes = true;
            //
            // lblResults
            //
            this.lblResults.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lblResults.AutoEllipsis = true;
            this.lblResults.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 10F, System.Drawing.FontStyle.Bold);
            this.lblResults.Location = new System.Drawing.Point(37, 168);
            this.lblResults.Name = "lblResults";
            this.lblResults.Size = new System.Drawing.Size(274, 23);
            this.lblResults.TabIndex = 338;
            this.lblResults.Text = "Results";
            this.lblResults.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.tt.SetToolTip(this.lblResults, "Detected bloatware on your system");
            this.lblResults.UseCompatibleTextRendering = true;
            //
            // btnSelect
            //
            this.btnSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnSelect.AutoEllipsis = true;
            this.btnSelect.BackColor = System.Drawing.Color.Transparent;
            this.btnSelect.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnSelect.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnSelect.FlatAppearance.BorderSize = 0;
            this.btnSelect.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnSelect.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btnSelect.Font = new System.Drawing.Font("Segoe UI Variable Display", 10F, System.Drawing.FontStyle.Bold);
            this.btnSelect.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(110)))));
            this.btnSelect.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
            this.btnSelect.Location = new System.Drawing.Point(294, 603);
            this.btnSelect.Name = "btnSelect";
            this.btnSelect.Size = new System.Drawing.Size(80, 26);
            this.btnSelect.TabIndex = 337;
            this.btnSelect.Text = "Select All";
            this.btnSelect.UseCompatibleTextRendering = true;
            this.btnSelect.UseVisualStyleBackColor = false;
            this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click);
            //
            // btnRemove
            //
            this.btnRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.btnRemove.AutoEllipsis = true;
            this.btnRemove.BackColor = System.Drawing.Color.Transparent;
            this.btnRemove.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnRemove.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnRemove.FlatAppearance.BorderSize = 2;
            this.btnRemove.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192)))));
            this.btnRemove.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnRemove.Font = new System.Drawing.Font("Segoe UI Variable Display", 10.5F);
            this.btnRemove.ForeColor = System.Drawing.Color.Black;
            this.btnRemove.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnRemove.Location = new System.Drawing.Point(386, 598);
            this.btnRemove.Name = "btnRemove";
            this.btnRemove.Size = new System.Drawing.Size(142, 35);
            this.btnRemove.TabIndex = 336;
            this.btnRemove.Text = "Remove selected";
            this.btnRemove.UseCompatibleTextRendering = true;
            this.btnRemove.UseVisualStyleBackColor = false;
            this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click);
            //
            // tt
            //
            this.tt.IsBalloon = true;
            //
            // btnAppsFeed
            //
            this.btnAppsFeed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnAppsFeed.AutoEllipsis = true;
            this.btnAppsFeed.BackColor = System.Drawing.Color.Transparent;
            this.btnAppsFeed.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnAppsFeed.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnAppsFeed.FlatAppearance.BorderSize = 0;
            this.btnAppsFeed.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnAppsFeed.Font = new System.Drawing.Font("Segoe UI Variable Display", 9.5F);
            this.btnAppsFeed.ForeColor = System.Drawing.Color.Black;
            this.btnAppsFeed.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnAppsFeed.Location = new System.Drawing.Point(372, 19);
            this.btnAppsFeed.Name = "btnAppsFeed";
            this.btnAppsFeed.Size = new System.Drawing.Size(112, 28);
            this.btnAppsFeed.TabIndex = 343;
            this.btnAppsFeed.Text = "Add from feed...";
            this.tt.SetToolTip(this.btnAppsFeed, "Add from GitHub feed");
            this.btnAppsFeed.UseVisualStyleBackColor = false;
            this.btnAppsFeed.Click += new System.EventHandler(this.btnAppsFeed_Click);
            //
            // btnRefresh
            //
            this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnRefresh.AutoEllipsis = true;
            this.btnRefresh.BackColor = System.Drawing.Color.Transparent;
            this.btnRefresh.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnRefresh.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnRefresh.FlatAppearance.BorderSize = 0;
            this.btnRefresh.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnRefresh.Font = new System.Drawing.Font("Segoe MDL2 Assets", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.btnRefresh.ForeColor = System.Drawing.Color.Black;
            this.btnRefresh.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnRefresh.Location = new System.Drawing.Point(490, 19);
            this.btnRefresh.Name = "btnRefresh";
            this.btnRefresh.Size = new System.Drawing.Size(38, 28);
            this.btnRefresh.TabIndex = 344;
            this.btnRefresh.Text = "...";
            this.tt.SetToolTip(this.btnRefresh, "Refresh");
            this.btnRefresh.UseVisualStyleBackColor = false;
            this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
            //
            // panelHeader
            //
            this.panelHeader.AllowDrop = true;
            this.panelHeader.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.panelHeader.Controls.Add(this.btnRefresh);
            this.panelHeader.Controls.Add(this.btnAppsFeed);
            this.panelHeader.Controls.Add(this.lblHeader);
            this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
            this.panelHeader.Location = new System.Drawing.Point(0, 0);
            this.panelHeader.Name = "panelHeader";
            this.panelHeader.Size = new System.Drawing.Size(561, 54);
            this.panelHeader.TabIndex = 341;
            //
            // btnShowAllInstalled
            //
            this.btnShowAllInstalled.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
            this.btnShowAllInstalled.AutoEllipsis = true;
            this.btnShowAllInstalled.BackColor = System.Drawing.Color.Transparent;
            this.btnShowAllInstalled.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnShowAllInstalled.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnShowAllInstalled.FlatAppearance.BorderSize = 0;
            this.btnShowAllInstalled.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnShowAllInstalled.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btnShowAllInstalled.Font = new System.Drawing.Font("Segoe UI Variable Display", 10F, System.Drawing.FontStyle.Bold);
            this.btnShowAllInstalled.ForeColor = System.Drawing.Color.Black;
            this.btnShowAllInstalled.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
            this.btnShowAllInstalled.Location = new System.Drawing.Point(31, 603);
            this.btnShowAllInstalled.Name = "btnShowAllInstalled";
            this.btnShowAllInstalled.Size = new System.Drawing.Size(133, 26);
            this.btnShowAllInstalled.TabIndex = 342;
            this.btnShowAllInstalled.Text = "Show all installed";
            this.btnShowAllInstalled.UseCompatibleTextRendering = true;
            this.btnShowAllInstalled.UseVisualStyleBackColor = false;
            this.btnShowAllInstalled.Click += new System.EventHandler(this.btnShowAllInstalled_Click);
            //
            // AppManagerView
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
            this.Controls.Add(this.btnShowAllInstalled);
            this.Controls.Add(this.panelHeader);
            this.Controls.Add(this.btnRemove);
            this.Controls.Add(this.btnSelect);
            this.Controls.Add(this.lblResults);
            this.Controls.Add(this.checkedListBoxApps);
            this.Controls.Add(this.textFilter);
            this.Name = "AppManagerView";
            this.Size = new System.Drawing.Size(561, 645);
            this.panelHeader.ResumeLayout(false);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion
        private System.Windows.Forms.Label lblHeader;
        private System.Windows.Forms.TextBox textFilter;
        private System.Windows.Forms.CheckedListBox checkedListBoxApps;
        private System.Windows.Forms.Label lblResults;
        private System.Windows.Forms.Button btnSelect;
        private System.Windows.Forms.Button btnRemove;
        private System.Windows.Forms.ToolTip tt;
        private System.Windows.Forms.Panel panelHeader;
        private System.Windows.Forms.Button btnShowAllInstalled;
        private System.Windows.Forms.Button btnAppsFeed;
        private System.Windows.Forms.Button btnRefresh;
    }
}

namespace TidyOS
{
    partial class MainForm
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Windows Form-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.tt = new System.Windows.Forms.ToolTip(this.components);
            this.panelContainer = new System.Windows.Forms.Panel();
            this.btnExperience = new System.Windows.Forms.Button();
            this.panelNavigation = new System.Windows.Forms.Panel();
            this.btnGitHub = new System.Windows.Forms.Button();
            this.btnAbout = new System.Windows.Forms.Button();
            this.btnPlugins = new System.Windows.Forms.Button();
            this.btnApps = new System.Windows.Forms.Button();
            this.panelContent = new System.Windows.Forms.Panel();
            this.btnBack = new System.Windows.Forms.Button();
            this.panelHeader = new System.Windows.Forms.Panel();
            this.lblHeader = new System.Windows.Forms.Label();
            this.assetAppSymbol = new System.Windows.Forms.PictureBox();
            this.panelContainer.SuspendLayout();
            this.panelNavigation.SuspendLayout();
            this.panelHeader.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.assetAppSymbol)).BeginInit();
            this.SuspendLayout();
            //
            // tt
            //
            this.tt.IsBalloon = true;
            //
            // panelContainer
            //
            this.panelContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.panelContainer.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(232)))), ((int)(((byte)(232)))));
            this.panelContainer.Controls.Add(this.btnExperience);
            this.panelContainer.Controls.Add(this.panelNavigation);
            this.panelContainer.Controls.Add(this.panelContent);
            this.panelContainer.Location = new System.Drawing.Point(0, 47);
            this.panelContainer.Name = "panelContainer";
            this.panelContainer.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0);
            this.panelContainer.Size = new System.Drawing.Size(604, 544);
            this.panelContainer.TabIndex = 509;
            //
            // btnExperience
            //
            this.btnExperience.AutoEllipsis = true;
            this.btnExperience.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.btnExperience.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnExperience.Dock = System.Windows.Forms.DockStyle.Top;
            this.btnExperience.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnExperience.FlatAppearance.BorderSize = 0;
            this.btnExperience.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnExperience.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 12F, System.Drawing.FontStyle.Bold);
            this.btnExperience.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.btnExperience.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnExperience.Location = new System.Drawing.Point(5, 0);
            this.btnExperience.Name = "btnExperience";
            this.btnExperience.Padding = new System.Windows.Forms.Padding(30, 0, 0, 0);
            this.btnExperience.Size = new System.Drawing.Size(594, 45);
            this.btnExperience.TabIndex = 505;
            this.btnExperience.TabStop = false;
            this.btnExperience.Text = "Customizing";
            this.btnExperience.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnExperience.UseCompatibleTextRendering = true;
            this.btnExperience.UseVisualStyleBackColor = false;
            //
            // panelNavigation
            //
            this.panelNavigation.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(239)))), ((int)(((byte)(237)))));
            this.panelNavigation.Controls.Add(this.btnGitHub);
            this.panelNavigation.Controls.Add(this.btnAbout);
            this.panelNavigation.Controls.Add(this.btnPlugins);
            this.panelNavigation.Controls.Add(this.btnApps);
            this.panelNavigation.Dock = System.Windows.Forms.DockStyle.Bottom;
            this.panelNavigation.Location = new System.Drawing.Point(5, 371);
            this.panelNavigation.Name = "panelNavigation";
            this.panelNavigation.Padding = new System.Windows.Forms.Padding(10);
            this.panelNavigation.Size = new System.Drawing.Size(594, 173);
            this.panelNavigation.TabIndex = 2;
            //
            // btnGitHub
            //
            this.btnGitHub.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
            this.btnGitHub.AutoEllipsis = true;
            this.btnGitHub.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
            this.btnGitHub.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnGitHub.FlatAppearance.BorderSize = 0;
            this.btnGitHub.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
            this.btnGitHub.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btnGitHub.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.btnGitHub.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(85)))), ((int)(((byte)(79)))), ((int)(((byte)(77)))));
            this.btnGitHub.Location = new System.Drawing.Point(231, 147);
            this.btnGitHub.Name = "btnGitHub";
            this.btnGitHub.Size = new System.Drawing.Size(124, 23);
            this.btnGitHub.TabIndex = 510;
            this.btnGitHub.Text = "I\'m not bloat, I\'m GitHub, Bitch.";
            this.btnGitHub.UseCompatibleTextRendering = true;
            this.btnGitHub.UseVisualStyleBackColor = false;
            this.btnGitHub.Visible = false;
            this.btnGitHub.Click += new System.EventHandler(this.btnGitHub_Click);
            //
            // btnAbout
            //
            this.btnAbout.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(252)))), ((int)(((byte)(251)))));
            this.btnAbout.Dock = System.Windows.Forms.DockStyle.Top;
            this.btnAbout.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 12F, System.Drawing.FontStyle.Bold);
            this.btnAbout.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.btnAbout.Location = new System.Drawing.Point(10, 100);
            this.btnAbout.Name = "btnAbout";
            this.btnAbout.Padding = new System.Windows.Forms.Padding(30, 0, 0, 0);
            this.btnAbout.Size = new System.Drawing.Size(574, 45);
            this.btnAbout.TabIndex = 508;
            this.btnAbout.Text = "About";
            this.btnAbout.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnAbout.UseCompatibleTextRendering = true;
            this.btnAbout.UseVisualStyleBackColor = false;
            //
            // btnPlugins
            //
            this.btnPlugins.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(252)))), ((int)(((byte)(251)))));
            this.btnPlugins.Dock = System.Windows.Forms.DockStyle.Top;
            this.btnPlugins.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 12F, System.Drawing.FontStyle.Bold);
            this.btnPlugins.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.btnPlugins.Location = new System.Drawing.Point(10, 55);
            this.btnPlugins.Name = "btnPlugins";
            this.btnPlugins.Padding = new System.Windows.Forms.Padding(30, 0, 0, 0);
            this.btnPlugins.Size = new System.Drawing.Size(574, 45);
            this.btnPlugins.TabIndex = 507;
            this.btnPlugins.Text = "Scripting";
            this.btnPlugins.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnPlugins.UseCompatibleTextRendering = true;
            this.btnPlugins.UseVisualStyleBackColor = false;
            //
            // btnApps
            //
            this.btnApps.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(252)))), ((int)(((byte)(251)))));
            this.btnApps.Dock = System.Windows.Forms.DockStyle.Top;
            this.btnApps.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.btnApps.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.btnApps.Location = new System.Drawing.Point(10, 10);
            this.btnApps.Name = "btnApps";
            this.btnApps.Padding = new System.Windows.Forms.Padding(30, 0, 0, 0);
            this.btnApps.Size = new System.Drawing.Size(574, 45);
            this.btnApps.TabIndex = 506;
            this.btnApps.Text = "Debloating";
            this.btnApps.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnApps.UseCompatibleTextRendering = true;
            this.btnApps.UseVisualStyleBackColor = false;
            //
            // panelContent
            //
            this.panelContent.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.panelContent.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.panelContent.Location = new System.Drawing.Point(7, 46);
            this.panelContent.Name = "panelContent";
            this.panelContent.Size = new System.Drawing.Size(589, 322);
            this.panelContent.TabIndex = 1;
            //
            // btnBack
            //
            this.btnBack.AutoSize = true;
            this.btnBack.BackColor = System.Drawing.Color.Transparent;
            this.btnBack.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
            this.btnBack.FlatAppearance.BorderSize = 0;
            this.btnBack.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
            this.btnBack.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray;
            this.btnBack.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btnBack.Font = new System.Drawing.Font("Segoe MDL2 Assets", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.btnBack.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.btnBack.Location = new System.Drawing.Point(52, 2);
            this.btnBack.Name = "btnBack";
            this.btnBack.Size = new System.Drawing.Size(30, 29);
            this.btnBack.TabIndex = 327;
            this.btnBack.Text = "...";
            this.btnBack.UseVisualStyleBackColor = false;
            //
            // panelHeader
            //
            this.panelHeader.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
            this.panelHeader.Controls.Add(this.lblHeader);
            this.panelHeader.Controls.Add(this.assetAppSymbol);
            this.panelHeader.Controls.Add(this.btnBack);
            this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
            this.panelHeader.Location = new System.Drawing.Point(0, 0);
            this.panelHeader.Name = "panelHeader";
            this.panelHeader.Size = new System.Drawing.Size(604, 41);
            this.panelHeader.TabIndex = 0;
            //
            // lblHeader
            //
            this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lblHeader.AutoEllipsis = true;
            this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Display", 13F, System.Drawing.FontStyle.Bold);
            this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26)))));
            this.lblHeader.Location = new System.Drawing.Point(145, 4);
            this.lblHeader.Name = "lblHeader";
            this.lblHeader.Size = new System.Drawing.Size(333, 31);
            this.lblHeader.TabIndex = 330;
            this.lblHeader.Text = "Navigation";
            this.lblHeader.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            this.lblHeader.UseCompatibleTextRendering = true;
            //
            // assetAppSymbol
            //
            this.assetAppSymbol.Image = global::TidyOS.Properties.Resources.AppIcon24;
            this.assetAppSymbol.Location = new System.Drawing.Point(20, 6);
            this.assetAppSymbol.Name = "assetAppSymbol";
            this.assetAppSymbol.Size = new System.Drawing.Size(31, 29);
            this.assetAppSymbol.TabIndex = 328;
            this.assetAppSymbol.TabStop = false;
            //
            // MainForm
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(242)))), ((int)(((byte)(242)))), ((int)(((byte)(242)))));
            this.ClientSize = new System.Drawing.Size(604, 585);
            this.Controls.Add(this.panelHeader);
            this.Controls.Add(this.panelContainer);
            this.Name = "MainForm";
            this.ShowIcon = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "TidyOS";
            this.panelContainer.ResumeLayout(false);
            this.panelNavigation.ResumeLayout(false);
            this.panelHeader.ResumeLayout(false);
            this.panelHeader.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)(this.assetAppSymbol)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion
        private System.Windows.Forms.ToolTip tt;
        private System.Windows.Forms.Panel panelContainer;
        private System.Windows.Forms.Panel panelContent;
        private System.Windows.Forms.Button btnBack;
        private System.Windows.Forms.Panel panelHeader;
        private System.Windows.Forms.PictureBox assetAppSymbol;
        private System.Windows.Forms.Panel panelNavigation;
        private System.Windows.Forms.Button btnExperience;
        private System.Windows.Forms.Button btnAbout;
        private System.Windows.Forms.Button btnApps;
        private System.Windows.Forms.Button btnPlugins;
        private System.Windows.Forms.Label lblHeader;
        private System.Windows.Forms.Button btnGitHub;
    }
}

namespace TidyOS.Views
{
    partial class AboutView
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Komponenten-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.lblAppname = new System.Windows.Forms.Label();
            this.lblCopyright = new System.Windows.Forms.Label();
            this.btnUpdate = new System.Windows.Forms.Button();
            this.btnGitHub = new System.Windows.Forms.Button();
            this.lblAppVersion = new System.Windows.Forms.Label();
            this.panel1 = new System.Windows.Forms.Panel();
            this.assetAppSymbol = new System.Windows.Forms.PictureBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.btnOpenLog = new System.Windows.Forms.Button();
            this.panel1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.assetAppSymbol)).BeginInit();
            this.SuspendLayout();
            //
            // lblAppname
            //
            this.lblAppname.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.lblAppname.AutoEllipsis = true;
            this.lblAppname.Font = new System.Drawing.Font("Segoe UI Variable Display", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lblAppname.ForeColor = System.Drawing.Color.Black;
            this.lblAppname.Location = new System.Drawing.Point(89, 241);
            this.lblAppname.Name = "lblAppname";
            this.lblAppname.Size = new System.Drawing.Size(398, 26);
            this.lblAppname.TabIndex = 320;
            this.lblAppname.Text = "App";
            this.lblAppname.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.lblAppname.UseCompatibleTextRendering = true;
            //
            // lblCopyright
            //
            this.lblCopyright.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.lblCopyright.BackColor = System.Drawing.Color.Transparent;
            this.lblCopyright.Font = new System.Drawing.Font("Segoe UI Variable Text", 9.5F);
            this.lblCopyright.ForeColor = System.Drawing.Color.Black;
            this.lblCopyright.Location = new System.Drawing.Point(30, 94);
            this.lblCopyright.Name = "lblCopyright";
            this.lblCopyright.Size = new System.Drawing.Size(351, 21);
            this.lblCopyright.TabIndex = 319;
            this.lblCopyright.Text = "Publisher: (C) 2025 A Belim app creation";
            this.lblCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            this.lblCopyright.UseCompatibleTextRendering = true;
            //
            // btnUpdate
            //
            this.btnUpdate.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.btnUpdate.AutoEllipsis = true;
            this.btnUpdate.BackColor = System.Drawing.Color.Transparent;
            this.btnUpdate.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnUpdate.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnUpdate.FlatAppearance.BorderSize = 0;
            this.btnUpdate.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray;
            this.btnUpdate.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 11F, System.Drawing.FontStyle.Bold);
            this.btnUpdate.ForeColor = System.Drawing.Color.Black;
            this.btnUpdate.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnUpdate.Location = new System.Drawing.Point(336, 290);
            this.btnUpdate.Name = "btnUpdate";
            this.btnUpdate.Size = new System.Drawing.Size(154, 33);
            this.btnUpdate.TabIndex = 318;
            this.btnUpdate.TabStop = false;
            this.btnUpdate.Text = "Check Now";
            this.btnUpdate.UseCompatibleTextRendering = true;
            this.btnUpdate.UseVisualStyleBackColor = false;
            this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
            //
            // btnGitHub
            //
            this.btnGitHub.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.btnGitHub.AutoEllipsis = true;
            this.btnGitHub.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(29)))), ((int)(((byte)(27)))), ((int)(((byte)(26)))));
            this.btnGitHub.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnGitHub.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnGitHub.FlatAppearance.BorderSize = 0;
            this.btnGitHub.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
            this.btnGitHub.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.btnGitHub.ForeColor = System.Drawing.Color.White;
            this.btnGitHub.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnGitHub.Location = new System.Drawing.Point(10, 148);
            this.btnGitHub.Name = "btnGitHub";
            this.btnGitHub.Size = new System.Drawing.Size(388, 33);
            this.btnGitHub.TabIndex = 317;
            this.btnGitHub.TabStop = false;
            this.btnGitHub.Text = "GitHub";
            this.btnGitHub.UseVisualStyleBackColor = false;
            this.btnGitHub.Click += new System.EventHandler(this.btnGitHub_Click);
            //
            // lblAppVersion
            //
            this.lblAppVersion.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.lblAppVersion.AutoEllipsis = true;
            this.lblAppVersion.BackColor = System.Drawing.Color.Transparent;
            this.lblAppVersion.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 9.5F, System.Drawing.FontStyle.Bold);
            this.lblAppVersion.ForeColor = System.Drawing.Color.Black;
            this.lblAppVersion.Location = new System.Drawing.Point(30, 64);
            this.lblAppVersion.Name = "lblAppVersion";
            this.lblAppVersion.Size = new System.Drawing.Size(351, 23);
            this.lblAppVersion.TabIndex = 315;
            this.lblAppVersion.Text = "Version ";
            this.lblAppVersion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            this.lblAppVersion.UseCompatibleTextRendering = true;
            //
            // panel1
            //
            this.panel1.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(236)))), ((int)(((byte)(236)))));
            this.panel1.Controls.Add(this.assetAppSymbol);
            this.panel1.Controls.Add(this.lblCopyright);
            this.panel1.Controls.Add(this.lblAppVersion);
            this.panel1.Controls.Add(this.btnGitHub);
            this.panel1.Location = new System.Drawing.Point(79, 25);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(411, 203);
            this.panel1.TabIndex = 321;
            //
            // assetAppSymbol
            //
            this.assetAppSymbol.Image = global::TidyOS.Properties.Resources.AppIcon24;
            this.assetAppSymbol.Location = new System.Drawing.Point(195, 15);
            this.assetAppSymbol.Name = "assetAppSymbol";
            this.assetAppSymbol.Size = new System.Drawing.Size(31, 29);
            this.assetAppSymbol.TabIndex = 329;
            this.assetAppSymbol.TabStop = false;
            //
            // label1
            //
            this.label1.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.label1.BackColor = System.Drawing.Color.Transparent;
            this.label1.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label1.ForeColor = System.Drawing.Color.Black;
            this.label1.Location = new System.Drawing.Point(89, 290);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(186, 21);
            this.label1.TabIndex = 322;
            this.label1.Text = "Updates";
            this.label1.UseCompatibleTextRendering = true;
            //
            // label2
            //
            this.label2.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.label2.BackColor = System.Drawing.Color.Transparent;
            this.label2.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label2.ForeColor = System.Drawing.Color.Black;
            this.label2.Location = new System.Drawing.Point(89, 347);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(186, 21);
            this.label2.TabIndex = 323;
            this.label2.Text = "Logs";
            this.label2.UseCompatibleTextRendering = true;
            //
            // btnOpenLog
            //
            this.btnOpenLog.Anchor = System.Windows.Forms.AnchorStyles.Top;
            this.btnOpenLog.AutoEllipsis = true;
            this.btnOpenLog.BackColor = System.Drawing.Color.Transparent;
            this.btnOpenLog.Cursor = System.Windows.Forms.Cursors.Hand;
            this.btnOpenLog.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
            this.btnOpenLog.FlatAppearance.BorderSize = 0;
            this.btnOpenLog.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray;
            this.btnOpenLog.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 11F, System.Drawing.FontStyle.Bold);
            this.btnOpenLog.ForeColor = System.Drawing.Color.Black;
            this.btnOpenLog.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.btnOpenLog.Location = new System.Drawing.Point(336, 349);
            this.btnOpenLog.Name = "btnOpenLog";
            this.btnOpenLog.Size = new System.Drawing.Size(154, 33);
            this.btnOpenLog.TabIndex = 324;
            this.btnOpenLog.TabStop = false;
            this.btnOpenLog.Text = "Open Log";
            this.btnOpenLog.UseCompatibleTextRendering = true;
            this.btnOpenLog.UseVisualStyleBackColor = false;
            this.btnOpenLog.Click += new System.EventHandler(this.btnOpenLog_Click);
            //
            // AboutView
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.AutoScroll = true;
            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248)))));
            this.Controls.Add(this.btnOpenLog);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.btnUpdate);
            this.Controls.Add(this.lblAppname);
            this.Controls.Add(this.panel1);
            this.Name = "AboutView";
            this.Size = new System.Drawing.Size(561, 645);
            this.panel1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.assetAppSymbol)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Label lblAppname;
        private System.Windows.Forms.Label lblCopyright;
        private System.Windows.Forms.Button btnUpdate;
        private System.Windows.Forms.Button btnGitHub;
        private System.Windows.Forms.Label lblAppVersion;
        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Button btnOpenLog;
        private System.Windows.Forms.PictureBox assetAppSymbol;
    }
}

//------------------------------------------------------------------------------
// <auto-generated>
//     Dieser Code wurde von einem Tool generiert.
//     Laufzeitversion:4.0.30319.42000
//
//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
//     der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------

namespace TidyOS.Properties {
    using System;

    /// <summary>
    ///   Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
    /// </summary>
    // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
    // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
    // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
    // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    internal class Resources {

        private static global::System.Resources.ResourceManager resourceMan;

        private static global::System.Globalization.CultureInfo resourceCulture;

        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal Resources() {
        }

        /// <summary>
        ///   Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TidyOS.Properties.Resources", typeof(Resources).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }

        /// <summary>
        ///   Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
        ///   Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Globalization.CultureInfo Culture {
            get {
                return resourceCulture;
            }
            set {
                resourceCulture = value;
            }
        }

        /// <summary>
        ///   Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
        /// </summary>
        internal static System.Drawing.Bitmap AppIcon24 {
            get {
                object obj = ResourceManager.GetObject("AppIcon24", resourceCulture);
                return ((System.Drawing.Bitmap)(obj));
            }
        }

        /// <summary>
        ///   Sucht eine lokalisierte Zeichenfolge, die Solitaire,CandyCrush,Netflix, Facebook,Twitter,Instagram,Spotify, Skype,OneNote,OneDrive, Mail, Calendar, Weather,News,Maps, Groove, Movies,TV, Phone, Camera,Feedback,FeedbackHub, GetHelp,GetStarted,Messaging,Office,Paint3D,Print3D,StickyNotes,Wallet,YourPhone,3DViewer,Alarms,VoiceRecorder,ToDo,Whiteboard,ZuneMusic,ZuneVideo,3DViewer, DevHome, Copilot ähnelt.
        /// </summary>
        internal static string PredefinedApps {
            get {
                return ResourceManager.GetString("PredefinedApps", resourceCulture);
            }
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.AI
{
    internal class RecallUser : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsAI";
        private const string valueName = "DisableAIDataAnalysis";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Don't Allow Windows to save snapshots of your screen";
        }

        public override string Info()
        {
            return "This feature will disable Recall from saving snapshots of your screen.";
        }

        public override bool CheckFeature()
        {
            // Check if reg key exists
            object value = Registry.GetValue(keyName, valueName, null);
            if (value == null)
            {
                // Key does not exist, turn off feature
                return false;
            }

            // Key exists, check if value is desired value
            return (int)value != desiredValue;
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
                Logger.Log("You've got snapshots disabled.", LogLevel.Info);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, desiredValue, Microsoft.Win32.RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class FullContextMenus : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32";

        public override string GetRegistryKey()
        {
            return $"{keyName}";
        }

        public override string ID()
        {
            return "Show Full context menus in Windows 11";
        }

        public override string Info()
        {
            return "This feature will enable full context menus in Windows 11.";
        }

        public override bool CheckFeature()
        {
            try
            {
                object value = Registry.GetValue(keyName, "", null);
                return value != null; // Return true if value is not null
            }
            catch (Exception ex)
            {
                Logger.Log("Error occurred while checking: " + ex.Message, LogLevel.Error);
                return false;
            }
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, "", "", RegistryValueKind.String);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Error occurred while enabling: " + ex.Message, LogLevel.Error);
                return false;
            }
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.CurrentUser.DeleteSubKeyTree(@"Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}", false);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Error occurred while disabling: " + ex.Message, LogLevel.Error);
                return false;
            }
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.AI
{
    internal class RecallMachine : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsAI";
        private const string valueName = "DisableAIDataAnalysis";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Don't Allow system-wide snapshots";
        }

        public override string Info()
        {
            return "This feature will disable system-wide snapshots.";
        }

        public override bool CheckFeature()
        {
            // Check if reg key exists
            object value = Registry.GetValue(keyName, valueName, null);
            if (value == null)
            {
                // Key does not exist, turn off feature
                return false;
            }

            // Key exists, check if value is desired value
            return (int)value != desiredValue;
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
                Logger.Log("You've even disabled system-wide Snapshots for all users now.", LogLevel.Info);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, desiredValue, Microsoft.Win32.RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.System
{
    internal class VerboseStatus : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System";
        private const string valueName = "VerboseStatus";
        private const int desiredValue = 1;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Enable Verbose Logon status messages";
        }

        public override string Info()
        {
            return "This method allows you to see what processes are hanging when shutting down and turning on the machine.";
        }

        public override bool CheckFeature()
        {
            return (
               Utils.IntEquals(keyName, valueName, desiredValue)
         );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, desiredValue, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using System;
using System.Reflection;
using System.Windows.Forms;

namespace TidyOS
{
    internal static class Program
    {
        /// <summary>
        /// Application entry point.
        /// </summary>
        [STAThread]
        private static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }

        /// <summary>
        /// Retrieves the version of the app
        /// </summary>
        /// <returns>The application version in the format "major.minor.build"</returns>
        public static string GetAppVersion()
        {
            // Get the version of the current executing assembly
            Version version = Assembly.GetExecutingAssembly().GetName().Version;

            // Return the version in the format "major.minor.build"
            return $"{version.Major}.{version.Minor}.{version.Build}";
        }
    }
}

using Settings.Ads;
using Settings.AI;
using Settings.Gaming;
using Settings.Personalization;
using Settings.Privacy;
using Settings.System;
using System;
using System.Collections.Generic;
using System.Linq;
using TidyOS;

namespace Views
{
    public class FeatureCatalog
    {
        private List<FeatureBase> features;

        public FeatureCatalog()
        {
            InitializeFeatures();
        }

        private void InitializeFeatures()
        {
            features = new List<FeatureBase>
            {
                // Ads
                new FileExplorerAds(),
                new FinishSetupAds(),
                new LockScreenAds(),
                new PersonalizedAds(),
                new SettingsAds(),
                new StartmenuAds(),
                new TailoredExperiences(),
                new TipsAndSuggestions(),
                new WelcomeExperienceAds(),

                // Privacy
                new ActivityHistory(),
                new LocationTracking(),
                new PrivacyExperience(),
                new Telemetry(),

                // Personalization
                new SearchboxTaskbarMode(),
                new ShowOrHideMostUsedApps(),
                new ShowTaskViewButton(),
                new LockScreen(),
                new StartLayout(),
                new TaskbarAlignment(),
                new FullContextMenus(),

                // System
                new VerboseStatus(),
                new BSODDetails(),

                // AI
                new CopilotTaskbar(),
                new RecallUser(),
                new RecallMachine(),

                // Gaming
                new GameDVR(),
                new PowerThrottling(),
                new VisualFX(),
            };
        }

        public List<string> GetCategories()
        {
            var categories = features.Select(f => f.GetCategory()).Distinct().ToList();
            categories.Insert(0, "Start"); // Default category
            return categories;
        }

        public List<FeatureBase> GetFeatures(string category)
        {
            return category == "Start" ? features : features.Where(f => f.GetCategory().Equals(category, StringComparison.OrdinalIgnoreCase)).ToList();
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.System
{
    internal class BSODDetails : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl";
        private const string valueName1 = "DisplayParameters";
        private const string valueName2 = "DisableEmoticon";
        private const int desiredValue = 1;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Values: {valueName1}, {valueName2} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Show BSOD details instead of the sad smiley";
        }

        public override string Info()
        {
            return "This method displays the full classic BSOD with technical error details instead of the simplified sad face version.";
        }

        public override bool CheckFeature()
        {
            return (
                Utils.IntEquals(keyName, valueName1, desiredValue) &&
                Utils.IntEquals(keyName, valueName2, desiredValue)
            );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName1, desiredValue, RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, desiredValue, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName1, 0, RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using TidyOS;

public class FeatureListItem
{
    public FeatureBase Feature { get; }
    public string DisplayText { get; set; }  // Dynamic display text

    public FeatureListItem(FeatureBase feature)
    {
        Feature = feature;
        DisplayText = feature.ID();  // Default to feature ID
    }

    public override string ToString()
    {
        return DisplayText;  // Return the dynamic text based on the checkbox state
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    internal class SettingsAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
        private const string valueName = "SubscribedContent-338393Enabled";
        private const string valueName2 = "SubscribedContent-353694Enabled";
        private const string valueName3 = "SubscribedContent-353696Enabled";

        private const int desiredValue = 0;

        public override string ID() => "Disable Settings Ads";

        public override string Info() => "This feature will disable ads in settings.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} + {valueName2} + {valueName3} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return (Utils.IntEquals(keyName, valueName, desiredValue) &&
                   Utils.IntEquals(keyName, valueName2, desiredValue) &&
                   Utils.IntEquals(keyName, valueName3, desiredValue)
            );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 0, Microsoft.Win32.RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName3, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 1, Microsoft.Win32.RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName3, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    public class WelcomeExperienceAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
        private const string valueName = "SubscribedContent-310093Enabled";
        private const int desiredValue = 0;

        public override string ID() => "Disable Welcome Experience Ads";

        public override string Info() => "This feature will disable ads in the welcome experience.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, 0);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    internal class LockScreenAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
        private const string valueName = "RotatingLockScreenOverlayEnabled";
        private const string valueName2 = "SubscribedContent-338387Enabled";
        private const int desiredValue = 0;

        public override string ID() => "Disable Lock Screen Tips and Ads";

        public override string Info() => "This feature will disable tips and ads on the lock screen.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return (Utils.IntEquals(keyName, valueName, desiredValue) &&
                   Utils.IntEquals(keyName, valueName2, desiredValue)
            );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    internal class TailoredExperiences : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy";
        private const string valueName = "TailoredExperiencesWithDiagnosticDataEnabled";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable Tailored experiences";
        }

        public override string Info()
        {
            return "Tailored Experiences allows Microsoft to get information from you to deliver personalized tips, ads, and recommendations. Many people would call this telemetry, or even spying.";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    internal class TipsAndSuggestions : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
        private const string valueName = "SubscribedContent-338389Enabled";
        private const int desiredValue = 0;

        public override string ID() => "Disable General Tips and Ads";

        public override string Info() => "This feature will disable general tips and ads.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return (Utils.IntEquals(keyName, valueName, desiredValue)
                 );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class TaskbarAlignment : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
        private const string valueName = "TaskbarAl";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Align Start button to left";
        }

        public override string Info()
        {
            return "This feature will align the Start button to left";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Privacy
{
    public class Telemetry : FeatureBase
    {
        private const string dataCollection = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DataCollection";
        private const string diagTrack = @"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\DiagTrack";

        public override string ID() => "Turn off Telemetry data collection";

        public override string Info() => "This feature will turn off telemetry data collection and prevent the data from being sent to Microsoft.";

        public override string GetRegistryKey()
        {
            return $"{dataCollection} | {diagTrack}";
        }

        public override bool CheckFeature()
        {
            return (
               Utils.IntEquals(dataCollection, "AllowTelemetry", 0) &&
                Utils.IntEquals(diagTrack, "Start", 2)

           );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(dataCollection, "AllowTelemetry", 0, RegistryValueKind.DWord);
                Registry.SetValue(diagTrack, "Start", 2, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(dataCollection, "AllowTelemetry", 1, RegistryValueKind.DWord);
                Registry.SetValue(diagTrack, "Start", 4, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    internal class StartmenuAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
        private const string valueName = "Start_IrisRecommendations";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable Start menu Ads";
        }

        public override string Info()
        {
            return "This feature will disable ads in the start menu.";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Gaming
{
    internal class GameDVR : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\System\GameConfigStore";

        // 0 = Enabled, 2 = Disabled
        private const string keyName2 = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\ApplicationManagement\AllowGameDVR";

        private const string valueName = "GameDVR_Enabled";
        private const string valueName2 = "GameDVR_FSEBehaviorMode";
        private const string valueName3 = "value";

        public override string GetRegistryKey()
        {
            return $"{keyName} |Value: {valueName} | {valueName2} | {keyName2} | {valueName3} ";
        }

        public override string ID()
        {
            return "Disable Game DVR";
        }

        public override string Info()
        {
            return "This feature will disable Game DVR.";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, 0) &&
                       Utils.IntEquals(keyName, valueName2, 2) &&
                       Utils.IntEquals(keyName2, valueName3, 0);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 2, RegistryValueKind.DWord);
                Registry.SetValue(keyName2, valueName3, 0, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                Registry.SetValue(keyName, valueName2, 0, RegistryValueKind.DWord);
                Registry.SetValue(keyName2, valueName3, 1, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class ShowTaskViewButton : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
        private const string valueName = "ShowTaskViewButton";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Hide Task view button on taskbar";
        }

        public override string Info()
        {
            return "This feature will hide the Task view button on taskbar";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    public class FinishSetupAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement";
        private const string valueName = "ScoobeSystemSettingEnabled";
        private const int desiredValue = 0;

        public override string ID() => "Disable Finish Setup Ads";

        public override string Info() => "This feature will disable the \"Lets finish setting up your device\" and other advertising.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return
                Utils.IntEquals(keyName, valueName, 0);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    internal class FileExplorerAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
        private const string valueName = "ShowSyncProviderNotifications";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable File Explorer Ads";
        }

        public override string Info()
        {
            return "This feature will disable ads in File Explorer.";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, desiredValue);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                Logger.Log("File Explorer Ads disabled", LogLevel.Info);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                Logger.Log("File Explorer Ads enabled", LogLevel.Info);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class LockScreen : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization";
        private const string valueName = "NoLockScreen";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Don't use personalized lock screen";
        }

        public override string Info()
        {
            return "This feature will disable the personalized lock screen.";
        }

        public override bool CheckFeature()
        {
            return !(
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Ads
{
    public class PersonalizedAds : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo";
        private const string valueName = "Enabled";
        private const int desiredValue = 0;

        public override string ID() => "Disable Personalized Ads";

        public override string Info() => "This feature will disable personalized ads.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, 0);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Gaming
{
    internal class PowerThrottling : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling";
        private const string valueName = "PowerThrottlingOff";
        private const int desiredValue = 1;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable Power Throttling";
        }

        public override string Info()
        {
            return "This feature will disable Power Throttling.";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, desiredValue);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, desiredValue, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.AI
{
    internal class CopilotTaskbar : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsCopilot";
        private const string valueName = "TurnOffWindowsCopilot";
        private const int desiredValue = 1;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Don't Show Copilot in Taskbar";
        }

        public override string Info()
        {
            return "This feature will disable Copilot in Taskbar.";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, 1);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, desiredValue, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class StartLayout : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
        private const string valueName = "Start_Layout";
        private const int desiredValue = 1;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Pin more Apps on start menu";
        }

        public override string Info()
        {
            return "This feature will allow pinning more Apps on start menu";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Privacy
{
    public class PrivacyExperience : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OOBE";
        private const string valueName = "DisablePrivacyExperience";
        private const int desiredValue = 0;

        public override string ID() => "Disable Privacy Settings Experience at sign-in";

        public override string Info() => "This feature will disable Privacy Settings Experience at sign-in.";

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override bool CheckFeature()
        {
            return !Utils.IntEquals(keyName, valueName, desiredValue);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Privacy
{
    internal class LocationTracking : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\LocationAndSensors";
        private const string valueName = "LocationEnabled";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable location tracking";
        }

        public override string Info()
        {
            return "Disable location tracking (prevents Windows from accessing your location)";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, desiredValue);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Gaming
{
    internal class VisualFX : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects";
        private const string valueName = "VisualFXSetting";
        private const int desiredValue = 2;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable Visual Effects";
        }

        public override string Info()
        {
            return "This feature will disable visual effects in Windows.";
        }

        public override bool CheckFeature()
        {
            return Utils.IntEquals(keyName, valueName, 0);
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 2, Microsoft.Win32.RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Privacy
{
    internal class ActivityHistory : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy";
        private const string valueName = "ActivityHistoryEnabled";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Disable activity history";
        }

        public override string Info()
        {
            return "Disable activity history (prevents Windows from tracking and storing your activity)";
        }

        public override bool CheckFeature()
        {
            return (
               Utils.IntEquals(keyName, valueName, desiredValue)
         );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);

                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class ShowOrHideMostUsedApps : FeatureBase
    {
        private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer";
        private const string valueName = "ShowOrHideMostUsedApps";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Hide Most used apps in start menu";
        }

        public override string Info()
        {
            return "This feature will hide Most used apps in start menu";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using TidyOS;

namespace Settings.Personalization
{
    internal class SearchboxTaskbarMode : FeatureBase
    {
        private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search";
        private const string valueName = "SearchboxTaskbarMode";
        private const int desiredValue = 0;

        public override string GetRegistryKey()
        {
            return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}";
        }

        public override string ID()
        {
            return "Hide search box on taskbar";
        }

        public override string Info()
        {
            return "This feature will hide search box on taskbar";
        }

        public override bool CheckFeature()
        {
            return (
                   Utils.IntEquals(keyName, valueName, desiredValue)
             );
        }

        public override bool DoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }

        public override bool UndoFeature()
        {
            try
            {
                Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord);
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Code red in " + ex.Message, LogLevel.Error);
            }

            return false;
        }
    }
}

using Microsoft.Win32;
using System;
using System.Windows.Forms;

namespace TidyOS
{
    internal class Utils
    {
        /// <summary>
        /// Check registry int equal
        /// </summary>
        /// <param name="keyName"></param>
        /// <param name="valueName"></param>
        /// <param name="expectedValue"></param>
        /// <returns></returns>
        public static bool IntEquals(string keyName, string valueName, int expectedValue)
        {
            try
            {
                var value = Registry.GetValue(keyName, valueName, null);
                return (value != null && (int)value == expectedValue);
            }
            catch (Exception ex)

            {
                MessageBox.Show(keyName, ex.Message, MessageBoxButtons.OK);
                return false;
            }
        }

        /// <summary>
        /// Check registry string equal
        /// </summary>
        /// <param name="keyName"></param>
        /// <param name="valueName"></param>
        /// <param name="expectedValue"></param>
        /// <returns></returns>
        public static bool StringEquals(string keyName, string valueName, string expectedValue)
        {
            try
            {
                var value = Registry.GetValue(keyName, valueName, null);

                return (value != null && (string)value == expectedValue);
            }
            catch (Exception ex)
            {
                MessageBox.Show(keyName, ex.Message, MessageBoxButtons.OK);
                return false;
            }
        }
    }
}

using System.Linq;

namespace TidyOS
{
    public abstract class FeatureBase
    {
        public abstract string ID();

        public abstract string Info();

        public abstract bool CheckFeature();

        public abstract bool DoFeature();

        public abstract bool UndoFeature();

        public abstract string GetRegistryKey();

        public string GetCategory()
        {
            // Extracts the category from the namespace (e.g., "Ads" from "Settings.Ads")
            return GetType().Namespace?.Split('.').Last() ?? "Unknown";
        }
    }
}

//------------------------------------------------------------------------------
// <auto-generated>
//     Dieser Code wurde von einem Tool generiert.
//     Laufzeitversion:4.0.30319.42000
//
//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
//     der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------

namespace TidyOS.Properties {

    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

        public static Settings Default {
            get {
                return defaultInstance;
            }
        }
    }
}

This code segment functions to: Collect and format executable script content from selected configuration items by verifying file existence and appending textual representations with standardized separators.

```c_sharp
[TASK_BEGIN]
{
    var node = entry.Key;
    if (node.Tag is string psScriptPath)
    {
        scriptDisplay.AppendLine($"--- Script: {Path.GetFileName(psScriptPath)} ---");
        scriptDisplay.AppendLine(File.ReadAllText(psScriptPath));
        scriptDisplay.AppendLine(new string('-', 40) + Environment.NewLine);
        scriptFound = true;
    }
}
[TASK_END]
```