diff --git a/legacy-modules/darwin-modules/default.nix b/legacy-modules/darwin-modules/default.nix deleted file mode 100644 index 5f4447b..0000000 --- a/legacy-modules/darwin-modules/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -# this folder container modules that are for darwin only -{...}: { - imports = [ - ./home-manager - ./users.nix - ./system.nix - ]; -} diff --git a/legacy-modules/darwin-modules/home-manager/default.nix b/legacy-modules/darwin-modules/home-manager/default.nix deleted file mode 100644 index 1ebec5f..0000000 --- a/legacy-modules/darwin-modules/home-manager/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -# modules in this folder are to adapt home-manager modules configs to darwin-module configs -{...}: {} diff --git a/legacy-modules/darwin-modules/system.nix b/legacy-modules/darwin-modules/system.nix deleted file mode 100644 index ee56162..0000000 --- a/legacy-modules/darwin-modules/system.nix +++ /dev/null @@ -1,27 +0,0 @@ -{self, ...}: { - system.configurationRevision = self.rev or self.dirtyRev or null; - - nix = { - gc = { - automatic = true; - interval = [ - { - Hour = 4; - Minute = 15; - Weekday = 7; - } - ]; - options = "--delete-older-than 7d"; - }; - optimise = { - automatic = true; - interval = [ - { - Hour = 4; - Minute = 15; - Weekday = 7; - } - ]; - }; - }; -} diff --git a/legacy-modules/darwin-modules/users.nix b/legacy-modules/darwin-modules/users.nix deleted file mode 100644 index 72fd1b1..0000000 --- a/legacy-modules/darwin-modules/users.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - config, - ... -}: let - host = config.host; -in { - users = { - users = { - leyla = { - name = lib.mkForce host.users.leyla.name; - home = lib.mkForce "/home/${host.users.leyla.name}"; - }; - }; - }; -} diff --git a/legacy-modules/home-manager-modules/default.nix b/legacy-modules/home-manager-modules/default.nix deleted file mode 100644 index 29d3414..0000000 --- a/legacy-modules/home-manager-modules/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -# this folder container modules that are for home manager only -{...}: { - imports = [ - ./sops.nix - ./user.nix - ./flipperzero.nix - ./i18n.nix - ./impermanence.nix - ./openssh.nix - ./gnome.nix - ./programs - ]; -} diff --git a/legacy-modules/home-manager-modules/flipperzero.nix b/legacy-modules/home-manager-modules/flipperzero.nix deleted file mode 100644 index 6354bc0..0000000 --- a/legacy-modules/home-manager-modules/flipperzero.nix +++ /dev/null @@ -1,3 +0,0 @@ -{lib, ...}: { - options.hardware.flipperzero.enable = lib.mkEnableOption "enable flipperzero hardware"; -} diff --git a/legacy-modules/home-manager-modules/gnome.nix b/legacy-modules/home-manager-modules/gnome.nix deleted file mode 100644 index ab56189..0000000 --- a/legacy-modules/home-manager-modules/gnome.nix +++ /dev/null @@ -1,203 +0,0 @@ -{ - lib, - config, - pkgs, - ... -}: let - enabledExtensions = - [] - ++ lib.optional config.gnome.extensions.dash-to-dock.enable pkgs.gnomeExtensions.dash-to-dock - ++ lib.optional config.gnome.extensions.dash-to-panel.enable pkgs.gnomeExtensions.dash-to-panel; - - extensions = config.gnome.extraExtensions ++ enabledExtensions; -in { - options.gnome = { - extraWindowControls = lib.mkEnableOption "Should we add back in the minimize and maximize window controls?"; - clockFormat = lib.mkOption { - type = lib.types.enum [ - "12h" - "24h" - ]; - default = "24h"; - }; - colorScheme = lib.mkOption { - type = lib.types.enum [ - "default" - "prefer-dark" - "prefer-light" - ]; - default = "default"; - }; - accentColor = lib.mkOption { - type = lib.types.enum [ - "blue" - "teal" - "green" - "yellow" - "orange" - "red" - "pink" - "purple" - "slate" - ]; - default = "blue"; - }; - extraExtensions = lib.mkOption { - type = lib.types.listOf lib.types.package; - default = []; - description = "The set of extensions to install and enable in the user environment."; - }; - hotkeys = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { - options = { - key = lib.mkOption { - type = lib.types.strMatching "[a-zA-Z0-9-]+"; - default = builtins.replaceStrings [" " "/" "_"] ["-" "-" "-"] name; - }; - name = lib.mkOption { - type = lib.types.str; - default = name; - }; - binding = lib.mkOption { - type = lib.types.str; - }; - command = lib.mkOption { - type = lib.types.str; - }; - }; - })); - default = {}; - }; - displayScaling = lib.mkOption { - type = lib.types.nullOr (lib.types.enum [100 125 150 175 200]); - default = null; - description = "Display scaling percentage for GNOME"; - }; - experimentalFeatures = lib.mkOption { - type = lib.types.submodule { - options = { - scaleMonitorFramebuffer = lib.mkEnableOption "scale-monitor-framebuffer experimental feature"; - }; - }; - default = {}; - description = "GNOME experimental features to enable"; - }; - - nightLight = lib.mkOption { - type = lib.types.submodule { - options = { - enable = lib.mkEnableOption "night light (blue light filter)"; - automatic = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Whether to automatically schedule night light based on sunset/sunrise"; - }; - fromTime = lib.mkOption { - type = lib.types.float; - default = 20.0; - description = "Start time for night light in 24-hour format (e.g., 20.0 for 8:00 PM)"; - }; - toTime = lib.mkOption { - type = lib.types.float; - default = 6.0; - description = "End time for night light in 24-hour format (e.g., 6.0 for 6:00 AM)"; - }; - temperature = lib.mkOption { - type = lib.types.int; - default = 4000; - description = "Color temperature for night light (1000-10000K, lower is warmer)"; - }; - }; - }; - default = {}; - description = "Night light configuration"; - }; - - extensions = { - dash-to-dock = { - enable = lib.mkEnableOption "Dash to Dock extension"; - options = lib.mkOption { - type = lib.types.nullOr lib.types.attrs; - default = null; - description = "Dash to Dock configuration options. If null, no custom configuration will be applied."; - }; - }; - - dash-to-panel = { - enable = lib.mkEnableOption "Dash to Panel extension"; - options = lib.mkOption { - type = lib.types.nullOr lib.types.attrs; - default = null; - description = "Dash to Panel configuration options. If null, no custom configuration will be applied."; - }; - }; - }; - }; - - config = { - home.packages = extensions; - dconf = { - settings = lib.mkMerge [ - { - "org/gnome/shell" = { - disable-user-extensions = false; # enables user extensions - enabled-extensions = builtins.map (extension: extension.extensionUuid) extensions; - }; - - "org/gnome/desktop/wm/preferences".button-layout = lib.mkIf config.gnome.extraWindowControls ":minimize,maximize,close"; - - "org/gnome/desktop/interface".color-scheme = config.gnome.colorScheme; - "org/gnome/desktop/interface".accent-color = config.gnome.accentColor; - "org/gnome/desktop/interface".clock-format = config.gnome.clockFormat; - "org/gnome/desktop/interface".text-scaling-factor = lib.mkIf (config.gnome.displayScaling != null) (config.gnome.displayScaling / 100.0); - - "org/gnome/mutter".experimental-features = lib.mkIf (builtins.any (x: x) (builtins.attrValues config.gnome.experimentalFeatures)) ( - lib.optional config.gnome.experimentalFeatures.scaleMonitorFramebuffer "scale-monitor-framebuffer" - ); - } - - # Night light configuration - (lib.mkIf config.gnome.nightLight.enable { - "org/gnome/settings-daemon/plugins/color" = { - night-light-enabled = true; - night-light-schedule-automatic = config.gnome.nightLight.automatic; - night-light-schedule-from = lib.mkIf (!config.gnome.nightLight.automatic) config.gnome.nightLight.fromTime; - night-light-schedule-to = lib.mkIf (!config.gnome.nightLight.automatic) config.gnome.nightLight.toTime; - night-light-temperature = config.gnome.nightLight.temperature; - }; - }) - ( - lib.mkMerge ( - builtins.map (value: let - entry = "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/${value.key}"; - in { - ${entry} = { - binding = value.binding; - command = value.command; - name = value.name; - }; - - "org/gnome/settings-daemon/plugins/media-keys" = { - custom-keybindings = [ - "/${entry}/" - ]; - }; - }) - ( - lib.attrsets.mapAttrsToList (_: value: value) config.gnome.hotkeys - ) - ) - ) - - # Extension configurations - (lib.mkIf (config.gnome.extensions.dash-to-dock.enable && config.gnome.extensions.dash-to-dock.options != null) { - "org/gnome/shell/extensions/dash-to-dock" = config.gnome.extensions.dash-to-dock.options; - }) - - (lib.mkIf (config.gnome.extensions.dash-to-panel.enable && config.gnome.extensions.dash-to-panel.options != null) { - "org/gnome/shell/extensions/dash-to-panel" = config.gnome.extensions.dash-to-panel.options; - }) - ]; - }; - }; -} diff --git a/legacy-modules/home-manager-modules/i18n.nix b/legacy-modules/home-manager-modules/i18n.nix deleted file mode 100644 index 2c93e59..0000000 --- a/legacy-modules/home-manager-modules/i18n.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - lib, - config, - ... -}: { - options = { - i18n = { - defaultLocale = lib.mkOption { - type = lib.types.str; - default = "en_US.UTF-8"; - example = "nl_NL.UTF-8"; - description = '' - The default locale. It determines the language for program - messages, the format for dates and times, sort order, and so on. - It also determines the character set, such as UTF-8. - ''; - }; - - extraLocaleSettings = lib.mkOption { - type = lib.types.attrsOf lib.types.str; - default = {}; - example = { - LC_MESSAGES = "en_US.UTF-8"; - LC_TIME = "de_DE.UTF-8"; - }; - description = '' - A set of additional system-wide locale settings other than - `LANG` which can be configured with - {option}`i18n.defaultLocale`. - ''; - }; - }; - }; - - config = { - home.sessionVariables = - { - LANG = config.i18n.defaultLocale; - } - // config.i18n.extraLocaleSettings; - }; -} diff --git a/legacy-modules/home-manager-modules/impermanence.nix b/legacy-modules/home-manager-modules/impermanence.nix deleted file mode 100644 index e8b3ec4..0000000 --- a/legacy-modules/home-manager-modules/impermanence.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - config, - lib, - osConfig, - ... -}: let - cfg = config.impermanence; -in { - options.impermanence = { - enable = lib.mkEnableOption "impermanence for home directory"; - fallbackPersistence.enable = lib.mkOption { - type = lib.types.bool; - default = true; - }; - persistencePath = lib.mkOption { - type = lib.types.str; - default = - if osConfig.storage.generateBase - then "/persist/replicate/home" - else "/persist"; - description = "The base path for user home persistence. The impermanence module will automatically append the user's home directory path. Automatically adapts based on whether the system uses the new dataset layout or the legacy one."; - }; - }; - - config = lib.mkMerge [ - (lib.mkIf config.impermanence.enable { - assertions = [ - { - assertion = osConfig.storage.impermanence.enable; - message = "impermanence can not be enabled for a user when it is not enabled for the system"; - } - ]; - }) - # If impermanence is not enabled for this user but system impermanence is enabled, - # persist the entire home directory as fallback - (lib.mkIf (osConfig.storage.impermanence.enable && !cfg.enable && cfg.fallbackPersistence.enable) { - home.persistence."${cfg.persistencePath}" = { - directories = ["."]; - allowOther = true; - }; - }) - ]; -} diff --git a/legacy-modules/home-manager-modules/openssh.nix b/legacy-modules/home-manager-modules/openssh.nix deleted file mode 100644 index 2f44957..0000000 --- a/legacy-modules/home-manager-modules/openssh.nix +++ /dev/null @@ -1,107 +0,0 @@ -{ - pkgs, - config, - osConfig, - lib, - ... -}: { - options.programs.openssh = { - enable = lib.mkEnableOption "should we enable openssh"; - authorizedKeys = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = []; - }; - hostKeys = lib.mkOption { - type = lib.types.listOf lib.types.attrs; - default = []; - example = [ - { - type = "rsa"; - bits = 4096; - path = "${config.home.username}_${osConfig.networking.hostName}_rsa"; - rounds = 100; - openSSHFormat = true; - } - { - type = "ed25519"; - path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; - rounds = 100; - comment = "key comment"; - } - ]; - description = '' - NixOS can automatically generate SSH host keys. This option - specifies the path, type and size of each key. See - {manpage}`ssh-keygen(1)` for supported types - and sizes. Paths are relative to home directory - ''; - }; - }; - - config = lib.mkIf config.programs.openssh.enable ( - lib.mkMerge [ - ( - lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) { - services.ssh-agent.enable = true; - programs.ssh = { - enable = true; - enableDefaultConfig = false; - matchBlocks = { - "*" = { - compression = true; - addKeysToAgent = "confirm"; - }; - }; - # extraConfig = lib.strings.concatLines ( - # builtins.map (hostKey: "IdentityFile ~/.ssh/${hostKey.path}") config.programs.openssh.hostKeys - # ); - }; - - systemd.user.services = builtins.listToAttrs ( - builtins.map (hostKey: - lib.attrsets.nameValuePair "ssh-gen-keys-${hostKey.path}" { - Install = { - WantedBy = ["default.target"]; - }; - Service = let - path = "${config.home.homeDirectory}/.ssh/${hostKey.path}"; - in { - Restart = "always"; - Type = "simple"; - ExecStart = "${ - pkgs.writeShellScript "ssh-gen-keys" '' - if ! [ -s "${path}" ]; then - if ! [ -h "${path}" ]; then - rm -f "${path}" - fi - mkdir -p "$(dirname '${path}')" - chmod 0755 "$(dirname '${path}')" - ${pkgs.openssh}/bin/ssh-keygen \ - -t "${hostKey.type}" \ - ${lib.optionalString (hostKey ? bits) "-b ${toString hostKey.bits}"} \ - ${lib.optionalString (hostKey ? rounds) "-a ${toString hostKey.rounds}"} \ - ${lib.optionalString (hostKey ? comment) "-C '${hostKey.comment}'"} \ - ${lib.optionalString (hostKey ? openSSHFormat && hostKey.openSSHFormat) "-o"} \ - -f "${path}" \ - -N "" - chown ${config.home.username} ${path}* - chgrp ${config.home.username} ${path}* - fi - '' - }"; - }; - }) - config.programs.openssh.hostKeys - ); - } - ) - (lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - files = lib.lists.flatten ( - builtins.map (hostKey: [".ssh/${hostKey.path}" ".ssh/${hostKey.path}.pub"]) config.programs.openssh.hostKeys - ); - }; - }) - ] - ); -} diff --git a/legacy-modules/home-manager-modules/programs/android-studio.nix b/legacy-modules/home-manager-modules/programs/android-studio.nix deleted file mode 100644 index 8d1e28c..0000000 --- a/legacy-modules/home-manager-modules/programs/android-studio.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.android-studio = { - enable = lib.mkEnableOption "enable android-studio"; - }; - - config = lib.mkIf config.programs.android-studio.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - android-studio - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/Google/AndroidStudio" - ".android" - ".gradle" - "${config.xdg.cacheHome}/Google/AndroidStudio" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/anki.nix b/legacy-modules/home-manager-modules/programs/anki.nix deleted file mode 100644 index dcabce8..0000000 --- a/legacy-modules/home-manager-modules/programs/anki.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - lib, - config, - ... -}: { - config = lib.mkIf (config.programs.anki.enable && config.impermanence.enable) { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - ".local/share/Anki2" - ]; - }; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/bitwarden.nix b/legacy-modules/home-manager-modules/programs/bitwarden.nix deleted file mode 100644 index bbd2086..0000000 --- a/legacy-modules/home-manager-modules/programs/bitwarden.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.bitwarden = { - enable = lib.mkEnableOption "enable bitwarden"; - }; - - config = lib.mkIf config.programs.bitwarden.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - bitwarden-desktop - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/Bitwarden" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/bruno.nix b/legacy-modules/home-manager-modules/programs/bruno.nix deleted file mode 100644 index 7bc64b6..0000000 --- a/legacy-modules/home-manager-modules/programs/bruno.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.bruno = { - enable = lib.mkEnableOption "enable bruno"; - }; - - config = lib.mkIf config.programs.bruno.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - bruno - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/bruno/" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/calibre.nix b/legacy-modules/home-manager-modules/programs/calibre.nix deleted file mode 100644 index 7174b43..0000000 --- a/legacy-modules/home-manager-modules/programs/calibre.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - config = lib.mkIf config.programs.calibre.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - calibre - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/calibre" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/davinci-resolve.nix b/legacy-modules/home-manager-modules/programs/davinci-resolve.nix deleted file mode 100644 index 5956578..0000000 --- a/legacy-modules/home-manager-modules/programs/davinci-resolve.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.davinci-resolve = { - enable = lib.mkEnableOption "enable davinci-resolve"; - }; - - config = lib.mkIf config.programs.davinci-resolve.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - davinci-resolve - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.dataHome}/DaVinciResolve" - "${config.xdg.configHome}/blackmagic" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/dbeaver.nix b/legacy-modules/home-manager-modules/programs/dbeaver.nix deleted file mode 100644 index 1595a02..0000000 --- a/legacy-modules/home-manager-modules/programs/dbeaver.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.dbeaver-bin = { - enable = lib.mkEnableOption "enable dbeaver"; - }; - - config = lib.mkIf config.programs.dbeaver-bin.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - dbeaver-bin - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.dataHome}/DBeaverData/" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/default.nix b/legacy-modules/home-manager-modules/programs/default.nix deleted file mode 100644 index 044d076..0000000 --- a/legacy-modules/home-manager-modules/programs/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{...}: { - imports = [ - ./android-studio.nix - ./firefox.nix - ./signal.nix - ./bitwarden.nix - ./makemkv.nix - ./obs.nix - ./anki.nix - ./piper.nix - ./qbittorrent.nix - ./discord.nix - ./obsidian.nix - ./prostudiomasters.nix - ./idea.nix - ./kdenlive.nix - ./kicad.nix - ./krita.nix - ./protonvpn.nix - ./calibre.nix - ./bruno.nix - ./dbeaver.nix - ./dungeon-draft.nix - ./steam.nix - ./vscode - ./ungoogled-chromium.nix - ./libreoffice.nix - ./mapillary-uploader.nix - ./inkscape.nix - ./gimp.nix - ./guild-wars-2.nix - ./proxmark3.nix - ./freecad.nix - ./onionshare.nix - ./mfoc.nix - ./noita-entangled-worlds.nix - ./pdfarranger.nix - ./picard.nix - ./qflipper.nix - ./openvpn.nix - ./noisetorch.nix - ./olympus.nix - ./openrgb.nix - ./via.nix - ./vortex.nix - ./davinci-resolve.nix - ./gdx-liftoff.nix - ./tor-browser.nix - ./vmware-workstation.nix - ./proton-mail-pwa.nix - ./proton-calendar-pwa.nix - ./matrix-cyberia-pwa.nix - ./e621-downloader.nix - ]; -} diff --git a/legacy-modules/home-manager-modules/programs/discord.nix b/legacy-modules/home-manager-modules/programs/discord.nix deleted file mode 100644 index e42367b..0000000 --- a/legacy-modules/home-manager-modules/programs/discord.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - config, - ... -}: { - config = lib.mkIf config.programs.discord.enable (lib.mkMerge [ - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/discord/" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/dungeon-draft.nix b/legacy-modules/home-manager-modules/programs/dungeon-draft.nix deleted file mode 100644 index faa69c6..0000000 --- a/legacy-modules/home-manager-modules/programs/dungeon-draft.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - ... -}: let - cfg = config.programs.dungeon-draft; -in { - options.programs.dungeon-draft = { - enable = lib.mkEnableOption "Dungeon Draft"; - }; - - config = { - assertions = [ - { - assertion = !cfg.enable; - message = '' - Dungeon Draft module is not yet fully configured. - Please download the Dungeon Draft executable (.exe) from the official website, - then configure the Wine environment and executable path as needed. - ''; - } - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/e621-downloader.nix b/legacy-modules/home-manager-modules/programs/e621-downloader.nix deleted file mode 100644 index 2cb32a9..0000000 --- a/legacy-modules/home-manager-modules/programs/e621-downloader.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.e621-downloader = { - enable = lib.mkEnableOption "enable e621-downloader"; - }; - - config = lib.mkIf config.programs.e621-downloader.enable { - home.packages = with pkgs; [ - e621-downloader - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/firefox.nix b/legacy-modules/home-manager-modules/programs/firefox.nix deleted file mode 100644 index 2756e31..0000000 --- a/legacy-modules/home-manager-modules/programs/firefox.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - lib, - config, - ... -}: let - buildProfilePersistence = profile: { - directories = [ - ".mozilla/firefox/${profile}/extensions" - ]; - files = [ - ".mozilla/firefox/${profile}/cookies.sqlite" - ".mozilla/firefox/${profile}/favicons.sqlite" - # Permissions and ${profileName} levels for each site - ".mozilla/firefox/${profile}/permissions.sqlite" - ".mozilla/firefox/${profile}/content-prefs.sqlite" - # Browser history and bookmarks - ".mozilla/firefox/${profile}/places.sqlite" - # I guess this is useful? - # https://bugzilla.mozilla.org/show_bug.cgi?id=1511384 - # https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria - ".mozilla/firefox/${profile}/storage.sqlite" - # Extension configuration - ".mozilla/firefox/${profile}/extension-settings.json" - ]; - }; -in { - config = lib.mkIf (config.programs.firefox.enable && config.impermanence.enable) { - home.persistence."${config.impermanence.persistencePath}" = lib.mkMerge ( - ( - lib.attrsets.mapAttrsToList - (profile: _: buildProfilePersistence profile) - config.programs.firefox.profiles - ) - ++ ( - lib.lists.optional - ((builtins.length (lib.attrsets.mapAttrsToList (key: value: value) config.programs.firefox.profiles)) == 0) - (buildProfilePersistence "default") - ) - ); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/freecad.nix b/legacy-modules/home-manager-modules/programs/freecad.nix deleted file mode 100644 index 50600db..0000000 --- a/legacy-modules/home-manager-modules/programs/freecad.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.freecad = { - enable = lib.mkEnableOption "enable freecad"; - }; - - config = lib.mkIf config.programs.freecad.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - freecad - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/FreeCAD" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/gdx-liftoff.nix b/legacy-modules/home-manager-modules/programs/gdx-liftoff.nix deleted file mode 100644 index 4440831..0000000 --- a/legacy-modules/home-manager-modules/programs/gdx-liftoff.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.gdx-liftoff = { - enable = lib.mkEnableOption "enable gdx-liftoff"; - }; - - config = lib.mkIf config.programs.gdx-liftoff.enable { - home.packages = with pkgs; [ - gdx-liftoff - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/gimp.nix b/legacy-modules/home-manager-modules/programs/gimp.nix deleted file mode 100644 index 95c87e6..0000000 --- a/legacy-modules/home-manager-modules/programs/gimp.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.gimp = { - enable = lib.mkEnableOption "enable gimp"; - }; - - config = lib.mkIf config.programs.gimp.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - gimp - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/GIMP" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/guild-wars-2.nix b/legacy-modules/home-manager-modules/programs/guild-wars-2.nix deleted file mode 100644 index 3f68ec6..0000000 --- a/legacy-modules/home-manager-modules/programs/guild-wars-2.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - ... -}: let - cfg = config.programs.guild-wars-2; -in { - options.programs.guild-wars-2 = { - enable = lib.mkEnableOption "Guild Wars 2"; - }; - - config = { - assertions = [ - { - assertion = !cfg.enable; - message = '' - Guild Wars 2 module is not yet fully configured. - Please install Guild Wars 2 manually via Steam or the official client, - then configure the Wine environment as needed. - ''; - } - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/idea.nix b/legacy-modules/home-manager-modules/programs/idea.nix deleted file mode 100644 index a1aebda..0000000 --- a/legacy-modules/home-manager-modules/programs/idea.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.jetbrains.idea-oss = { - enable = lib.mkEnableOption "enable idea-oss"; - }; - - config = lib.mkIf config.programs.jetbrains.idea-oss.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - jetbrains.idea-oss - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - # configuration - "${config.xdg.configHome}/JetBrains/" - # plugins - "${config.xdg.dataHome}/JetBrains/" - # System and Logs - "${config.xdg.cacheHome}/JetBrains/" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/inkscape.nix b/legacy-modules/home-manager-modules/programs/inkscape.nix deleted file mode 100644 index 28eb334..0000000 --- a/legacy-modules/home-manager-modules/programs/inkscape.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.inkscape = { - enable = lib.mkEnableOption "enable inkscape"; - }; - - config = lib.mkIf config.programs.inkscape.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - inkscape - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/inkscape" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/kdenlive.nix b/legacy-modules/home-manager-modules/programs/kdenlive.nix deleted file mode 100644 index 2c4bac8..0000000 --- a/legacy-modules/home-manager-modules/programs/kdenlive.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.programs.kdenlive; -in { - options.programs.kdenlive = { - enable = lib.mkEnableOption "kdenlive"; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.kdePackages.kdenlive; - description = "The kdenlive package to install."; - }; - }; - - config = lib.mkIf cfg.enable (lib.mkMerge [ - { - home.packages = [ - cfg.package - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/kdenliverc" - "${config.xdg.dataHome}/kdenlive" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/kicad.nix b/legacy-modules/home-manager-modules/programs/kicad.nix deleted file mode 100644 index c2414c1..0000000 --- a/legacy-modules/home-manager-modules/programs/kicad.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.kicad = { - enable = lib.mkEnableOption "enable kicad"; - }; - - config = lib.mkIf config.programs.kicad.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - kicad - ]; - } - ( - lib.mkIf config.impermanence.enable { - # TODO: - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/krita.nix b/legacy-modules/home-manager-modules/programs/krita.nix deleted file mode 100644 index dd7bb12..0000000 --- a/legacy-modules/home-manager-modules/programs/krita.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.krita = { - enable = lib.mkEnableOption "enable krita"; - }; - - config = lib.mkIf config.programs.krita.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - krita - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/kritarc" - "${config.xdg.dataHome}/krita" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/libreoffice.nix b/legacy-modules/home-manager-modules/programs/libreoffice.nix deleted file mode 100644 index 283c8db..0000000 --- a/legacy-modules/home-manager-modules/programs/libreoffice.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.libreoffice = { - enable = lib.mkEnableOption "enable libreoffice"; - }; - - config = lib.mkIf config.programs.libreoffice.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - libreoffice - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/libreoffice" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/makemkv.nix b/legacy-modules/home-manager-modules/programs/makemkv.nix deleted file mode 100644 index f748f68..0000000 --- a/legacy-modules/home-manager-modules/programs/makemkv.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.makemkv = { - enable = lib.mkEnableOption "enable makemkv"; - appKeyFile = lib.mkOption { - type = lib.types.str; - }; - destinationDir = lib.mkOption { - type = lib.types.str; - }; - }; - - config = lib.mkIf config.programs.makemkv.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - makemkv - ]; - - sops.templates."MakeMKV.settings.conf".content = '' - app_DestinationDir = "${config.programs.makemkv.destinationDir}" - app_DestinationType = "2" - app_Key = "${config.programs.makemkv.appKeyFile}" - ''; - - home.file.".MakeMKV/settings.conf".source = config.lib.file.mkOutOfStoreSymlink config.sops.templates."MakeMKV.settings.conf".path; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - ".MakeMKV" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/mapillary-uploader.nix b/legacy-modules/home-manager-modules/programs/mapillary-uploader.nix deleted file mode 100644 index 0d9ad5f..0000000 --- a/legacy-modules/home-manager-modules/programs/mapillary-uploader.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.programs.mapillary-uploader; -in { - options.programs.mapillary-uploader = { - enable = mkEnableOption "Mapillary Desktop Uploader"; - }; - - config = mkIf cfg.enable (mkMerge [ - { - home.packages = [pkgs.mapillary-uploader]; - } - ( - mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/mapillary-uploader" - "${config.xdg.dataHome}/mapillary-uploader" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/matrix-cyberia-pwa.nix b/legacy-modules/home-manager-modules/programs/matrix-cyberia-pwa.nix deleted file mode 100644 index 644df92..0000000 --- a/legacy-modules/home-manager-modules/programs/matrix-cyberia-pwa.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - cfg = config.programs.matrix-cyberia-pwa; - isChromium = cfg.package == pkgs.chromium; - isBrowserImpermanenceSupported = cfg.package == pkgs.chromium; -in { - options.programs.matrix-cyberia-pwa = { - enable = lib.mkEnableOption "enable Matrix Cyberia PWA"; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.chromium; - description = "Browser package to use for the PWA"; - }; - impermanence = { - enable = lib.mkOption { - type = lib.types.bool; - default = isBrowserImpermanenceSupported; - description = "Enable impermanence configuration for the PWA. Only automatically enabled when using chromium."; - }; - }; - }; - - config = lib.mkIf cfg.enable (lib.mkMerge [ - { - warnings = - lib.optional (config.impermanence.enable && !isBrowserImpermanenceSupported) - "matrix-cyberia-pwa: Using unsupported package. You will need to manually configure pwa for ${cfg.package.pname}. Supported package(s) ${pkgs.chromium.pname}"; - } - ( - lib.mkIf isChromium { - xdg.desktopEntries.matrix-cyberia-pwa = { - name = "Matrix (Cyberia)"; - type = "Application"; - exec = "${cfg.package}/bin/${cfg.package.pname} --app=https://chat.cyberia.club/"; - icon = "matrix"; - terminal = false; - categories = ["Network" "InstantMessaging"]; - }; - } - ) - ( - lib.mkIf (config.impermanence.enable && cfg.impermanence.enable && isChromium) { - home.persistence."/persist${config.home.homeDirectory}" = { - directories = [ - "${config.xdg.configHome}/chromium" - ]; - allowOther = true; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/mfoc.nix b/legacy-modules/home-manager-modules/programs/mfoc.nix deleted file mode 100644 index 6006c9b..0000000 --- a/legacy-modules/home-manager-modules/programs/mfoc.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.mfoc = { - enable = lib.mkEnableOption "enable mfoc"; - }; - - config = lib.mkIf config.programs.mfoc.enable { - home.packages = with pkgs; [ - mfoc - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/noisetorch.nix b/legacy-modules/home-manager-modules/programs/noisetorch.nix deleted file mode 100644 index 4b42638..0000000 --- a/legacy-modules/home-manager-modules/programs/noisetorch.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.noisetorch = { - enable = lib.mkEnableOption "enable noisetorch"; - }; - - config = lib.mkIf config.programs.noisetorch.enable { - home.packages = with pkgs; [ - noisetorch - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/noita-entangled-worlds.nix b/legacy-modules/home-manager-modules/programs/noita-entangled-worlds.nix deleted file mode 100644 index 3f3af64..0000000 --- a/legacy-modules/home-manager-modules/programs/noita-entangled-worlds.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options = { - programs.noita-entangled-worlds = { - enable = lib.mkEnableOption "Noita Entangled Worlds multiplayer mod"; - }; - }; - - config = lib.mkIf config.programs.noita-entangled-worlds.enable { - home.packages = with pkgs; [ - noita_entangled_worlds - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/obs.nix b/legacy-modules/home-manager-modules/programs/obs.nix deleted file mode 100644 index 0a4caf7..0000000 --- a/legacy-modules/home-manager-modules/programs/obs.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - config, - ... -}: { - config = lib.mkIf config.programs.obs-studio.enable (lib.mkMerge [ - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/obs-studio" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/obsidian.nix b/legacy-modules/home-manager-modules/programs/obsidian.nix deleted file mode 100644 index 6676ecd..0000000 --- a/legacy-modules/home-manager-modules/programs/obsidian.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - config, - ... -}: { - config = lib.mkIf config.programs.obsidian.enable (lib.mkMerge [ - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/obsidian" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/olympus.nix b/legacy-modules/home-manager-modules/programs/olympus.nix deleted file mode 100644 index 2d5adb6..0000000 --- a/legacy-modules/home-manager-modules/programs/olympus.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.programs.olympus; -in { - options.programs.olympus = { - enable = lib.mkEnableOption "olympus"; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.olympus; - description = "The olympus package to install."; - }; - }; - - config = lib.mkIf cfg.enable (lib.mkMerge [ - { - home.packages = [ - cfg.package - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/olympus" - "${config.xdg.dataHome}/olympus" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/onionshare.nix b/legacy-modules/home-manager-modules/programs/onionshare.nix deleted file mode 100644 index 475f993..0000000 --- a/legacy-modules/home-manager-modules/programs/onionshare.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.onionshare = { - enable = lib.mkEnableOption "enable onionshare"; - }; - - config = lib.mkIf config.programs.onionshare.enable { - home.packages = with pkgs; [ - onionshare - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/openrgb.nix b/legacy-modules/home-manager-modules/programs/openrgb.nix deleted file mode 100644 index c350b1e..0000000 --- a/legacy-modules/home-manager-modules/programs/openrgb.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.openrgb = { - enable = lib.mkEnableOption "enable openrgb"; - }; - - config = lib.mkIf config.programs.openrgb.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - openrgb - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/OpenRGB" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/openvpn.nix b/legacy-modules/home-manager-modules/programs/openvpn.nix deleted file mode 100644 index dcd499c..0000000 --- a/legacy-modules/home-manager-modules/programs/openvpn.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.openvpn = { - enable = lib.mkEnableOption "enable openvpn"; - }; - - config = lib.mkIf config.programs.openvpn.enable { - home.packages = with pkgs; [ - openvpn - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/pdfarranger.nix b/legacy-modules/home-manager-modules/programs/pdfarranger.nix deleted file mode 100644 index 9246efd..0000000 --- a/legacy-modules/home-manager-modules/programs/pdfarranger.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.pdfarranger = { - enable = lib.mkEnableOption "enable pdfarranger"; - }; - - config = lib.mkIf config.programs.pdfarranger.enable { - home.packages = with pkgs; [ - pdfarranger - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/picard.nix b/legacy-modules/home-manager-modules/programs/picard.nix deleted file mode 100644 index ffc4289..0000000 --- a/legacy-modules/home-manager-modules/programs/picard.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.picard = { - enable = lib.mkEnableOption "enable picard"; - }; - - config = lib.mkIf config.programs.picard.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - picard - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/MusicBrainz" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/piper.nix b/legacy-modules/home-manager-modules/programs/piper.nix deleted file mode 100644 index 3ed25fd..0000000 --- a/legacy-modules/home-manager-modules/programs/piper.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.piper = { - enable = lib.mkEnableOption "enable piper"; - }; - - config = lib.mkIf config.programs.piper.enable { - home.packages = with pkgs; [ - piper - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/prostudiomasters.nix b/legacy-modules/home-manager-modules/programs/prostudiomasters.nix deleted file mode 100644 index d61b7e5..0000000 --- a/legacy-modules/home-manager-modules/programs/prostudiomasters.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.prostudiomasters = { - enable = lib.mkEnableOption "enable prostudiomasters"; - }; - - config = lib.mkIf config.programs.prostudiomasters.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - prostudiomasters - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/ProStudioMasters" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/proton-calendar-pwa.nix b/legacy-modules/home-manager-modules/programs/proton-calendar-pwa.nix deleted file mode 100644 index 33796e2..0000000 --- a/legacy-modules/home-manager-modules/programs/proton-calendar-pwa.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - cfg = config.programs.proton-calendar-pwa; - isChromium = cfg.package == pkgs.chromium; - isBrowserImpermanenceSupported = cfg.package == pkgs.chromium; -in { - options.programs.proton-calendar-pwa = { - enable = lib.mkEnableOption "enable Proton Calendar PWA"; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.chromium; - description = "Browser package to use for the PWA"; - }; - impermanence = { - enable = lib.mkOption { - type = lib.types.bool; - default = isBrowserImpermanenceSupported; - description = "Enable impermanence configuration for the PWA. Only automatically enabled when using chromium."; - }; - }; - }; - - config = lib.mkIf cfg.enable (lib.mkMerge [ - { - warnings = - lib.optional (config.impermanence.enable && !isBrowserImpermanenceSupported) - "proton-calendar-pwa: Using unsupported package. You will need to manually configure pwa for ${cfg.package.pname}. Supported package(s) ${pkgs.chromium.pname}"; - } - ( - lib.mkIf isChromium { - xdg.desktopEntries.proton-calendar-pwa = { - name = "Proton Calendar"; - type = "Application"; - exec = "${cfg.package}/bin/${cfg.package.pname} --app=https://calendar.proton.me"; - icon = "chrome-ojibjkjikcpjonjjngfkegflhmffeemk-Default"; - terminal = false; - }; - } - ) - ( - lib.mkIf (config.impermanence.enable && cfg.impermanence.enable && isChromium) { - home.persistence."/persist${config.home.homeDirectory}" = { - directories = [ - "${config.xdg.configHome}/chromium" - ]; - allowOther = true; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/proton-mail-pwa.nix b/legacy-modules/home-manager-modules/programs/proton-mail-pwa.nix deleted file mode 100644 index 3a3fe89..0000000 --- a/legacy-modules/home-manager-modules/programs/proton-mail-pwa.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - cfg = config.programs.proton-mail-pwa; - isChromium = cfg.package == pkgs.chromium; - isBrowserImpermanenceSupported = cfg.package == pkgs.chromium; -in { - options.programs.proton-mail-pwa = { - enable = lib.mkEnableOption "enable Proton Mail PWA"; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.chromium; - description = "Browser package to use for the PWA"; - }; - impermanence = { - enable = lib.mkOption { - type = lib.types.bool; - default = isBrowserImpermanenceSupported; - description = "Enable impermanence configuration for the PWA. Only automatically enabled when using chromium."; - }; - }; - }; - - config = lib.mkIf cfg.enable (lib.mkMerge [ - { - warnings = - lib.optional (config.impermanence.enable && !isBrowserImpermanenceSupported) - "proton-mail-pwa: Using unsupported package. You will need to manually configure pwa for ${cfg.package.pname}. Supported package(s) ${pkgs.chromium.pname}"; - } - ( - lib.mkIf isChromium { - xdg.desktopEntries.proton-mail-pwa = { - name = "Proton Mail"; - type = "Application"; - exec = "${cfg.package}/bin/${cfg.package.pname} --app=https://mail.proton.me"; - icon = "chrome-jnpecgipniidlgicjocehkhajgdnjekh-Default"; - terminal = false; - }; - } - ) - ( - lib.mkIf (config.impermanence.enable && cfg.impermanence.enable && isChromium) { - home.persistence."/persist${config.home.homeDirectory}" = { - directories = [ - "${config.xdg.configHome}/chromium" - ]; - allowOther = true; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/protonvpn.nix b/legacy-modules/home-manager-modules/programs/protonvpn.nix deleted file mode 100644 index 31f8910..0000000 --- a/legacy-modules/home-manager-modules/programs/protonvpn.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.protonvpn-gui = { - enable = lib.mkEnableOption "enable protonvpn"; - }; - - config = lib.mkIf config.programs.protonvpn-gui.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - proton-vpn - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/protonvpn" - "${config.xdg.configHome}/Proton" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/proxmark3.nix b/legacy-modules/home-manager-modules/programs/proxmark3.nix deleted file mode 100644 index 656be19..0000000 --- a/legacy-modules/home-manager-modules/programs/proxmark3.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.proxmark3 = { - enable = lib.mkEnableOption "enable proxmark3"; - }; - - config = lib.mkIf config.programs.proxmark3.enable { - home.packages = with pkgs; [ - proxmark3 - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/qbittorrent.nix b/legacy-modules/home-manager-modules/programs/qbittorrent.nix deleted file mode 100644 index b2e0f50..0000000 --- a/legacy-modules/home-manager-modules/programs/qbittorrent.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.qbittorrent = { - enable = lib.mkEnableOption "enable qbittorrent"; - }; - - config = lib.mkIf config.programs.qbittorrent.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - qbittorrent - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/qBittorrent" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/qflipper.nix b/legacy-modules/home-manager-modules/programs/qflipper.nix deleted file mode 100644 index bb141a4..0000000 --- a/legacy-modules/home-manager-modules/programs/qflipper.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.qflipper = { - enable = lib.mkEnableOption "enable qflipper"; - }; - - config = lib.mkIf config.programs.qflipper.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - qFlipper - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/qFlipper" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/signal.nix b/legacy-modules/home-manager-modules/programs/signal.nix deleted file mode 100644 index a50a49e..0000000 --- a/legacy-modules/home-manager-modules/programs/signal.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.signal-desktop = { - enable = lib.mkEnableOption "enable signal"; - }; - - config = lib.mkIf config.programs.signal-desktop.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - signal-desktop - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/Signal" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/steam.nix b/legacy-modules/home-manager-modules/programs/steam.nix deleted file mode 100644 index 4e0644e..0000000 --- a/legacy-modules/home-manager-modules/programs/steam.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.steam = { - enable = lib.mkEnableOption "enable steam"; - }; - - config = lib.mkIf config.programs.steam.enable ( - lib.mkMerge [ - { - home.packages = with pkgs; [ - steam - steam.run - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - { - directory = "${config.xdg.dataHome}/Steam"; - method = "symlink"; - } - ]; - }; - } - ) - ] - ); - - # TODO: bind impermanence config -} diff --git a/legacy-modules/home-manager-modules/programs/tor-browser.nix b/legacy-modules/home-manager-modules/programs/tor-browser.nix deleted file mode 100644 index c108805..0000000 --- a/legacy-modules/home-manager-modules/programs/tor-browser.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.tor-browser = { - enable = lib.mkEnableOption "enable tor-browser"; - }; - - config = lib.mkIf config.programs.tor-browser.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - tor-browser - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.dataHome}/torbrowser" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/ungoogled-chromium.nix b/legacy-modules/home-manager-modules/programs/ungoogled-chromium.nix deleted file mode 100644 index 32f4b40..0000000 --- a/legacy-modules/home-manager-modules/programs/ungoogled-chromium.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.ungoogled-chromium = { - enable = lib.mkEnableOption "enable ungoogled-chromium"; - }; - - config = lib.mkIf config.programs.ungoogled-chromium.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - ungoogled-chromium - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/chromium" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/via.nix b/legacy-modules/home-manager-modules/programs/via.nix deleted file mode 100644 index ad6f45a..0000000 --- a/legacy-modules/home-manager-modules/programs/via.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.via = { - enable = lib.mkEnableOption "enable via"; - }; - - config = lib.mkIf config.programs.via.enable (lib.mkMerge [ - { - home.packages = with pkgs; [ - via - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - "${config.xdg.configHome}/via" - "${config.xdg.dataHome}/via" - ]; - }; - } - ) - ]); -} diff --git a/legacy-modules/home-manager-modules/programs/vmware-workstation.nix b/legacy-modules/home-manager-modules/programs/vmware-workstation.nix deleted file mode 100644 index 76f260b..0000000 --- a/legacy-modules/home-manager-modules/programs/vmware-workstation.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.vmware-workstation = { - enable = lib.mkEnableOption "enable VMware Workstation"; - }; - - config = lib.mkIf config.programs.vmware-workstation.enable ( - lib.mkMerge [ - { - home.packages = with pkgs; [ - vmware-workstation - ]; - } - ( - lib.mkIf config.impermanence.enable { - home.persistence."${config.impermanence.persistencePath}" = { - directories = [ - { - directory = ".vmware"; - method = "symlink"; - } - { - directory = "vmware"; - method = "symlink"; - } - ]; - }; - } - ) - ] - ); -} diff --git a/legacy-modules/home-manager-modules/programs/vortex.nix b/legacy-modules/home-manager-modules/programs/vortex.nix deleted file mode 100644 index cb86526..0000000 --- a/legacy-modules/home-manager-modules/programs/vortex.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - ... -}: let - cfg = config.programs.vortex; -in { - options.programs.vortex = { - enable = lib.mkEnableOption "Vortex (Nexus Mods manager)"; - }; - - config = { - assertions = [ - { - assertion = !cfg.enable; - message = '' - Vortex module is not yet fully configured. - Please download and install Vortex manually from the Nexus Mods website, - then configure the Wine environment and dependencies as needed. - ''; - } - ]; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/aiCode.nix b/legacy-modules/home-manager-modules/programs/vscode/aiCode.nix deleted file mode 100644 index 838a439..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/aiCode.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - lib, - pkgs, - ... -}: let - pkgsRepository = pkgs.codium-extensions; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.aiCode = { - enable = lib.mkEnableOption "should the ai code extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "ai-code" {}; - ollamaHost = lib.mkOption { - type = lib.types.nullOr lib.types.str; - description = "what host should be used for ollama"; - default = null; - }; - inlineCompletion = { - enable = lib.mkOption { - type = lib.types.bool; - description = "should inline completion be enabled"; - default = true; - }; - model = lib.mkOption { - type = lib.types.nullOr lib.types.str; - description = "what model should be used for ollama"; - default = null; - }; - }; - }; - }; - config = lib.mkIf config.extraExtensions.aiCode.enable { - extensions = [ - config.extraExtensions.aiCode.extension - ]; - userSettings = { - "aiCode.ollamaHost" = lib.mkIf (config.extraExtensions.aiCode.ollamaHost != null) config.extraExtensions.aiCode.ollamaHost; - "aiCode.inlineCompletion.enable" = config.extraExtensions.aiCode.inlineCompletion.enable; - "aiCode.inlineCompletion.model" = lib.mkIf (config.extraExtensions.aiCode.inlineCompletion.model != null) config.extraExtensions.aiCode.inlineCompletion.model; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/alejandra.nix b/legacy-modules/home-manager-modules/programs/vscode/alejandra.nix deleted file mode 100644 index ffeaf96..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/alejandra.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.alejandra = { - enable = lib.mkEnableOption "Enable Alejandra extension for Nix formatting"; - extension = lib.mkPackageOption pkgsRepository "alejandra" { - default = ["kamadorueda" "alejandra"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.alejandra.enable { - extensions = [config.extraExtensions.alejandra.extension]; - userSettings = { - "[nix]" = { - "editor.defaultFormatter" = "kamadorueda.alejandra"; - "editor.formatOnPaste" = true; - "editor.formatOnSave" = true; - "editor.formatOnType" = true; - }; - "alejandra.program" = "alejandra"; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/astroVscode.nix b/legacy-modules/home-manager-modules/programs/vscode/astroVscode.nix deleted file mode 100644 index 4bae34a..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/astroVscode.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.astroVscode = { - enable = lib.mkEnableOption "should the astro-vscode extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "astro-vscode" { - default = ["astro-build" "astro-vscode"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.astroVscode.enable { - extensions = [ - config.extraExtensions.astroVscode.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/atomKeybindings.nix b/legacy-modules/home-manager-modules/programs/vscode/atomKeybindings.nix deleted file mode 100644 index 95cd928..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/atomKeybindings.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.atomKeybindings = { - enable = lib.mkEnableOption "should the atom keybindings extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "atom-keybindings" { - default = ["ms-vscode" "atom-keybindings"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.atomKeybindings.enable { - extensions = [ - config.extraExtensions.atomKeybindings.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/autoRenameTag.nix b/legacy-modules/home-manager-modules/programs/vscode/autoRenameTag.nix deleted file mode 100644 index 5f24a32..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/autoRenameTag.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.autoRenameTag = { - enable = lib.mkEnableOption "should the auto-rename-tag extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "auto-rename-tag" { - default = ["formulahendry" "auto-rename-tag"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.autoRenameTag.enable { - extensions = [ - config.extraExtensions.autoRenameTag.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/claudeDev.nix b/legacy-modules/home-manager-modules/programs/vscode/claudeDev.nix deleted file mode 100644 index c4d2dd7..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/claudeDev.nix +++ /dev/null @@ -1,237 +0,0 @@ -{ - lib, - pkgs, - config, - inputs, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; - - mcp-nixos = inputs.mcp-nixos.packages.${pkgs.stdenv.hostPlatform.system}.default; - - anyProfileHasInstallTool = lib.any ( - profile: - profile.extraExtensions.claudeDev.enable - && profile.extraExtensions.claudeDev.installTool - ) (lib.attrValues config.programs.vscode.profiles); - - getInstallToolPackage = lib.findFirst (package: package != null) pkgs.cline (map ( - profile: - if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.installTool - then profile.extraExtensions.claudeDev.package - else null - ) (lib.attrValues config.programs.vscode.profiles)); - - anyProfileHasMcpNixos = lib.any ( - profile: - profile.extraExtensions.claudeDev.enable - && profile.extraExtensions.claudeDev.mcp.nixos.enable - ) (lib.attrValues config.programs.vscode.profiles); - - anyProfileHasMcpEslint = lib.any ( - profile: - profile.extraExtensions.claudeDev.enable - && profile.extraExtensions.claudeDev.mcp.eslint.enable - ) (lib.attrValues config.programs.vscode.profiles); - - anyProfileHasMcpVitest = lib.any ( - profile: - profile.extraExtensions.claudeDev.enable - && profile.extraExtensions.claudeDev.mcp.vitest.enable - ) (lib.attrValues config.programs.vscode.profiles); - - anyProfileHasMcpSleep = lib.any ( - profile: - profile.extraExtensions.claudeDev.enable - && profile.extraExtensions.claudeDev.mcp.sleep.enable - ) (lib.attrValues config.programs.vscode.profiles); - - anyProfileHasMcp = anyProfileHasMcpNixos || anyProfileHasMcpEslint || anyProfileHasMcpVitest || anyProfileHasMcpSleep; - - getMcpTimeout = serverName: - lib.findFirst (timeout: timeout != null) null (map ( - profile: - if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable - then profile.extraExtensions.claudeDev.mcp.${serverName}.timeout - else null - ) (lib.attrValues config.programs.vscode.profiles)); - - getMcpAutoApprove = serverName: - lib.foldl' ( - acc: profile: - if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable - then acc // profile.extraExtensions.claudeDev.mcp.${serverName}.autoApprove - else acc - ) {} (lib.attrValues config.programs.vscode.profiles); - - getMcpPackage = serverName: - lib.findFirst (package: package != null) null (map ( - profile: - if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable - then profile.extraExtensions.claudeDev.mcp.${serverName}.package - else null - ) (lib.attrValues config.programs.vscode.profiles)); -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.claudeDev = { - enable = lib.mkEnableOption "should the claude-dev extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "claude-dev" { - default = ["saoudrizwan" "claude-dev"]; - }; - - installTool = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Whether to install the cline CLI tool for subagent support when the extension is enabled"; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.cline; - description = "The package to install for the cline CLI tool"; - }; - - mcp = { - nixos = { - enable = lib.mkEnableOption "enable NixOS MCP server for Claude Dev"; - autoApprove = { - nixos_search = lib.mkEnableOption "should the nixos_search tool be auto approved for the nixos MCP server"; - nixos_info = lib.mkEnableOption "should the nixos_info tool be auto approved for the nixos MCP server"; - home_manager_search = lib.mkEnableOption "should the home_manager_search tool be auto approved for the nixos MCP server"; - home_manager_info = lib.mkEnableOption "should the home_manager_info tool be auto approved for the nixos MCP server"; - darwin_search = lib.mkEnableOption "should the darwin_search tool be auto approved for the nixos MCP server"; - darwin_info = lib.mkEnableOption "should the darwin_info tool be auto approved for the nixos MCP server"; - nixos_flakes_search = lib.mkEnableOption "should the nixos_flakes_search tool be auto approved for the nixos MCP server"; - }; - }; - eslint = { - enable = lib.mkEnableOption "enable ESLint MCP server for Claude Dev"; - package = lib.mkOption { - type = lib.types.str; - default = "@eslint/mcp@latest"; - description = "NPM package to use for ESLint MCP server"; - }; - timeout = lib.mkOption { - type = lib.types.nullOr lib.types.int; - default = null; - description = "Timeout in seconds for ESLint MCP server operations"; - }; - autoApprove = { - lint-files = lib.mkEnableOption "Should the lint-files tool be auto approved for ESLint MCP server"; - }; - }; - vitest = { - enable = lib.mkEnableOption "enable Vitest MCP server for Claude Dev"; - package = lib.mkOption { - type = lib.types.str; - default = "@djankies/vitest-mcp"; - description = "NPM package to use for Vitest MCP server"; - }; - timeout = lib.mkOption { - type = lib.types.nullOr lib.types.int; - default = null; - description = "Timeout in seconds for Vitest MCP server operations"; - }; - autoApprove = { - list_tests = lib.mkEnableOption "Should the list_tests tool be auto approved for Vitest MCP server"; - run_tests = lib.mkEnableOption "Should the run_tests tool be auto approved for Vitest MCP server"; - analyze_coverage = lib.mkEnableOption "Should the analyze_coverage tool be auto approved for Vitest MCP server"; - set_project_root = lib.mkEnableOption "Should the set_project_root tool be auto approved for Vitest MCP server"; - }; - }; - sleep = { - enable = lib.mkEnableOption "enable Sleep MCP server for Claude Dev"; - package = lib.mkOption { - type = lib.types.str; - default = "sleep-mcp"; - description = "NPM package to use for Sleep MCP server"; - }; - timeout = lib.mkOption { - type = lib.types.nullOr lib.types.int; - default = null; - description = "Timeout in seconds for Sleep MCP server operations"; - }; - autoApprove = { - sleep = lib.mkEnableOption "Should the sleep tool be auto approved for Sleep MCP server"; - }; - }; - }; - }; - }; - config = lib.mkIf config.extraExtensions.claudeDev.enable { - extensions = [ - config.extraExtensions.claudeDev.extension - ]; - }; - })); - }; - - config = lib.mkMerge [ - (lib.mkIf anyProfileHasInstallTool { - home.packages = [ - getInstallToolPackage - ]; - }) - - (lib.mkIf anyProfileHasMcpNixos { - home.packages = [ - mcp-nixos - ]; - }) - - (lib.mkIf anyProfileHasMcp { - home.file."${config.xdg.configHome}/VSCodium/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json" = { - text = builtins.toJSON { - mcpServers = - (lib.optionalAttrs anyProfileHasMcpNixos { - nixos = { - command = "${mcp-nixos}/bin/mcp-nixos"; - }; - }) - // (lib.optionalAttrs anyProfileHasMcpEslint { - eslint = - { - command = "${pkgs.nodejs}/bin/npx"; - args = ["-y" (getMcpPackage "eslint")]; - } - // (lib.optionalAttrs ((getMcpTimeout "eslint") != null) { - timeout = getMcpTimeout "eslint"; - }) - // (lib.optionalAttrs ((getMcpAutoApprove "eslint") != {}) { - autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "eslint")); - }); - }) - // (lib.optionalAttrs anyProfileHasMcpVitest { - vitest = - { - command = "${pkgs.nodejs}/bin/npx"; - args = ["-y" (getMcpPackage "vitest")]; - } - // (lib.optionalAttrs ((getMcpTimeout "vitest") != null) { - timeout = getMcpTimeout "vitest"; - }) - // (lib.optionalAttrs ((getMcpAutoApprove "vitest") != {}) { - autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "vitest")); - }); - }) - // (lib.optionalAttrs anyProfileHasMcpSleep { - sleep-mcp = - { - command = "${pkgs.nodejs}/bin/npx"; - args = ["-y" (getMcpPackage "sleep")]; - } - // (lib.optionalAttrs ((getMcpTimeout "sleep") != null) { - timeout = getMcpTimeout "sleep"; - }) - // (lib.optionalAttrs ((getMcpAutoApprove "sleep") != {}) { - autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "sleep")); - }); - }); - }; - force = true; - }; - }) - ]; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/conventionalCommits.nix b/legacy-modules/home-manager-modules/programs/vscode/conventionalCommits.nix deleted file mode 100644 index b667c27..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/conventionalCommits.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.vscode-marketplace; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.conventionalCommits = { - enable = lib.mkEnableOption "Enable VSCode Conventional Commits extension"; - extension = lib.mkPackageOption pkgsRepository "conventional-commits" { - default = ["vivaxy" "vscode-conventional-commits"]; - }; - - gitmoji = lib.mkEnableOption "should emoji be prompted for as a part of the commit message./"; - - promptScopes = lib.mkEnableOption "prompting for scopes in conventional commits"; - - promptFooter = lib.mkEnableOption "prompting for footer in conventional commits"; - - showNewVersionNotes = lib.mkEnableOption "showing new version notes for conventional commits"; - }; - }; - config = lib.mkIf config.extraExtensions.conventionalCommits.enable { - extensions = [config.extraExtensions.conventionalCommits.extension]; - - userSettings = { - "conventionalCommits.gitmoji" = config.extraExtensions.conventionalCommits.gitmoji; - "conventionalCommits.promptScopes" = config.extraExtensions.conventionalCommits.promptScopes; - "conventionalCommits.promptFooter" = config.extraExtensions.conventionalCommits.promptFooter; - "conventionalCommits.showNewVersionNotes" = config.extraExtensions.conventionalCommits.showNewVersionNotes; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/default.nix b/legacy-modules/home-manager-modules/programs/vscode/default.nix deleted file mode 100644 index 6b7fbb9..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{...}: { - imports = [ - ./oneDark.nix - ./atomKeybindings.nix - ./aiCode.nix - ./alejandra.nix - ./nixIde.nix - ./autoRenameTag.nix - ./es7ReactJsSnippets.nix - ./liveServer.nix - ./tauriVscode.nix - ./vscodeEslint.nix - ./vscodeJest.nix - ./vscodeStandard.nix - ./vscodeStylelint.nix - ./go.nix - ./evenBetterToml.nix - ./openRemoteSsh.nix - ./platformIO.nix - ./rustAnalyzer.nix - ./astroVscode.nix - ./vscodeMdx.nix - ./claudeDev.nix - ./nearley.nix - ./vitest.nix - ./direnv.nix - ./conventionalCommits.nix - ./openDyslexicFont.nix - ./graphql.nix - ]; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/direnv.nix b/legacy-modules/home-manager-modules/programs/vscode/direnv.nix deleted file mode 100644 index 231ea17..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/direnv.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.vscode-marketplace; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.direnv = { - enable = lib.mkEnableOption "Enable direnv extension"; - extension = lib.mkPackageOption pkgsRepository "direnv" { - default = ["mkhl" "direnv"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.direnv.enable { - extensions = [config.extraExtensions.direnv.extension]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/es7ReactJsSnippets.nix b/legacy-modules/home-manager-modules/programs/vscode/es7ReactJsSnippets.nix deleted file mode 100644 index 09e6da3..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/es7ReactJsSnippets.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.es7ReactJsSnippets = { - enable = lib.mkEnableOption "should the es7-react-js-snippets extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "es7-react-js-snippets" { - default = ["dsznajder" "es7-react-js-snippets"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.es7ReactJsSnippets.enable { - extensions = [ - config.extraExtensions.es7ReactJsSnippets.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/evenBetterToml.nix b/legacy-modules/home-manager-modules/programs/vscode/evenBetterToml.nix deleted file mode 100644 index 9813ee1..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/evenBetterToml.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.evenBetterToml = { - enable = lib.mkEnableOption "should the even-better-toml extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "even-better-toml" { - default = ["tamasfe" "even-better-toml"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.evenBetterToml.enable { - extensions = [ - config.extraExtensions.evenBetterToml.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/go.nix b/legacy-modules/home-manager-modules/programs/vscode/go.nix deleted file mode 100644 index bd9b771..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/go.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.go = { - enable = lib.mkEnableOption "should the go extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "go" { - default = ["golang" "go"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.go.enable { - extensions = [ - config.extraExtensions.go.extension - ]; - userSettings = { - "go.alternateTools" = { - "gopls" = "gopls"; - }; - "go.toolsManagement.autoUpdate" = false; - "go.useLanguageServer" = true; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/graphql.nix b/legacy-modules/home-manager-modules/programs/vscode/graphql.nix deleted file mode 100644 index fde08f3..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/graphql.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.graphql = { - enable = lib.mkEnableOption "should the graphql highlighting extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vscode-graphql" { - default = ["graphql" "vscode-graphql-syntax"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.graphql.enable { - extensions = [ - config.extraExtensions.graphql.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/liveServer.nix b/legacy-modules/home-manager-modules/programs/vscode/liveServer.nix deleted file mode 100644 index 3f53ca3..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/liveServer.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.liveServer = { - enable = lib.mkEnableOption "should the live-server extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "live-server" { - default = ["ms-vscode" "live-server"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.liveServer.enable { - extensions = [ - config.extraExtensions.liveServer.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/nearley.nix b/legacy-modules/home-manager-modules/programs/vscode/nearley.nix deleted file mode 100644 index 3020a9e..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/nearley.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.vscode-marketplace; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.nearley = { - enable = lib.mkEnableOption "should the nearley extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "nearley" { - default = ["karyfoundation" "nearley"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.nearley.enable { - extensions = [ - config.extraExtensions.nearley.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/nixIde.nix b/legacy-modules/home-manager-modules/programs/vscode/nixIde.nix deleted file mode 100644 index bc79b69..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/nixIde.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.nixIde = { - enable = lib.mkEnableOption "Enable Nix IDE extension"; - extension = lib.mkPackageOption pkgsRepository "nix-ide" { - default = ["jnoortheen" "nix-ide"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.nixIde.enable { - extensions = [config.extraExtensions.nixIde.extension]; - userSettings = { - "nix.enableLanguageServer" = true; - "nix.serverPath" = "nil"; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/oneDark.nix b/legacy-modules/home-manager-modules/programs/vscode/oneDark.nix deleted file mode 100644 index 5ed43f4..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/oneDark.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.oneDark = { - enable = lib.mkEnableOption "should the one dark theme for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "onedark" { - default = ["akamud" "vscode-theme-onedark"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.oneDark.enable { - extensions = [ - config.extraExtensions.oneDark.extension - ]; - userSettings = { - "workbench.colorTheme" = "Atom One Dark"; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/openDyslexicFont.nix b/legacy-modules/home-manager-modules/programs/vscode/openDyslexicFont.nix deleted file mode 100644 index f1f6215..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/openDyslexicFont.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.openDyslexicFont = { - enable = lib.mkEnableOption "should OpenDyslexic font be set as the default font for VSCode"; - package = lib.mkPackageOption pkgs "nerd-fonts.open-dyslexic" { - default = ["nerd-fonts" "open-dyslexic"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.openDyslexicFont.enable { - userSettings = { - "editor.fontFamily" = "'OpenDyslexicM Nerd Font Mono', Droid Sans Mono, monospace"; - "editor.fontSize" = 14; - "editor.letterSpacing" = -0.3; - }; - }; - })); - }; - - config = let - enabledProfiles = - lib.filter (profile: profile.extraExtensions.openDyslexicFont.enable or false) - (lib.attrValues config.programs.vscode.profiles); - - anyProfileUsesOpenDyslexicFont = enabledProfiles != []; - - fontPackages = lib.unique (map (profile: profile.extraExtensions.openDyslexicFont.package) enabledProfiles); - in { - # Ensure OpenDyslexic font packages are installed when any VSCode profile uses them - home.packages = fontPackages; - - fonts.fontconfig.enable = lib.mkIf anyProfileUsesOpenDyslexicFont true; - - # Add assertion to ensure the fonts are available - assertions = - map (fontPkg: { - assertion = lib.elem fontPkg config.home.packages; - message = "OpenDyslexic font package '${fontPkg.name or "unknown"}' must be installed when using openDyslexicFont extension for VSCode."; - }) - fontPackages; - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/openRemoteSsh.nix b/legacy-modules/home-manager-modules/programs/vscode/openRemoteSsh.nix deleted file mode 100644 index c1b6daa..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/openRemoteSsh.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.openRemoteSsh = { - enable = lib.mkEnableOption "should the open-remote-ssh extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "open-remote-ssh" { - default = ["jeanp413" "open-remote-ssh"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.openRemoteSsh.enable { - extensions = [ - config.extraExtensions.openRemoteSsh.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/platformIO.nix b/legacy-modules/home-manager-modules/programs/vscode/platformIO.nix deleted file mode 100644 index ace83b7..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/platformIO.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.platformIO = { - enable = lib.mkEnableOption "should the platformIO extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "platformIO" { - default = ["pioarduino" "pioarduino-ide"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.platformIO.enable { - extensions = [ - config.extraExtensions.platformIO.extension - ]; - userSettings = { - "platformio-ide.useBuiltinPIOCore" = false; - }; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/rustAnalyzer.nix b/legacy-modules/home-manager-modules/programs/vscode/rustAnalyzer.nix deleted file mode 100644 index 66e9ebe..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/rustAnalyzer.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.rustAnalyzer = { - enable = lib.mkEnableOption "should the rust-analyzer extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "rust-analyzer" { - default = ["rust-lang" "rust-analyzer"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.rustAnalyzer.enable { - extensions = [ - config.extraExtensions.rustAnalyzer.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/tauriVscode.nix b/legacy-modules/home-manager-modules/programs/vscode/tauriVscode.nix deleted file mode 100644 index 9185fb3..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/tauriVscode.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.tauriVscode = { - enable = lib.mkEnableOption "should the tauri-vscode extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "tauri-vscode" { - default = ["tauri-apps" "tauri-vscode"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.tauriVscode.enable { - extensions = [ - config.extraExtensions.tauriVscode.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/vitest.nix b/legacy-modules/home-manager-modules/programs/vscode/vitest.nix deleted file mode 100644 index 446d25b..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/vitest.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.vitest = { - enable = lib.mkEnableOption "should the vitest extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vitest" { - default = ["vitest" "explorer"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.vitest.enable { - extensions = [ - config.extraExtensions.vitest.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/vscodeEslint.nix b/legacy-modules/home-manager-modules/programs/vscode/vscodeEslint.nix deleted file mode 100644 index 64d979f..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/vscodeEslint.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.vscodeEslint = { - enable = lib.mkEnableOption "should the vscode-eslint extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vscode-eslint" { - default = ["dbaeumer" "vscode-eslint"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.vscodeEslint.enable { - extensions = [ - config.extraExtensions.vscodeEslint.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/vscodeJest.nix b/legacy-modules/home-manager-modules/programs/vscode/vscodeJest.nix deleted file mode 100644 index 7c24f2a..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/vscodeJest.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.vscodeJest = { - enable = lib.mkEnableOption "should the vscode-jest extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vscode-jest" { - default = ["orta" "vscode-jest"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.vscodeJest.enable { - extensions = [ - config.extraExtensions.vscodeJest.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/vscodeMdx.nix b/legacy-modules/home-manager-modules/programs/vscode/vscodeMdx.nix deleted file mode 100644 index c49fe51..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/vscodeMdx.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.vscodeMdx = { - enable = lib.mkEnableOption "should the vscode-mdx extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vscode-mdx" { - default = ["unifiedjs" "vscode-mdx"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.vscodeMdx.enable { - extensions = [ - config.extraExtensions.vscodeMdx.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/vscodeStandard.nix b/legacy-modules/home-manager-modules/programs/vscode/vscodeStandard.nix deleted file mode 100644 index 31c8ad0..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/vscodeStandard.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.vscodeStandard = { - enable = lib.mkEnableOption "should the vscode-standard extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vscode-standard" { - default = ["standard" "vscode-standard"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.vscodeStandard.enable { - extensions = [ - config.extraExtensions.vscodeStandard.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/programs/vscode/vscodeStylelint.nix b/legacy-modules/home-manager-modules/programs/vscode/vscodeStylelint.nix deleted file mode 100644 index 0d43b29..0000000 --- a/legacy-modules/home-manager-modules/programs/vscode/vscodeStylelint.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: let - pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; - pkgsRepository = pkgsRepositories.open-vsx; -in { - options.programs.vscode.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { - options = { - extraExtensions.vscodeStylelint = { - enable = lib.mkEnableOption "should the vscode-stylelint extension for vscode be enabled"; - extension = lib.mkPackageOption pkgsRepository "vscode-stylelint" { - default = ["stylelint" "vscode-stylelint"]; - }; - }; - }; - config = lib.mkIf config.extraExtensions.vscodeStylelint.enable { - extensions = [ - config.extraExtensions.vscodeStylelint.extension - ]; - }; - })); - }; -} diff --git a/legacy-modules/home-manager-modules/sops.nix b/legacy-modules/home-manager-modules/sops.nix deleted file mode 100644 index 910fbb6..0000000 --- a/legacy-modules/home-manager-modules/sops.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - config = { - sops = { - age.keyFile = "/var/lib/sops-nix/key.txt"; - }; - }; -} diff --git a/legacy-modules/home-manager-modules/user.nix b/legacy-modules/home-manager-modules/user.nix deleted file mode 100644 index efce22d..0000000 --- a/legacy-modules/home-manager-modules/user.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - config, - osConfig, - ... -}: { - options.user = { - isDesktopUser = lib.mkOption { - type = lib.types.bool; - default = osConfig.host.users.${config.home.username}.isDesktopUser; - }; - isTerminalUser = lib.mkOption { - type = lib.types.bool; - default = osConfig.host.users.${config.home.username}.isTerminalUser; - }; - }; -} diff --git a/legacy-modules/system-modules/default.nix b/legacy-modules/system-modules/default.nix deleted file mode 100644 index 637b6b5..0000000 --- a/legacy-modules/system-modules/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -# this folder container modules that are for nixos and darwin -{...}: { - imports = [ - ./home-manager - ./system.nix - ./nix-development.nix - ./users.nix - ]; -} diff --git a/legacy-modules/system-modules/home-manager/default.nix b/legacy-modules/system-modules/home-manager/default.nix deleted file mode 100644 index 3745b8f..0000000 --- a/legacy-modules/system-modules/home-manager/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -# modules in this folder are to adapt home-manager modules configs to system-module configs -{...}: {} diff --git a/legacy-modules/system-modules/nix-development.nix b/legacy-modules/system-modules/nix-development.nix deleted file mode 100644 index 6eeddc4..0000000 --- a/legacy-modules/system-modules/nix-development.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - lib, - pkgs, - config, - inputs, - ... -}: { - options.host.nix-development.enable = lib.mkEnableOption "should desktop configuration be enabled"; - - config = lib.mkMerge [ - { - host.nix-development.enable = lib.mkDefault true; - } - (lib.mkIf config.host.nix-development.enable { - nix = { - nixPath = ["nixpkgs=${inputs.nixpkgs}"]; - }; - environment.systemPackages = with pkgs; [ - # nix language server - nil - # nix formatter - alejandra - ]; - }) - ]; -} diff --git a/legacy-modules/system-modules/system.nix b/legacy-modules/system-modules/system.nix deleted file mode 100644 index f464835..0000000 --- a/legacy-modules/system-modules/system.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - nix = { - settings = { - experimental-features = ["nix-command" "flakes"]; - }; - }; -} diff --git a/legacy-modules/system-modules/users.nix b/legacy-modules/system-modules/users.nix deleted file mode 100644 index cd9c900..0000000 --- a/legacy-modules/system-modules/users.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ - lib, - config, - ... -}: let - host = config.host; - - hostUsers = host.hostUsers; - principleUsers = host.principleUsers; -in { - options.host = { - users = lib.mkOption { - default = {}; - type = lib.types.attrsOf (lib.types.submodule ({ - config, - name, - ... - }: { - options = { - name = lib.mkOption { - type = lib.types.str; - default = name; - description = '' - What should this users name on the system be - ''; - defaultText = lib.literalExpression "config.host.users.\${name}.name"; - }; - isPrincipleUser = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - User should be configured as root and have ssh access - ''; - defaultText = lib.literalExpression "config.host.users.\${name}.isPrincipleUser"; - }; - isDesktopUser = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - User should install their desktop applications - ''; - defaultText = lib.literalExpression "config.host.users.\${name}.isDesktopUser"; - }; - isTerminalUser = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - User should install their terminal applications - ''; - defaultText = lib.literalExpression "config.host.users.\${name}.isTerminalUser"; - }; - isNormalUser = lib.mkOption { - type = lib.types.bool; - default = config.isDesktopUser || config.isTerminalUser; - description = '' - User should install their applications and can log in - ''; - defaultText = lib.literalExpression "config.host.users.\${name}.isNormalUser"; - }; - }; - })); - }; - hostUsers = lib.mkOption { - default = lib.attrsets.mapAttrsToList (_: user: user) host.users; - }; - principleUsers = lib.mkOption { - default = lib.lists.filter (user: user.isPrincipleUser) hostUsers; - }; - normalUsers = lib.mkOption { - default = lib.lists.filter (user: user.isNormalUser) hostUsers; - }; - desktopUsers = lib.mkOption { - default = lib.lists.filter (user: user.isDesktopUser) hostUsers; - }; - terminalUsers = lib.mkOption { - default = lib.lists.filter (user: user.isTerminalUser) hostUsers; - }; - }; - - config = { - host.users = { - leyla = { - isPrincipleUser = lib.mkDefault false; - isDesktopUser = lib.mkDefault false; - isTerminalUser = lib.mkDefault false; - }; - eve = { - isPrincipleUser = lib.mkDefault false; - isDesktopUser = lib.mkDefault false; - isTerminalUser = lib.mkDefault false; - }; - }; - - assertions = - ( - builtins.map (user: { - assertion = !(user.isPrincipleUser && !user.isNormalUser); - message = '' - Non normal user ${user.name} can not be a principle user. - ''; - }) - hostUsers - ) - ++ [ - { - assertion = (builtins.length principleUsers) > 0; - message = '' - At least one user must be a principle user. - ''; - } - ]; - }; -} diff --git a/modules/darwin/default.nix b/modules/darwin/default.nix new file mode 100644 index 0000000..132200d --- /dev/null +++ b/modules/darwin/default.nix @@ -0,0 +1,10 @@ +{config, ...}: let + mod = config.flake.darwinModules; +in { + flake.darwinModules.darwin-modules-all = { + imports = [ + mod.darwin-system + mod.darwin-users + ]; + }; +} diff --git a/modules/darwin/system.nix b/modules/darwin/system.nix new file mode 100644 index 0000000..eca9a84 --- /dev/null +++ b/modules/darwin/system.nix @@ -0,0 +1,29 @@ +{...}: { + flake.darwinModules.darwin-system = {self, ...}: { + system.configurationRevision = self.rev or self.dirtyRev or null; + + nix = { + gc = { + automatic = true; + interval = [ + { + Hour = 4; + Minute = 15; + Weekday = 7; + } + ]; + options = "--delete-older-than 7d"; + }; + optimise = { + automatic = true; + interval = [ + { + Hour = 4; + Minute = 15; + Weekday = 7; + } + ]; + }; + }; + }; +} diff --git a/modules/darwin/users.nix b/modules/darwin/users.nix new file mode 100644 index 0000000..3cd4de3 --- /dev/null +++ b/modules/darwin/users.nix @@ -0,0 +1,18 @@ +{...}: { + flake.darwinModules.darwin-users = { + lib, + config, + ... + }: let + host = config.host; + in { + users = { + users = { + leyla = { + name = lib.mkForce host.users.leyla.name; + home = lib.mkForce "/home/${host.users.leyla.name}"; + }; + }; + }; + }; +} diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix new file mode 100644 index 0000000..2f62982 --- /dev/null +++ b/modules/home-manager/default.nix @@ -0,0 +1,16 @@ +{config, ...}: let + mod = config.flake.homeModules; +in { + flake.homeModules.home-manager-modules-all = { + imports = [ + mod.home-manager-sops + mod.home-manager-user + mod.home-manager-flipperzero + mod.home-manager-i18n + mod.home-manager-impermanence + mod.home-manager-openssh + mod.home-manager-gnome + mod.home-manager-programs + ]; + }; +} diff --git a/modules/home-manager/flipperzero.nix b/modules/home-manager/flipperzero.nix new file mode 100644 index 0000000..a671df3 --- /dev/null +++ b/modules/home-manager/flipperzero.nix @@ -0,0 +1,5 @@ +{...}: { + flake.homeModules.home-manager-flipperzero = {lib, ...}: { + options.hardware.flipperzero.enable = lib.mkEnableOption "enable flipperzero hardware"; + }; +} diff --git a/modules/home-manager/gnome.nix b/modules/home-manager/gnome.nix new file mode 100644 index 0000000..242cd15 --- /dev/null +++ b/modules/home-manager/gnome.nix @@ -0,0 +1,205 @@ +{...}: { + flake.homeModules.home-manager-gnome = { + lib, + config, + pkgs, + ... + }: let + enabledExtensions = + [] + ++ lib.optional config.gnome.extensions.dash-to-dock.enable pkgs.gnomeExtensions.dash-to-dock + ++ lib.optional config.gnome.extensions.dash-to-panel.enable pkgs.gnomeExtensions.dash-to-panel; + + extensions = config.gnome.extraExtensions ++ enabledExtensions; + in { + options.gnome = { + extraWindowControls = lib.mkEnableOption "Should we add back in the minimize and maximize window controls?"; + clockFormat = lib.mkOption { + type = lib.types.enum [ + "12h" + "24h" + ]; + default = "24h"; + }; + colorScheme = lib.mkOption { + type = lib.types.enum [ + "default" + "prefer-dark" + "prefer-light" + ]; + default = "default"; + }; + accentColor = lib.mkOption { + type = lib.types.enum [ + "blue" + "teal" + "green" + "yellow" + "orange" + "red" + "pink" + "purple" + "slate" + ]; + default = "blue"; + }; + extraExtensions = lib.mkOption { + type = lib.types.listOf lib.types.package; + default = []; + description = "The set of extensions to install and enable in the user environment."; + }; + hotkeys = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { + options = { + key = lib.mkOption { + type = lib.types.strMatching "[a-zA-Z0-9-]+"; + default = builtins.replaceStrings [" " "/" "_"] ["-" "-" "-"] name; + }; + name = lib.mkOption { + type = lib.types.str; + default = name; + }; + binding = lib.mkOption { + type = lib.types.str; + }; + command = lib.mkOption { + type = lib.types.str; + }; + }; + })); + default = {}; + }; + displayScaling = lib.mkOption { + type = lib.types.nullOr (lib.types.enum [100 125 150 175 200]); + default = null; + description = "Display scaling percentage for GNOME"; + }; + experimentalFeatures = lib.mkOption { + type = lib.types.submodule { + options = { + scaleMonitorFramebuffer = lib.mkEnableOption "scale-monitor-framebuffer experimental feature"; + }; + }; + default = {}; + description = "GNOME experimental features to enable"; + }; + + nightLight = lib.mkOption { + type = lib.types.submodule { + options = { + enable = lib.mkEnableOption "night light (blue light filter)"; + automatic = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Whether to automatically schedule night light based on sunset/sunrise"; + }; + fromTime = lib.mkOption { + type = lib.types.float; + default = 20.0; + description = "Start time for night light in 24-hour format (e.g., 20.0 for 8:00 PM)"; + }; + toTime = lib.mkOption { + type = lib.types.float; + default = 6.0; + description = "End time for night light in 24-hour format (e.g., 6.0 for 6:00 AM)"; + }; + temperature = lib.mkOption { + type = lib.types.int; + default = 4000; + description = "Color temperature for night light (1000-10000K, lower is warmer)"; + }; + }; + }; + default = {}; + description = "Night light configuration"; + }; + + extensions = { + dash-to-dock = { + enable = lib.mkEnableOption "Dash to Dock extension"; + options = lib.mkOption { + type = lib.types.nullOr lib.types.attrs; + default = null; + description = "Dash to Dock configuration options. If null, no custom configuration will be applied."; + }; + }; + + dash-to-panel = { + enable = lib.mkEnableOption "Dash to Panel extension"; + options = lib.mkOption { + type = lib.types.nullOr lib.types.attrs; + default = null; + description = "Dash to Panel configuration options. If null, no custom configuration will be applied."; + }; + }; + }; + }; + + config = { + home.packages = extensions; + dconf = { + settings = lib.mkMerge [ + { + "org/gnome/shell" = { + disable-user-extensions = false; # enables user extensions + enabled-extensions = builtins.map (extension: extension.extensionUuid) extensions; + }; + + "org/gnome/desktop/wm/preferences".button-layout = lib.mkIf config.gnome.extraWindowControls ":minimize,maximize,close"; + + "org/gnome/desktop/interface".color-scheme = config.gnome.colorScheme; + "org/gnome/desktop/interface".accent-color = config.gnome.accentColor; + "org/gnome/desktop/interface".clock-format = config.gnome.clockFormat; + "org/gnome/desktop/interface".text-scaling-factor = lib.mkIf (config.gnome.displayScaling != null) (config.gnome.displayScaling / 100.0); + + "org/gnome/mutter".experimental-features = lib.mkIf (builtins.any (x: x) (builtins.attrValues config.gnome.experimentalFeatures)) ( + lib.optional config.gnome.experimentalFeatures.scaleMonitorFramebuffer "scale-monitor-framebuffer" + ); + } + + # Night light configuration + (lib.mkIf config.gnome.nightLight.enable { + "org/gnome/settings-daemon/plugins/color" = { + night-light-enabled = true; + night-light-schedule-automatic = config.gnome.nightLight.automatic; + night-light-schedule-from = lib.mkIf (!config.gnome.nightLight.automatic) config.gnome.nightLight.fromTime; + night-light-schedule-to = lib.mkIf (!config.gnome.nightLight.automatic) config.gnome.nightLight.toTime; + night-light-temperature = config.gnome.nightLight.temperature; + }; + }) + ( + lib.mkMerge ( + builtins.map (value: let + entry = "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/${value.key}"; + in { + ${entry} = { + binding = value.binding; + command = value.command; + name = value.name; + }; + + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = [ + "/${entry}/" + ]; + }; + }) + ( + lib.attrsets.mapAttrsToList (_: value: value) config.gnome.hotkeys + ) + ) + ) + + # Extension configurations + (lib.mkIf (config.gnome.extensions.dash-to-dock.enable && config.gnome.extensions.dash-to-dock.options != null) { + "org/gnome/shell/extensions/dash-to-dock" = config.gnome.extensions.dash-to-dock.options; + }) + + (lib.mkIf (config.gnome.extensions.dash-to-panel.enable && config.gnome.extensions.dash-to-panel.options != null) { + "org/gnome/shell/extensions/dash-to-panel" = config.gnome.extensions.dash-to-panel.options; + }) + ]; + }; + }; + }; +} diff --git a/modules/home-manager/i18n.nix b/modules/home-manager/i18n.nix new file mode 100644 index 0000000..a488d7c --- /dev/null +++ b/modules/home-manager/i18n.nix @@ -0,0 +1,44 @@ +{...}: { + flake.homeModules.home-manager-i18n = { + lib, + config, + ... + }: { + options = { + i18n = { + defaultLocale = lib.mkOption { + type = lib.types.str; + default = "en_US.UTF-8"; + example = "nl_NL.UTF-8"; + description = '' + The default locale. It determines the language for program + messages, the format for dates and times, sort order, and so on. + It also determines the character set, such as UTF-8. + ''; + }; + + extraLocaleSettings = lib.mkOption { + type = lib.types.attrsOf lib.types.str; + default = {}; + example = { + LC_MESSAGES = "en_US.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + description = '' + A set of additional system-wide locale settings other than + `LANG` which can be configured with + {option}`i18n.defaultLocale`. + ''; + }; + }; + }; + + config = { + home.sessionVariables = + { + LANG = config.i18n.defaultLocale; + } + // config.i18n.extraLocaleSettings; + }; + }; +} diff --git a/modules/home-manager/impermanence.nix b/modules/home-manager/impermanence.nix new file mode 100644 index 0000000..a8971c8 --- /dev/null +++ b/modules/home-manager/impermanence.nix @@ -0,0 +1,45 @@ +{...}: { + flake.homeModules.home-manager-impermanence = { + config, + lib, + osConfig, + ... + }: let + cfg = config.impermanence; + in { + options.impermanence = { + enable = lib.mkEnableOption "impermanence for home directory"; + fallbackPersistence.enable = lib.mkOption { + type = lib.types.bool; + default = true; + }; + persistencePath = lib.mkOption { + type = lib.types.str; + default = + if osConfig.storage.generateBase + then "/persist/replicate/home" + else "/persist"; + description = "The base path for user home persistence. The impermanence module will automatically append the user's home directory path. Automatically adapts based on whether the system uses the new dataset layout or the legacy one."; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf config.impermanence.enable { + assertions = [ + { + assertion = osConfig.storage.impermanence.enable; + message = "impermanence can not be enabled for a user when it is not enabled for the system"; + } + ]; + }) + # If impermanence is not enabled for this user but system impermanence is enabled, + # persist the entire home directory as fallback + (lib.mkIf (osConfig.storage.impermanence.enable && !cfg.enable && cfg.fallbackPersistence.enable) { + home.persistence."${cfg.persistencePath}" = { + directories = ["."]; + allowOther = true; + }; + }) + ]; + }; +} diff --git a/modules/home-manager/openssh.nix b/modules/home-manager/openssh.nix new file mode 100644 index 0000000..662c5ee --- /dev/null +++ b/modules/home-manager/openssh.nix @@ -0,0 +1,109 @@ +{...}: { + flake.homeModules.home-manager-openssh = { + pkgs, + config, + osConfig, + lib, + ... + }: { + options.programs.openssh = { + enable = lib.mkEnableOption "should we enable openssh"; + authorizedKeys = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + }; + hostKeys = lib.mkOption { + type = lib.types.listOf lib.types.attrs; + default = []; + example = [ + { + type = "rsa"; + bits = 4096; + path = "${config.home.username}_${osConfig.networking.hostName}_rsa"; + rounds = 100; + openSSHFormat = true; + } + { + type = "ed25519"; + path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; + rounds = 100; + comment = "key comment"; + } + ]; + description = '' + NixOS can automatically generate SSH host keys. This option + specifies the path, type and size of each key. See + {manpage}`ssh-keygen(1)` for supported types + and sizes. Paths are relative to home directory + ''; + }; + }; + + config = lib.mkIf config.programs.openssh.enable ( + lib.mkMerge [ + ( + lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) { + services.ssh-agent.enable = true; + programs.ssh = { + enable = true; + enableDefaultConfig = false; + matchBlocks = { + "*" = { + compression = true; + addKeysToAgent = "confirm"; + }; + }; + # extraConfig = lib.strings.concatLines ( + # builtins.map (hostKey: "IdentityFile ~/.ssh/${hostKey.path}") config.programs.openssh.hostKeys + # ); + }; + + systemd.user.services = builtins.listToAttrs ( + builtins.map (hostKey: + lib.attrsets.nameValuePair "ssh-gen-keys-${hostKey.path}" { + Install = { + WantedBy = ["default.target"]; + }; + Service = let + path = "${config.home.homeDirectory}/.ssh/${hostKey.path}"; + in { + Restart = "always"; + Type = "simple"; + ExecStart = "${ + pkgs.writeShellScript "ssh-gen-keys" '' + if ! [ -s "${path}" ]; then + if ! [ -h "${path}" ]; then + rm -f "${path}" + fi + mkdir -p "$(dirname '${path}')" + chmod 0755 "$(dirname '${path}')" + ${pkgs.openssh}/bin/ssh-keygen \ + -t "${hostKey.type}" \ + ${lib.optionalString (hostKey ? bits) "-b ${toString hostKey.bits}"} \ + ${lib.optionalString (hostKey ? rounds) "-a ${toString hostKey.rounds}"} \ + ${lib.optionalString (hostKey ? comment) "-C '${hostKey.comment}'"} \ + ${lib.optionalString (hostKey ? openSSHFormat && hostKey.openSSHFormat) "-o"} \ + -f "${path}" \ + -N "" + chown ${config.home.username} ${path}* + chgrp ${config.home.username} ${path}* + fi + '' + }"; + }; + }) + config.programs.openssh.hostKeys + ); + } + ) + (lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + files = lib.lists.flatten ( + builtins.map (hostKey: [".ssh/${hostKey.path}" ".ssh/${hostKey.path}.pub"]) config.programs.openssh.hostKeys + ); + }; + }) + ] + ); + }; +} diff --git a/modules/home-manager/programs/android-studio.nix b/modules/home-manager/programs/android-studio.nix new file mode 100644 index 0000000..e953c40 --- /dev/null +++ b/modules/home-manager/programs/android-studio.nix @@ -0,0 +1,32 @@ +{...}: { + flake.homeModules.home-manager-android-studio = { + lib, + pkgs, + config, + ... + }: { + options.programs.android-studio = { + enable = lib.mkEnableOption "enable android-studio"; + }; + + config = lib.mkIf config.programs.android-studio.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + android-studio + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/Google/AndroidStudio" + ".android" + ".gradle" + "${config.xdg.cacheHome}/Google/AndroidStudio" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/anki.nix b/modules/home-manager/programs/anki.nix new file mode 100644 index 0000000..222ae85 --- /dev/null +++ b/modules/home-manager/programs/anki.nix @@ -0,0 +1,15 @@ +{...}: { + flake.homeModules.home-manager-anki = { + lib, + config, + ... + }: { + config = lib.mkIf (config.programs.anki.enable && config.impermanence.enable) { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + ".local/share/Anki2" + ]; + }; + }; + }; +} diff --git a/modules/home-manager/programs/bitwarden.nix b/modules/home-manager/programs/bitwarden.nix new file mode 100644 index 0000000..594520a --- /dev/null +++ b/modules/home-manager/programs/bitwarden.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-bitwarden = { + lib, + pkgs, + config, + ... + }: { + options.programs.bitwarden = { + enable = lib.mkEnableOption "enable bitwarden"; + }; + + config = lib.mkIf config.programs.bitwarden.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + bitwarden-desktop + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/Bitwarden" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/bruno.nix b/modules/home-manager/programs/bruno.nix new file mode 100644 index 0000000..58aeadf --- /dev/null +++ b/modules/home-manager/programs/bruno.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-bruno = { + lib, + pkgs, + config, + ... + }: { + options.programs.bruno = { + enable = lib.mkEnableOption "enable bruno"; + }; + + config = lib.mkIf config.programs.bruno.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + bruno + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/bruno/" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/calibre.nix b/modules/home-manager/programs/calibre.nix new file mode 100644 index 0000000..a7b289c --- /dev/null +++ b/modules/home-manager/programs/calibre.nix @@ -0,0 +1,25 @@ +{...}: { + flake.homeModules.home-manager-calibre = { + lib, + pkgs, + config, + ... + }: { + config = lib.mkIf config.programs.calibre.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + calibre + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/calibre" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/davinci-resolve.nix b/modules/home-manager/programs/davinci-resolve.nix new file mode 100644 index 0000000..cb29a81 --- /dev/null +++ b/modules/home-manager/programs/davinci-resolve.nix @@ -0,0 +1,30 @@ +{...}: { + flake.homeModules.home-manager-davinci-resolve = { + lib, + pkgs, + config, + ... + }: { + options.programs.davinci-resolve = { + enable = lib.mkEnableOption "enable davinci-resolve"; + }; + + config = lib.mkIf config.programs.davinci-resolve.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + davinci-resolve + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.dataHome}/DaVinciResolve" + "${config.xdg.configHome}/blackmagic" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/dbeaver.nix b/modules/home-manager/programs/dbeaver.nix new file mode 100644 index 0000000..c567571 --- /dev/null +++ b/modules/home-manager/programs/dbeaver.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-dbeaver = { + lib, + pkgs, + config, + ... + }: { + options.programs.dbeaver-bin = { + enable = lib.mkEnableOption "enable dbeaver"; + }; + + config = lib.mkIf config.programs.dbeaver-bin.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + dbeaver-bin + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.dataHome}/DBeaverData/" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/default.nix b/modules/home-manager/programs/default.nix new file mode 100644 index 0000000..bac9b50 --- /dev/null +++ b/modules/home-manager/programs/default.nix @@ -0,0 +1,59 @@ +{config, ...}: let + mod = config.flake.homeModules; +in { + flake.homeModules.home-manager-programs = { + imports = [ + mod.home-manager-android-studio + mod.home-manager-anki + mod.home-manager-bitwarden + mod.home-manager-bruno + mod.home-manager-calibre + mod.home-manager-davinci-resolve + mod.home-manager-dbeaver + mod.home-manager-discord + mod.home-manager-dungeon-draft + mod.home-manager-e621-downloader + mod.home-manager-firefox + mod.home-manager-freecad + mod.home-manager-gdx-liftoff + mod.home-manager-gimp + mod.home-manager-guild-wars-2 + mod.home-manager-idea + mod.home-manager-inkscape + mod.home-manager-kdenlive + mod.home-manager-kicad + mod.home-manager-krita + mod.home-manager-libreoffice + mod.home-manager-makemkv + mod.home-manager-mapillary-uploader + mod.home-manager-matrix-cyberia-pwa + mod.home-manager-mfoc + mod.home-manager-noisetorch + mod.home-manager-noita-entangled-worlds + mod.home-manager-obs + mod.home-manager-obsidian + mod.home-manager-olympus + mod.home-manager-onionshare + mod.home-manager-openrgb + mod.home-manager-openvpn + mod.home-manager-pdfarranger + mod.home-manager-picard + mod.home-manager-piper + mod.home-manager-prostudiomasters + mod.home-manager-proton-calendar-pwa + mod.home-manager-proton-mail-pwa + mod.home-manager-protonvpn + mod.home-manager-proxmark3 + mod.home-manager-qbittorrent + mod.home-manager-qflipper + mod.home-manager-signal + mod.home-manager-steam + mod.home-manager-tor-browser + mod.home-manager-ungoogled-chromium + mod.home-manager-via + mod.home-manager-vmware-workstation + mod.home-manager-vortex + mod.home-manager-vscode + ]; + }; +} diff --git a/modules/home-manager/programs/discord.nix b/modules/home-manager/programs/discord.nix new file mode 100644 index 0000000..60fbd5b --- /dev/null +++ b/modules/home-manager/programs/discord.nix @@ -0,0 +1,19 @@ +{...}: { + flake.homeModules.home-manager-discord = { + lib, + config, + ... + }: { + config = lib.mkIf config.programs.discord.enable (lib.mkMerge [ + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/discord/" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/dungeon-draft.nix b/modules/home-manager/programs/dungeon-draft.nix new file mode 100644 index 0000000..79738cd --- /dev/null +++ b/modules/home-manager/programs/dungeon-draft.nix @@ -0,0 +1,26 @@ +{...}: { + flake.homeModules.home-manager-dungeon-draft = { + config, + lib, + ... + }: let + cfg = config.programs.dungeon-draft; + in { + options.programs.dungeon-draft = { + enable = lib.mkEnableOption "Dungeon Draft"; + }; + + config = { + assertions = [ + { + assertion = !cfg.enable; + message = '' + Dungeon Draft module is not yet fully configured. + Please download the Dungeon Draft executable (.exe) from the official website, + then configure the Wine environment and executable path as needed. + ''; + } + ]; + }; + }; +} diff --git a/modules/home-manager/programs/e621-downloader.nix b/modules/home-manager/programs/e621-downloader.nix new file mode 100644 index 0000000..37979f4 --- /dev/null +++ b/modules/home-manager/programs/e621-downloader.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-e621-downloader = { + lib, + pkgs, + config, + ... + }: { + options.programs.e621-downloader = { + enable = lib.mkEnableOption "enable e621-downloader"; + }; + + config = lib.mkIf config.programs.e621-downloader.enable { + home.packages = with pkgs; [ + e621-downloader + ]; + }; + }; +} diff --git a/modules/home-manager/programs/firefox.nix b/modules/home-manager/programs/firefox.nix new file mode 100644 index 0000000..a31be65 --- /dev/null +++ b/modules/home-manager/programs/firefox.nix @@ -0,0 +1,43 @@ +{...}: { + flake.homeModules.home-manager-firefox = { + lib, + config, + ... + }: let + buildProfilePersistence = profile: { + directories = [ + ".mozilla/firefox/${profile}/extensions" + ]; + files = [ + ".mozilla/firefox/${profile}/cookies.sqlite" + ".mozilla/firefox/${profile}/favicons.sqlite" + # Permissions and ${profileName} levels for each site + ".mozilla/firefox/${profile}/permissions.sqlite" + ".mozilla/firefox/${profile}/content-prefs.sqlite" + # Browser history and bookmarks + ".mozilla/firefox/${profile}/places.sqlite" + # I guess this is useful? + # https://bugzilla.mozilla.org/show_bug.cgi?id=1511384 + # https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria + ".mozilla/firefox/${profile}/storage.sqlite" + # Extension configuration + ".mozilla/firefox/${profile}/extension-settings.json" + ]; + }; + in { + config = lib.mkIf (config.programs.firefox.enable && config.impermanence.enable) { + home.persistence."${config.impermanence.persistencePath}" = lib.mkMerge ( + ( + lib.attrsets.mapAttrsToList + (profile: _: buildProfilePersistence profile) + config.programs.firefox.profiles + ) + ++ ( + lib.lists.optional + ((builtins.length (lib.attrsets.mapAttrsToList (key: value: value) config.programs.firefox.profiles)) == 0) + (buildProfilePersistence "default") + ) + ); + }; + }; +} diff --git a/modules/home-manager/programs/freecad.nix b/modules/home-manager/programs/freecad.nix new file mode 100644 index 0000000..6e25b29 --- /dev/null +++ b/modules/home-manager/programs/freecad.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-freecad = { + lib, + pkgs, + config, + ... + }: { + options.programs.freecad = { + enable = lib.mkEnableOption "enable freecad"; + }; + + config = lib.mkIf config.programs.freecad.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + freecad + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/FreeCAD" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/gdx-liftoff.nix b/modules/home-manager/programs/gdx-liftoff.nix new file mode 100644 index 0000000..df1692a --- /dev/null +++ b/modules/home-manager/programs/gdx-liftoff.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-gdx-liftoff = { + lib, + pkgs, + config, + ... + }: { + options.programs.gdx-liftoff = { + enable = lib.mkEnableOption "enable gdx-liftoff"; + }; + + config = lib.mkIf config.programs.gdx-liftoff.enable { + home.packages = with pkgs; [ + gdx-liftoff + ]; + }; + }; +} diff --git a/modules/home-manager/programs/gimp.nix b/modules/home-manager/programs/gimp.nix new file mode 100644 index 0000000..89e1d04 --- /dev/null +++ b/modules/home-manager/programs/gimp.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-gimp = { + lib, + pkgs, + config, + ... + }: { + options.programs.gimp = { + enable = lib.mkEnableOption "enable gimp"; + }; + + config = lib.mkIf config.programs.gimp.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + gimp + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/GIMP" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/guild-wars-2.nix b/modules/home-manager/programs/guild-wars-2.nix new file mode 100644 index 0000000..4c6e5fe --- /dev/null +++ b/modules/home-manager/programs/guild-wars-2.nix @@ -0,0 +1,26 @@ +{...}: { + flake.homeModules.home-manager-guild-wars-2 = { + config, + lib, + ... + }: let + cfg = config.programs.guild-wars-2; + in { + options.programs.guild-wars-2 = { + enable = lib.mkEnableOption "Guild Wars 2"; + }; + + config = { + assertions = [ + { + assertion = !cfg.enable; + message = '' + Guild Wars 2 module is not yet fully configured. + Please install Guild Wars 2 manually via Steam or the official client, + then configure the Wine environment as needed. + ''; + } + ]; + }; + }; +} diff --git a/modules/home-manager/programs/idea.nix b/modules/home-manager/programs/idea.nix new file mode 100644 index 0000000..68527c1 --- /dev/null +++ b/modules/home-manager/programs/idea.nix @@ -0,0 +1,34 @@ +{...}: { + flake.homeModules.home-manager-idea = { + lib, + pkgs, + config, + ... + }: { + options.programs.jetbrains.idea-oss = { + enable = lib.mkEnableOption "enable idea-oss"; + }; + + config = lib.mkIf config.programs.jetbrains.idea-oss.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + jetbrains.idea-oss + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + # configuration + "${config.xdg.configHome}/JetBrains/" + # plugins + "${config.xdg.dataHome}/JetBrains/" + # System and Logs + "${config.xdg.cacheHome}/JetBrains/" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/inkscape.nix b/modules/home-manager/programs/inkscape.nix new file mode 100644 index 0000000..f28546f --- /dev/null +++ b/modules/home-manager/programs/inkscape.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-inkscape = { + lib, + pkgs, + config, + ... + }: { + options.programs.inkscape = { + enable = lib.mkEnableOption "enable inkscape"; + }; + + config = lib.mkIf config.programs.inkscape.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + inkscape + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/inkscape" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/kdenlive.nix b/modules/home-manager/programs/kdenlive.nix new file mode 100644 index 0000000..142fda3 --- /dev/null +++ b/modules/home-manager/programs/kdenlive.nix @@ -0,0 +1,37 @@ +{...}: { + flake.homeModules.home-manager-kdenlive = { + config, + lib, + pkgs, + ... + }: let + cfg = config.programs.kdenlive; + in { + options.programs.kdenlive = { + enable = lib.mkEnableOption "kdenlive"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.kdePackages.kdenlive; + description = "The kdenlive package to install."; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + home.packages = [ + cfg.package + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/kdenliverc" + "${config.xdg.dataHome}/kdenlive" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/kicad.nix b/modules/home-manager/programs/kicad.nix new file mode 100644 index 0000000..7bea756 --- /dev/null +++ b/modules/home-manager/programs/kicad.nix @@ -0,0 +1,25 @@ +{...}: { + flake.homeModules.home-manager-kicad = { + lib, + pkgs, + config, + ... + }: { + options.programs.kicad = { + enable = lib.mkEnableOption "enable kicad"; + }; + + config = lib.mkIf config.programs.kicad.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + kicad + ]; + } + ( + lib.mkIf config.impermanence.enable { + # TODO: + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/krita.nix b/modules/home-manager/programs/krita.nix new file mode 100644 index 0000000..5821c21 --- /dev/null +++ b/modules/home-manager/programs/krita.nix @@ -0,0 +1,30 @@ +{...}: { + flake.homeModules.home-manager-krita = { + lib, + pkgs, + config, + ... + }: { + options.programs.krita = { + enable = lib.mkEnableOption "enable krita"; + }; + + config = lib.mkIf config.programs.krita.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + krita + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/kritarc" + "${config.xdg.dataHome}/krita" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/libreoffice.nix b/modules/home-manager/programs/libreoffice.nix new file mode 100644 index 0000000..007b1e4 --- /dev/null +++ b/modules/home-manager/programs/libreoffice.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-libreoffice = { + lib, + pkgs, + config, + ... + }: { + options.programs.libreoffice = { + enable = lib.mkEnableOption "enable libreoffice"; + }; + + config = lib.mkIf config.programs.libreoffice.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + libreoffice + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/libreoffice" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/makemkv.nix b/modules/home-manager/programs/makemkv.nix new file mode 100644 index 0000000..8d7f349 --- /dev/null +++ b/modules/home-manager/programs/makemkv.nix @@ -0,0 +1,43 @@ +{...}: { + flake.homeModules.home-manager-makemkv = { + lib, + pkgs, + config, + ... + }: { + options.programs.makemkv = { + enable = lib.mkEnableOption "enable makemkv"; + appKeyFile = lib.mkOption { + type = lib.types.str; + }; + destinationDir = lib.mkOption { + type = lib.types.str; + }; + }; + + config = lib.mkIf config.programs.makemkv.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + makemkv + ]; + + sops.templates."MakeMKV.settings.conf".content = '' + app_DestinationDir = "${config.programs.makemkv.destinationDir}" + app_DestinationType = "2" + app_Key = "${config.programs.makemkv.appKeyFile}" + ''; + + home.file.".MakeMKV/settings.conf".source = config.lib.file.mkOutOfStoreSymlink config.sops.templates."MakeMKV.settings.conf".path; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + ".MakeMKV" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/mapillary-uploader.nix b/modules/home-manager/programs/mapillary-uploader.nix new file mode 100644 index 0000000..825dd6a --- /dev/null +++ b/modules/home-manager/programs/mapillary-uploader.nix @@ -0,0 +1,31 @@ +{...}: { + flake.homeModules.home-manager-mapillary-uploader = { + config, + lib, + pkgs, + ... + }: + with lib; let + cfg = config.programs.mapillary-uploader; + in { + options.programs.mapillary-uploader = { + enable = mkEnableOption "Mapillary Desktop Uploader"; + }; + + config = mkIf cfg.enable (mkMerge [ + { + home.packages = [pkgs.mapillary-uploader]; + } + ( + mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/mapillary-uploader" + "${config.xdg.dataHome}/mapillary-uploader" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/matrix-cyberia-pwa.nix b/modules/home-manager/programs/matrix-cyberia-pwa.nix new file mode 100644 index 0000000..33129fc --- /dev/null +++ b/modules/home-manager/programs/matrix-cyberia-pwa.nix @@ -0,0 +1,58 @@ +{...}: { + flake.homeModules.home-manager-matrix-cyberia-pwa = { + lib, + pkgs, + config, + ... + }: let + cfg = config.programs.matrix-cyberia-pwa; + isChromium = cfg.package == pkgs.chromium; + isBrowserImpermanenceSupported = cfg.package == pkgs.chromium; + in { + options.programs.matrix-cyberia-pwa = { + enable = lib.mkEnableOption "enable Matrix Cyberia PWA"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.chromium; + description = "Browser package to use for the PWA"; + }; + impermanence = { + enable = lib.mkOption { + type = lib.types.bool; + default = isBrowserImpermanenceSupported; + description = "Enable impermanence configuration for the PWA. Only automatically enabled when using chromium."; + }; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + warnings = + lib.optional (config.impermanence.enable && !isBrowserImpermanenceSupported) + "matrix-cyberia-pwa: Using unsupported package. You will need to manually configure pwa for ${cfg.package.pname}. Supported package(s) ${pkgs.chromium.pname}"; + } + ( + lib.mkIf isChromium { + xdg.desktopEntries.matrix-cyberia-pwa = { + name = "Matrix (Cyberia)"; + type = "Application"; + exec = "${cfg.package}/bin/${cfg.package.pname} --app=https://chat.cyberia.club/"; + icon = "matrix"; + terminal = false; + categories = ["Network" "InstantMessaging"]; + }; + } + ) + ( + lib.mkIf (config.impermanence.enable && cfg.impermanence.enable && isChromium) { + home.persistence."/persist${config.home.homeDirectory}" = { + directories = [ + "${config.xdg.configHome}/chromium" + ]; + allowOther = true; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/mfoc.nix b/modules/home-manager/programs/mfoc.nix new file mode 100644 index 0000000..b8d07cf --- /dev/null +++ b/modules/home-manager/programs/mfoc.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-mfoc = { + lib, + pkgs, + config, + ... + }: { + options.programs.mfoc = { + enable = lib.mkEnableOption "enable mfoc"; + }; + + config = lib.mkIf config.programs.mfoc.enable { + home.packages = with pkgs; [ + mfoc + ]; + }; + }; +} diff --git a/modules/home-manager/programs/noisetorch.nix b/modules/home-manager/programs/noisetorch.nix new file mode 100644 index 0000000..1087eca --- /dev/null +++ b/modules/home-manager/programs/noisetorch.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-noisetorch = { + lib, + pkgs, + config, + ... + }: { + options.programs.noisetorch = { + enable = lib.mkEnableOption "enable noisetorch"; + }; + + config = lib.mkIf config.programs.noisetorch.enable { + home.packages = with pkgs; [ + noisetorch + ]; + }; + }; +} diff --git a/modules/home-manager/programs/noita-entangled-worlds.nix b/modules/home-manager/programs/noita-entangled-worlds.nix new file mode 100644 index 0000000..4776ada --- /dev/null +++ b/modules/home-manager/programs/noita-entangled-worlds.nix @@ -0,0 +1,20 @@ +{...}: { + flake.homeModules.home-manager-noita-entangled-worlds = { + lib, + pkgs, + config, + ... + }: { + options = { + programs.noita-entangled-worlds = { + enable = lib.mkEnableOption "Noita Entangled Worlds multiplayer mod"; + }; + }; + + config = lib.mkIf config.programs.noita-entangled-worlds.enable { + home.packages = with pkgs; [ + noita_entangled_worlds + ]; + }; + }; +} diff --git a/modules/home-manager/programs/obs.nix b/modules/home-manager/programs/obs.nix new file mode 100644 index 0000000..e98c82b --- /dev/null +++ b/modules/home-manager/programs/obs.nix @@ -0,0 +1,19 @@ +{...}: { + flake.homeModules.home-manager-obs = { + lib, + config, + ... + }: { + config = lib.mkIf config.programs.obs-studio.enable (lib.mkMerge [ + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/obs-studio" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/obsidian.nix b/modules/home-manager/programs/obsidian.nix new file mode 100644 index 0000000..1018c20 --- /dev/null +++ b/modules/home-manager/programs/obsidian.nix @@ -0,0 +1,19 @@ +{...}: { + flake.homeModules.home-manager-obsidian = { + lib, + config, + ... + }: { + config = lib.mkIf config.programs.obsidian.enable (lib.mkMerge [ + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/obsidian" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/olympus.nix b/modules/home-manager/programs/olympus.nix new file mode 100644 index 0000000..d92e845 --- /dev/null +++ b/modules/home-manager/programs/olympus.nix @@ -0,0 +1,37 @@ +{...}: { + flake.homeModules.home-manager-olympus = { + config, + lib, + pkgs, + ... + }: let + cfg = config.programs.olympus; + in { + options.programs.olympus = { + enable = lib.mkEnableOption "olympus"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.olympus; + description = "The olympus package to install."; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + home.packages = [ + cfg.package + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/olympus" + "${config.xdg.dataHome}/olympus" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/onionshare.nix b/modules/home-manager/programs/onionshare.nix new file mode 100644 index 0000000..6717eff --- /dev/null +++ b/modules/home-manager/programs/onionshare.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-onionshare = { + lib, + pkgs, + config, + ... + }: { + options.programs.onionshare = { + enable = lib.mkEnableOption "enable onionshare"; + }; + + config = lib.mkIf config.programs.onionshare.enable { + home.packages = with pkgs; [ + onionshare + ]; + }; + }; +} diff --git a/modules/home-manager/programs/openrgb.nix b/modules/home-manager/programs/openrgb.nix new file mode 100644 index 0000000..e098876 --- /dev/null +++ b/modules/home-manager/programs/openrgb.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-openrgb = { + lib, + pkgs, + config, + ... + }: { + options.programs.openrgb = { + enable = lib.mkEnableOption "enable openrgb"; + }; + + config = lib.mkIf config.programs.openrgb.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + openrgb + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/OpenRGB" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/openvpn.nix b/modules/home-manager/programs/openvpn.nix new file mode 100644 index 0000000..8d5ea5a --- /dev/null +++ b/modules/home-manager/programs/openvpn.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-openvpn = { + lib, + pkgs, + config, + ... + }: { + options.programs.openvpn = { + enable = lib.mkEnableOption "enable openvpn"; + }; + + config = lib.mkIf config.programs.openvpn.enable { + home.packages = with pkgs; [ + openvpn + ]; + }; + }; +} diff --git a/modules/home-manager/programs/pdfarranger.nix b/modules/home-manager/programs/pdfarranger.nix new file mode 100644 index 0000000..b55dd8d --- /dev/null +++ b/modules/home-manager/programs/pdfarranger.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-pdfarranger = { + lib, + pkgs, + config, + ... + }: { + options.programs.pdfarranger = { + enable = lib.mkEnableOption "enable pdfarranger"; + }; + + config = lib.mkIf config.programs.pdfarranger.enable { + home.packages = with pkgs; [ + pdfarranger + ]; + }; + }; +} diff --git a/modules/home-manager/programs/picard.nix b/modules/home-manager/programs/picard.nix new file mode 100644 index 0000000..50aeb0b --- /dev/null +++ b/modules/home-manager/programs/picard.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-picard = { + lib, + pkgs, + config, + ... + }: { + options.programs.picard = { + enable = lib.mkEnableOption "enable picard"; + }; + + config = lib.mkIf config.programs.picard.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + picard + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/MusicBrainz" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/piper.nix b/modules/home-manager/programs/piper.nix new file mode 100644 index 0000000..b5eb3b3 --- /dev/null +++ b/modules/home-manager/programs/piper.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-piper = { + lib, + pkgs, + config, + ... + }: { + options.programs.piper = { + enable = lib.mkEnableOption "enable piper"; + }; + + config = lib.mkIf config.programs.piper.enable { + home.packages = with pkgs; [ + piper + ]; + }; + }; +} diff --git a/modules/home-manager/programs/prostudiomasters.nix b/modules/home-manager/programs/prostudiomasters.nix new file mode 100644 index 0000000..f96b90e --- /dev/null +++ b/modules/home-manager/programs/prostudiomasters.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-prostudiomasters = { + lib, + pkgs, + config, + ... + }: { + options.programs.prostudiomasters = { + enable = lib.mkEnableOption "enable prostudiomasters"; + }; + + config = lib.mkIf config.programs.prostudiomasters.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + prostudiomasters + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/ProStudioMasters" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/proton-calendar-pwa.nix b/modules/home-manager/programs/proton-calendar-pwa.nix new file mode 100644 index 0000000..7417287 --- /dev/null +++ b/modules/home-manager/programs/proton-calendar-pwa.nix @@ -0,0 +1,57 @@ +{...}: { + flake.homeModules.home-manager-proton-calendar-pwa = { + lib, + pkgs, + config, + ... + }: let + cfg = config.programs.proton-calendar-pwa; + isChromium = cfg.package == pkgs.chromium; + isBrowserImpermanenceSupported = cfg.package == pkgs.chromium; + in { + options.programs.proton-calendar-pwa = { + enable = lib.mkEnableOption "enable Proton Calendar PWA"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.chromium; + description = "Browser package to use for the PWA"; + }; + impermanence = { + enable = lib.mkOption { + type = lib.types.bool; + default = isBrowserImpermanenceSupported; + description = "Enable impermanence configuration for the PWA. Only automatically enabled when using chromium."; + }; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + warnings = + lib.optional (config.impermanence.enable && !isBrowserImpermanenceSupported) + "proton-calendar-pwa: Using unsupported package. You will need to manually configure pwa for ${cfg.package.pname}. Supported package(s) ${pkgs.chromium.pname}"; + } + ( + lib.mkIf isChromium { + xdg.desktopEntries.proton-calendar-pwa = { + name = "Proton Calendar"; + type = "Application"; + exec = "${cfg.package}/bin/${cfg.package.pname} --app=https://calendar.proton.me"; + icon = "chrome-ojibjkjikcpjonjjngfkegflhmffeemk-Default"; + terminal = false; + }; + } + ) + ( + lib.mkIf (config.impermanence.enable && cfg.impermanence.enable && isChromium) { + home.persistence."/persist${config.home.homeDirectory}" = { + directories = [ + "${config.xdg.configHome}/chromium" + ]; + allowOther = true; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/proton-mail-pwa.nix b/modules/home-manager/programs/proton-mail-pwa.nix new file mode 100644 index 0000000..d599263 --- /dev/null +++ b/modules/home-manager/programs/proton-mail-pwa.nix @@ -0,0 +1,57 @@ +{...}: { + flake.homeModules.home-manager-proton-mail-pwa = { + lib, + pkgs, + config, + ... + }: let + cfg = config.programs.proton-mail-pwa; + isChromium = cfg.package == pkgs.chromium; + isBrowserImpermanenceSupported = cfg.package == pkgs.chromium; + in { + options.programs.proton-mail-pwa = { + enable = lib.mkEnableOption "enable Proton Mail PWA"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.chromium; + description = "Browser package to use for the PWA"; + }; + impermanence = { + enable = lib.mkOption { + type = lib.types.bool; + default = isBrowserImpermanenceSupported; + description = "Enable impermanence configuration for the PWA. Only automatically enabled when using chromium."; + }; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + warnings = + lib.optional (config.impermanence.enable && !isBrowserImpermanenceSupported) + "proton-mail-pwa: Using unsupported package. You will need to manually configure pwa for ${cfg.package.pname}. Supported package(s) ${pkgs.chromium.pname}"; + } + ( + lib.mkIf isChromium { + xdg.desktopEntries.proton-mail-pwa = { + name = "Proton Mail"; + type = "Application"; + exec = "${cfg.package}/bin/${cfg.package.pname} --app=https://mail.proton.me"; + icon = "chrome-jnpecgipniidlgicjocehkhajgdnjekh-Default"; + terminal = false; + }; + } + ) + ( + lib.mkIf (config.impermanence.enable && cfg.impermanence.enable && isChromium) { + home.persistence."/persist${config.home.homeDirectory}" = { + directories = [ + "${config.xdg.configHome}/chromium" + ]; + allowOther = true; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/protonvpn.nix b/modules/home-manager/programs/protonvpn.nix new file mode 100644 index 0000000..4f3bd44 --- /dev/null +++ b/modules/home-manager/programs/protonvpn.nix @@ -0,0 +1,30 @@ +{...}: { + flake.homeModules.home-manager-protonvpn = { + lib, + pkgs, + config, + ... + }: { + options.programs.protonvpn-gui = { + enable = lib.mkEnableOption "enable protonvpn"; + }; + + config = lib.mkIf config.programs.protonvpn-gui.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + proton-vpn + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/protonvpn" + "${config.xdg.configHome}/Proton" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/proxmark3.nix b/modules/home-manager/programs/proxmark3.nix new file mode 100644 index 0000000..1305a26 --- /dev/null +++ b/modules/home-manager/programs/proxmark3.nix @@ -0,0 +1,18 @@ +{...}: { + flake.homeModules.home-manager-proxmark3 = { + lib, + pkgs, + config, + ... + }: { + options.programs.proxmark3 = { + enable = lib.mkEnableOption "enable proxmark3"; + }; + + config = lib.mkIf config.programs.proxmark3.enable { + home.packages = with pkgs; [ + proxmark3 + ]; + }; + }; +} diff --git a/modules/home-manager/programs/qbittorrent.nix b/modules/home-manager/programs/qbittorrent.nix new file mode 100644 index 0000000..143a344 --- /dev/null +++ b/modules/home-manager/programs/qbittorrent.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-qbittorrent = { + lib, + pkgs, + config, + ... + }: { + options.programs.qbittorrent = { + enable = lib.mkEnableOption "enable qbittorrent"; + }; + + config = lib.mkIf config.programs.qbittorrent.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + qbittorrent + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/qBittorrent" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/qflipper.nix b/modules/home-manager/programs/qflipper.nix new file mode 100644 index 0000000..5e93b60 --- /dev/null +++ b/modules/home-manager/programs/qflipper.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-qflipper = { + lib, + pkgs, + config, + ... + }: { + options.programs.qflipper = { + enable = lib.mkEnableOption "enable qflipper"; + }; + + config = lib.mkIf config.programs.qflipper.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + qFlipper + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/qFlipper" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/signal.nix b/modules/home-manager/programs/signal.nix new file mode 100644 index 0000000..de24fe0 --- /dev/null +++ b/modules/home-manager/programs/signal.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-signal = { + lib, + pkgs, + config, + ... + }: { + options.programs.signal-desktop = { + enable = lib.mkEnableOption "enable signal"; + }; + + config = lib.mkIf config.programs.signal-desktop.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + signal-desktop + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/Signal" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/steam.nix b/modules/home-manager/programs/steam.nix new file mode 100644 index 0000000..07c1d05 --- /dev/null +++ b/modules/home-manager/programs/steam.nix @@ -0,0 +1,37 @@ +{...}: { + flake.homeModules.home-manager-steam = { + lib, + pkgs, + config, + ... + }: { + options.programs.steam = { + enable = lib.mkEnableOption "enable steam"; + }; + + config = lib.mkIf config.programs.steam.enable ( + lib.mkMerge [ + { + home.packages = with pkgs; [ + steam + steam.run + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + { + directory = "${config.xdg.dataHome}/Steam"; + method = "symlink"; + } + ]; + }; + } + ) + ] + ); + + # TODO: bind impermanence config + }; +} diff --git a/modules/home-manager/programs/tor-browser.nix b/modules/home-manager/programs/tor-browser.nix new file mode 100644 index 0000000..d17a904 --- /dev/null +++ b/modules/home-manager/programs/tor-browser.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-tor-browser = { + lib, + pkgs, + config, + ... + }: { + options.programs.tor-browser = { + enable = lib.mkEnableOption "enable tor-browser"; + }; + + config = lib.mkIf config.programs.tor-browser.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + tor-browser + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.dataHome}/torbrowser" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/ungoogled-chromium.nix b/modules/home-manager/programs/ungoogled-chromium.nix new file mode 100644 index 0000000..1481353 --- /dev/null +++ b/modules/home-manager/programs/ungoogled-chromium.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-ungoogled-chromium = { + lib, + pkgs, + config, + ... + }: { + options.programs.ungoogled-chromium = { + enable = lib.mkEnableOption "enable ungoogled-chromium"; + }; + + config = lib.mkIf config.programs.ungoogled-chromium.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + ungoogled-chromium + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/chromium" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/via.nix b/modules/home-manager/programs/via.nix new file mode 100644 index 0000000..b41bd11 --- /dev/null +++ b/modules/home-manager/programs/via.nix @@ -0,0 +1,30 @@ +{...}: { + flake.homeModules.home-manager-via = { + lib, + pkgs, + config, + ... + }: { + options.programs.via = { + enable = lib.mkEnableOption "enable via"; + }; + + config = lib.mkIf config.programs.via.enable (lib.mkMerge [ + { + home.packages = with pkgs; [ + via + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + "${config.xdg.configHome}/via" + "${config.xdg.dataHome}/via" + ]; + }; + } + ) + ]); + }; +} diff --git a/modules/home-manager/programs/vmware-workstation.nix b/modules/home-manager/programs/vmware-workstation.nix new file mode 100644 index 0000000..e208240 --- /dev/null +++ b/modules/home-manager/programs/vmware-workstation.nix @@ -0,0 +1,38 @@ +{...}: { + flake.homeModules.home-manager-vmware-workstation = { + lib, + pkgs, + config, + ... + }: { + options.programs.vmware-workstation = { + enable = lib.mkEnableOption "enable VMware Workstation"; + }; + + config = lib.mkIf config.programs.vmware-workstation.enable ( + lib.mkMerge [ + { + home.packages = with pkgs; [ + vmware-workstation + ]; + } + ( + lib.mkIf config.impermanence.enable { + home.persistence."${config.impermanence.persistencePath}" = { + directories = [ + { + directory = ".vmware"; + method = "symlink"; + } + { + directory = "vmware"; + method = "symlink"; + } + ]; + }; + } + ) + ] + ); + }; +} diff --git a/modules/home-manager/programs/vortex.nix b/modules/home-manager/programs/vortex.nix new file mode 100644 index 0000000..3de59f9 --- /dev/null +++ b/modules/home-manager/programs/vortex.nix @@ -0,0 +1,26 @@ +{...}: { + flake.homeModules.home-manager-vortex = { + config, + lib, + ... + }: let + cfg = config.programs.vortex; + in { + options.programs.vortex = { + enable = lib.mkEnableOption "Vortex (Nexus Mods manager)"; + }; + + config = { + assertions = [ + { + assertion = !cfg.enable; + message = '' + Vortex module is not yet fully configured. + Please download and install Vortex manually from the Nexus Mods website, + then configure the Wine environment and dependencies as needed. + ''; + } + ]; + }; + }; +} diff --git a/modules/home-manager/programs/vscode/aiCode.nix b/modules/home-manager/programs/vscode/aiCode.nix new file mode 100644 index 0000000..dba70a7 --- /dev/null +++ b/modules/home-manager/programs/vscode/aiCode.nix @@ -0,0 +1,47 @@ +{...}: { + flake.homeModules.home-manager-vscode-ai-code = { + lib, + pkgs, + ... + }: let + pkgsRepository = pkgs.codium-extensions; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.aiCode = { + enable = lib.mkEnableOption "should the ai code extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "ai-code" {}; + ollamaHost = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = "what host should be used for ollama"; + default = null; + }; + inlineCompletion = { + enable = lib.mkOption { + type = lib.types.bool; + description = "should inline completion be enabled"; + default = true; + }; + model = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = "what model should be used for ollama"; + default = null; + }; + }; + }; + }; + config = lib.mkIf config.extraExtensions.aiCode.enable { + extensions = [ + config.extraExtensions.aiCode.extension + ]; + userSettings = { + "aiCode.ollamaHost" = lib.mkIf (config.extraExtensions.aiCode.ollamaHost != null) config.extraExtensions.aiCode.ollamaHost; + "aiCode.inlineCompletion.enable" = config.extraExtensions.aiCode.inlineCompletion.enable; + "aiCode.inlineCompletion.model" = lib.mkIf (config.extraExtensions.aiCode.inlineCompletion.model != null) config.extraExtensions.aiCode.inlineCompletion.model; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/alejandra.nix b/modules/home-manager/programs/vscode/alejandra.nix new file mode 100644 index 0000000..8871771 --- /dev/null +++ b/modules/home-manager/programs/vscode/alejandra.nix @@ -0,0 +1,36 @@ +{...}: { + flake.homeModules.home-manager-vscode-alejandra = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.alejandra = { + enable = lib.mkEnableOption "Enable Alejandra extension for Nix formatting"; + extension = lib.mkPackageOption pkgsRepository "alejandra" { + default = ["kamadorueda" "alejandra"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.alejandra.enable { + extensions = [config.extraExtensions.alejandra.extension]; + userSettings = { + "[nix]" = { + "editor.defaultFormatter" = "kamadorueda.alejandra"; + "editor.formatOnPaste" = true; + "editor.formatOnSave" = true; + "editor.formatOnType" = true; + }; + "alejandra.program" = "alejandra"; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/astroVscode.nix b/modules/home-manager/programs/vscode/astroVscode.nix new file mode 100644 index 0000000..7ac1dad --- /dev/null +++ b/modules/home-manager/programs/vscode/astroVscode.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-astro-vscode = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.astroVscode = { + enable = lib.mkEnableOption "should the astro-vscode extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "astro-vscode" { + default = ["astro-build" "astro-vscode"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.astroVscode.enable { + extensions = [ + config.extraExtensions.astroVscode.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/atomKeybindings.nix b/modules/home-manager/programs/vscode/atomKeybindings.nix new file mode 100644 index 0000000..36edfdc --- /dev/null +++ b/modules/home-manager/programs/vscode/atomKeybindings.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-atom-keybindings = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.atomKeybindings = { + enable = lib.mkEnableOption "should the atom keybindings extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "atom-keybindings" { + default = ["ms-vscode" "atom-keybindings"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.atomKeybindings.enable { + extensions = [ + config.extraExtensions.atomKeybindings.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/autoRenameTag.nix b/modules/home-manager/programs/vscode/autoRenameTag.nix new file mode 100644 index 0000000..91fa899 --- /dev/null +++ b/modules/home-manager/programs/vscode/autoRenameTag.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-auto-rename-tag = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.autoRenameTag = { + enable = lib.mkEnableOption "should the auto-rename-tag extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "auto-rename-tag" { + default = ["formulahendry" "auto-rename-tag"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.autoRenameTag.enable { + extensions = [ + config.extraExtensions.autoRenameTag.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/claudeDev.nix b/modules/home-manager/programs/vscode/claudeDev.nix new file mode 100644 index 0000000..7be9b4f --- /dev/null +++ b/modules/home-manager/programs/vscode/claudeDev.nix @@ -0,0 +1,239 @@ +{...}: { + flake.homeModules.home-manager-vscode-claude-dev = { + lib, + pkgs, + config, + inputs, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + + mcp-nixos = inputs.mcp-nixos.packages.${pkgs.stdenv.hostPlatform.system}.default; + + anyProfileHasInstallTool = lib.any ( + profile: + profile.extraExtensions.claudeDev.enable + && profile.extraExtensions.claudeDev.installTool + ) (lib.attrValues config.programs.vscode.profiles); + + getInstallToolPackage = lib.findFirst (package: package != null) pkgs.cline (map ( + profile: + if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.installTool + then profile.extraExtensions.claudeDev.package + else null + ) (lib.attrValues config.programs.vscode.profiles)); + + anyProfileHasMcpNixos = lib.any ( + profile: + profile.extraExtensions.claudeDev.enable + && profile.extraExtensions.claudeDev.mcp.nixos.enable + ) (lib.attrValues config.programs.vscode.profiles); + + anyProfileHasMcpEslint = lib.any ( + profile: + profile.extraExtensions.claudeDev.enable + && profile.extraExtensions.claudeDev.mcp.eslint.enable + ) (lib.attrValues config.programs.vscode.profiles); + + anyProfileHasMcpVitest = lib.any ( + profile: + profile.extraExtensions.claudeDev.enable + && profile.extraExtensions.claudeDev.mcp.vitest.enable + ) (lib.attrValues config.programs.vscode.profiles); + + anyProfileHasMcpSleep = lib.any ( + profile: + profile.extraExtensions.claudeDev.enable + && profile.extraExtensions.claudeDev.mcp.sleep.enable + ) (lib.attrValues config.programs.vscode.profiles); + + anyProfileHasMcp = anyProfileHasMcpNixos || anyProfileHasMcpEslint || anyProfileHasMcpVitest || anyProfileHasMcpSleep; + + getMcpTimeout = serverName: + lib.findFirst (timeout: timeout != null) null (map ( + profile: + if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable + then profile.extraExtensions.claudeDev.mcp.${serverName}.timeout + else null + ) (lib.attrValues config.programs.vscode.profiles)); + + getMcpAutoApprove = serverName: + lib.foldl' ( + acc: profile: + if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable + then acc // profile.extraExtensions.claudeDev.mcp.${serverName}.autoApprove + else acc + ) {} (lib.attrValues config.programs.vscode.profiles); + + getMcpPackage = serverName: + lib.findFirst (package: package != null) null (map ( + profile: + if profile.extraExtensions.claudeDev.enable && profile.extraExtensions.claudeDev.mcp.${serverName}.enable + then profile.extraExtensions.claudeDev.mcp.${serverName}.package + else null + ) (lib.attrValues config.programs.vscode.profiles)); + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.claudeDev = { + enable = lib.mkEnableOption "should the claude-dev extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "claude-dev" { + default = ["saoudrizwan" "claude-dev"]; + }; + + installTool = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Whether to install the cline CLI tool for subagent support when the extension is enabled"; + }; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.cline; + description = "The package to install for the cline CLI tool"; + }; + + mcp = { + nixos = { + enable = lib.mkEnableOption "enable NixOS MCP server for Claude Dev"; + autoApprove = { + nixos_search = lib.mkEnableOption "should the nixos_search tool be auto approved for the nixos MCP server"; + nixos_info = lib.mkEnableOption "should the nixos_info tool be auto approved for the nixos MCP server"; + home_manager_search = lib.mkEnableOption "should the home_manager_search tool be auto approved for the nixos MCP server"; + home_manager_info = lib.mkEnableOption "should the home_manager_info tool be auto approved for the nixos MCP server"; + darwin_search = lib.mkEnableOption "should the darwin_search tool be auto approved for the nixos MCP server"; + darwin_info = lib.mkEnableOption "should the darwin_info tool be auto approved for the nixos MCP server"; + nixos_flakes_search = lib.mkEnableOption "should the nixos_flakes_search tool be auto approved for the nixos MCP server"; + }; + }; + eslint = { + enable = lib.mkEnableOption "enable ESLint MCP server for Claude Dev"; + package = lib.mkOption { + type = lib.types.str; + default = "@eslint/mcp@latest"; + description = "NPM package to use for ESLint MCP server"; + }; + timeout = lib.mkOption { + type = lib.types.nullOr lib.types.int; + default = null; + description = "Timeout in seconds for ESLint MCP server operations"; + }; + autoApprove = { + lint-files = lib.mkEnableOption "Should the lint-files tool be auto approved for ESLint MCP server"; + }; + }; + vitest = { + enable = lib.mkEnableOption "enable Vitest MCP server for Claude Dev"; + package = lib.mkOption { + type = lib.types.str; + default = "@djankies/vitest-mcp"; + description = "NPM package to use for Vitest MCP server"; + }; + timeout = lib.mkOption { + type = lib.types.nullOr lib.types.int; + default = null; + description = "Timeout in seconds for Vitest MCP server operations"; + }; + autoApprove = { + list_tests = lib.mkEnableOption "Should the list_tests tool be auto approved for Vitest MCP server"; + run_tests = lib.mkEnableOption "Should the run_tests tool be auto approved for Vitest MCP server"; + analyze_coverage = lib.mkEnableOption "Should the analyze_coverage tool be auto approved for Vitest MCP server"; + set_project_root = lib.mkEnableOption "Should the set_project_root tool be auto approved for Vitest MCP server"; + }; + }; + sleep = { + enable = lib.mkEnableOption "enable Sleep MCP server for Claude Dev"; + package = lib.mkOption { + type = lib.types.str; + default = "sleep-mcp"; + description = "NPM package to use for Sleep MCP server"; + }; + timeout = lib.mkOption { + type = lib.types.nullOr lib.types.int; + default = null; + description = "Timeout in seconds for Sleep MCP server operations"; + }; + autoApprove = { + sleep = lib.mkEnableOption "Should the sleep tool be auto approved for Sleep MCP server"; + }; + }; + }; + }; + }; + config = lib.mkIf config.extraExtensions.claudeDev.enable { + extensions = [ + config.extraExtensions.claudeDev.extension + ]; + }; + })); + }; + + config = lib.mkMerge [ + (lib.mkIf anyProfileHasInstallTool { + home.packages = [ + getInstallToolPackage + ]; + }) + + (lib.mkIf anyProfileHasMcpNixos { + home.packages = [ + mcp-nixos + ]; + }) + + (lib.mkIf anyProfileHasMcp { + home.file."${config.xdg.configHome}/VSCodium/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json" = { + text = builtins.toJSON { + mcpServers = + (lib.optionalAttrs anyProfileHasMcpNixos { + nixos = { + command = "${mcp-nixos}/bin/mcp-nixos"; + }; + }) + // (lib.optionalAttrs anyProfileHasMcpEslint { + eslint = + { + command = "${pkgs.nodejs}/bin/npx"; + args = ["-y" (getMcpPackage "eslint")]; + } + // (lib.optionalAttrs ((getMcpTimeout "eslint") != null) { + timeout = getMcpTimeout "eslint"; + }) + // (lib.optionalAttrs ((getMcpAutoApprove "eslint") != {}) { + autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "eslint")); + }); + }) + // (lib.optionalAttrs anyProfileHasMcpVitest { + vitest = + { + command = "${pkgs.nodejs}/bin/npx"; + args = ["-y" (getMcpPackage "vitest")]; + } + // (lib.optionalAttrs ((getMcpTimeout "vitest") != null) { + timeout = getMcpTimeout "vitest"; + }) + // (lib.optionalAttrs ((getMcpAutoApprove "vitest") != {}) { + autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "vitest")); + }); + }) + // (lib.optionalAttrs anyProfileHasMcpSleep { + sleep-mcp = + { + command = "${pkgs.nodejs}/bin/npx"; + args = ["-y" (getMcpPackage "sleep")]; + } + // (lib.optionalAttrs ((getMcpTimeout "sleep") != null) { + timeout = getMcpTimeout "sleep"; + }) + // (lib.optionalAttrs ((getMcpAutoApprove "sleep") != {}) { + autoApprove = builtins.attrNames (lib.filterAttrs (_: v: v) (getMcpAutoApprove "sleep")); + }); + }); + }; + force = true; + }; + }) + ]; + }; +} diff --git a/modules/home-manager/programs/vscode/conventionalCommits.nix b/modules/home-manager/programs/vscode/conventionalCommits.nix new file mode 100644 index 0000000..916c84f --- /dev/null +++ b/modules/home-manager/programs/vscode/conventionalCommits.nix @@ -0,0 +1,42 @@ +{...}: { + flake.homeModules.home-manager-vscode-conventional-commits = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.vscode-marketplace; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.conventionalCommits = { + enable = lib.mkEnableOption "Enable VSCode Conventional Commits extension"; + extension = lib.mkPackageOption pkgsRepository "conventional-commits" { + default = ["vivaxy" "vscode-conventional-commits"]; + }; + + gitmoji = lib.mkEnableOption "should emoji be prompted for as a part of the commit message./"; + + promptScopes = lib.mkEnableOption "prompting for scopes in conventional commits"; + + promptFooter = lib.mkEnableOption "prompting for footer in conventional commits"; + + showNewVersionNotes = lib.mkEnableOption "showing new version notes for conventional commits"; + }; + }; + config = lib.mkIf config.extraExtensions.conventionalCommits.enable { + extensions = [config.extraExtensions.conventionalCommits.extension]; + + userSettings = { + "conventionalCommits.gitmoji" = config.extraExtensions.conventionalCommits.gitmoji; + "conventionalCommits.promptScopes" = config.extraExtensions.conventionalCommits.promptScopes; + "conventionalCommits.promptFooter" = config.extraExtensions.conventionalCommits.promptFooter; + "conventionalCommits.showNewVersionNotes" = config.extraExtensions.conventionalCommits.showNewVersionNotes; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/default.nix b/modules/home-manager/programs/vscode/default.nix new file mode 100644 index 0000000..a69d53b --- /dev/null +++ b/modules/home-manager/programs/vscode/default.nix @@ -0,0 +1,35 @@ +{config, ...}: let + mod = config.flake.homeModules; +in { + flake.homeModules.home-manager-vscode = { + imports = [ + mod.home-manager-vscode-ai-code + mod.home-manager-vscode-alejandra + mod.home-manager-vscode-astro-vscode + mod.home-manager-vscode-atom-keybindings + mod.home-manager-vscode-auto-rename-tag + mod.home-manager-vscode-claude-dev + mod.home-manager-vscode-conventional-commits + mod.home-manager-vscode-direnv + mod.home-manager-vscode-es7-react-js-snippets + mod.home-manager-vscode-eslint + mod.home-manager-vscode-even-better-toml + mod.home-manager-vscode-go + mod.home-manager-vscode-graphql + mod.home-manager-vscode-jest + mod.home-manager-vscode-live-server + mod.home-manager-vscode-mdx + mod.home-manager-vscode-nearley + mod.home-manager-vscode-nix-ide + mod.home-manager-vscode-one-dark + mod.home-manager-vscode-open-dyslexic-font + mod.home-manager-vscode-open-remote-ssh + mod.home-manager-vscode-platform-io + mod.home-manager-vscode-rust-analyzer + mod.home-manager-vscode-standard + mod.home-manager-vscode-stylelint + mod.home-manager-vscode-tauri-vscode + mod.home-manager-vscode-vitest + ]; + }; +} diff --git a/modules/home-manager/programs/vscode/direnv.nix b/modules/home-manager/programs/vscode/direnv.nix new file mode 100644 index 0000000..d8ef14d --- /dev/null +++ b/modules/home-manager/programs/vscode/direnv.nix @@ -0,0 +1,27 @@ +{...}: { + flake.homeModules.home-manager-vscode-direnv = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.vscode-marketplace; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.direnv = { + enable = lib.mkEnableOption "Enable direnv extension"; + extension = lib.mkPackageOption pkgsRepository "direnv" { + default = ["mkhl" "direnv"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.direnv.enable { + extensions = [config.extraExtensions.direnv.extension]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/es7ReactJsSnippets.nix b/modules/home-manager/programs/vscode/es7ReactJsSnippets.nix new file mode 100644 index 0000000..86b8ba4 --- /dev/null +++ b/modules/home-manager/programs/vscode/es7ReactJsSnippets.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-es7-react-js-snippets = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.es7ReactJsSnippets = { + enable = lib.mkEnableOption "should the es7-react-js-snippets extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "es7-react-js-snippets" { + default = ["dsznajder" "es7-react-js-snippets"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.es7ReactJsSnippets.enable { + extensions = [ + config.extraExtensions.es7ReactJsSnippets.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/evenBetterToml.nix b/modules/home-manager/programs/vscode/evenBetterToml.nix new file mode 100644 index 0000000..fa4bc1f --- /dev/null +++ b/modules/home-manager/programs/vscode/evenBetterToml.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-even-better-toml = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.evenBetterToml = { + enable = lib.mkEnableOption "should the even-better-toml extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "even-better-toml" { + default = ["tamasfe" "even-better-toml"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.evenBetterToml.enable { + extensions = [ + config.extraExtensions.evenBetterToml.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/go.nix b/modules/home-manager/programs/vscode/go.nix new file mode 100644 index 0000000..d1a0dc3 --- /dev/null +++ b/modules/home-manager/programs/vscode/go.nix @@ -0,0 +1,36 @@ +{...}: { + flake.homeModules.home-manager-vscode-go = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.go = { + enable = lib.mkEnableOption "should the go extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "go" { + default = ["golang" "go"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.go.enable { + extensions = [ + config.extraExtensions.go.extension + ]; + userSettings = { + "go.alternateTools" = { + "gopls" = "gopls"; + }; + "go.toolsManagement.autoUpdate" = false; + "go.useLanguageServer" = true; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/graphql.nix b/modules/home-manager/programs/vscode/graphql.nix new file mode 100644 index 0000000..bdb9a70 --- /dev/null +++ b/modules/home-manager/programs/vscode/graphql.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-graphql = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.graphql = { + enable = lib.mkEnableOption "should the graphql highlighting extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vscode-graphql" { + default = ["graphql" "vscode-graphql-syntax"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.graphql.enable { + extensions = [ + config.extraExtensions.graphql.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/liveServer.nix b/modules/home-manager/programs/vscode/liveServer.nix new file mode 100644 index 0000000..c9a3d32 --- /dev/null +++ b/modules/home-manager/programs/vscode/liveServer.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-live-server = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.liveServer = { + enable = lib.mkEnableOption "should the live-server extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "live-server" { + default = ["ms-vscode" "live-server"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.liveServer.enable { + extensions = [ + config.extraExtensions.liveServer.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/nearley.nix b/modules/home-manager/programs/vscode/nearley.nix new file mode 100644 index 0000000..f4afa10 --- /dev/null +++ b/modules/home-manager/programs/vscode/nearley.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-nearley = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.vscode-marketplace; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.nearley = { + enable = lib.mkEnableOption "should the nearley extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "nearley" { + default = ["karyfoundation" "nearley"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.nearley.enable { + extensions = [ + config.extraExtensions.nearley.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/nixIde.nix b/modules/home-manager/programs/vscode/nixIde.nix new file mode 100644 index 0000000..0880e49 --- /dev/null +++ b/modules/home-manager/programs/vscode/nixIde.nix @@ -0,0 +1,31 @@ +{...}: { + flake.homeModules.home-manager-vscode-nix-ide = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.nixIde = { + enable = lib.mkEnableOption "Enable Nix IDE extension"; + extension = lib.mkPackageOption pkgsRepository "nix-ide" { + default = ["jnoortheen" "nix-ide"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.nixIde.enable { + extensions = [config.extraExtensions.nixIde.extension]; + userSettings = { + "nix.enableLanguageServer" = true; + "nix.serverPath" = "nil"; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/oneDark.nix b/modules/home-manager/programs/vscode/oneDark.nix new file mode 100644 index 0000000..8f7864b --- /dev/null +++ b/modules/home-manager/programs/vscode/oneDark.nix @@ -0,0 +1,32 @@ +{...}: { + flake.homeModules.home-manager-vscode-one-dark = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.oneDark = { + enable = lib.mkEnableOption "should the one dark theme for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "onedark" { + default = ["akamud" "vscode-theme-onedark"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.oneDark.enable { + extensions = [ + config.extraExtensions.oneDark.extension + ]; + userSettings = { + "workbench.colorTheme" = "Atom One Dark"; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/openDyslexicFont.nix b/modules/home-manager/programs/vscode/openDyslexicFont.nix new file mode 100644 index 0000000..e9a128a --- /dev/null +++ b/modules/home-manager/programs/vscode/openDyslexicFont.nix @@ -0,0 +1,51 @@ +{...}: { + flake.homeModules.home-manager-vscode-open-dyslexic-font = { + lib, + pkgs, + config, + ... + }: { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.openDyslexicFont = { + enable = lib.mkEnableOption "should OpenDyslexic font be set as the default font for VSCode"; + package = lib.mkPackageOption pkgs "nerd-fonts.open-dyslexic" { + default = ["nerd-fonts" "open-dyslexic"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.openDyslexicFont.enable { + userSettings = { + "editor.fontFamily" = "'OpenDyslexicM Nerd Font Mono', Droid Sans Mono, monospace"; + "editor.fontSize" = 14; + "editor.letterSpacing" = -0.3; + }; + }; + })); + }; + + config = let + enabledProfiles = + lib.filter (profile: profile.extraExtensions.openDyslexicFont.enable or false) + (lib.attrValues config.programs.vscode.profiles); + + anyProfileUsesOpenDyslexicFont = enabledProfiles != []; + + fontPackages = lib.unique (map (profile: profile.extraExtensions.openDyslexicFont.package) enabledProfiles); + in { + # Ensure OpenDyslexic font packages are installed when any VSCode profile uses them + home.packages = fontPackages; + + fonts.fontconfig.enable = lib.mkIf anyProfileUsesOpenDyslexicFont true; + + # Add assertion to ensure the fonts are available + assertions = + map (fontPkg: { + assertion = lib.elem fontPkg config.home.packages; + message = "OpenDyslexic font package '${fontPkg.name or "unknown"}' must be installed when using openDyslexicFont extension for VSCode."; + }) + fontPackages; + }; + }; +} diff --git a/modules/home-manager/programs/vscode/openRemoteSsh.nix b/modules/home-manager/programs/vscode/openRemoteSsh.nix new file mode 100644 index 0000000..343e4e0 --- /dev/null +++ b/modules/home-manager/programs/vscode/openRemoteSsh.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-open-remote-ssh = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.openRemoteSsh = { + enable = lib.mkEnableOption "should the open-remote-ssh extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "open-remote-ssh" { + default = ["jeanp413" "open-remote-ssh"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.openRemoteSsh.enable { + extensions = [ + config.extraExtensions.openRemoteSsh.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/platformIO.nix b/modules/home-manager/programs/vscode/platformIO.nix new file mode 100644 index 0000000..29decda --- /dev/null +++ b/modules/home-manager/programs/vscode/platformIO.nix @@ -0,0 +1,32 @@ +{...}: { + flake.homeModules.home-manager-vscode-platform-io = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.platformIO = { + enable = lib.mkEnableOption "should the platformIO extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "platformIO" { + default = ["pioarduino" "pioarduino-ide"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.platformIO.enable { + extensions = [ + config.extraExtensions.platformIO.extension + ]; + userSettings = { + "platformio-ide.useBuiltinPIOCore" = false; + }; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/rustAnalyzer.nix b/modules/home-manager/programs/vscode/rustAnalyzer.nix new file mode 100644 index 0000000..8c122ec --- /dev/null +++ b/modules/home-manager/programs/vscode/rustAnalyzer.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-rust-analyzer = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.rustAnalyzer = { + enable = lib.mkEnableOption "should the rust-analyzer extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "rust-analyzer" { + default = ["rust-lang" "rust-analyzer"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.rustAnalyzer.enable { + extensions = [ + config.extraExtensions.rustAnalyzer.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/tauriVscode.nix b/modules/home-manager/programs/vscode/tauriVscode.nix new file mode 100644 index 0000000..c5d76a7 --- /dev/null +++ b/modules/home-manager/programs/vscode/tauriVscode.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-tauri-vscode = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.tauriVscode = { + enable = lib.mkEnableOption "should the tauri-vscode extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "tauri-vscode" { + default = ["tauri-apps" "tauri-vscode"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.tauriVscode.enable { + extensions = [ + config.extraExtensions.tauriVscode.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/vitest.nix b/modules/home-manager/programs/vscode/vitest.nix new file mode 100644 index 0000000..845a036 --- /dev/null +++ b/modules/home-manager/programs/vscode/vitest.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-vitest = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.vitest = { + enable = lib.mkEnableOption "should the vitest extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vitest" { + default = ["vitest" "explorer"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.vitest.enable { + extensions = [ + config.extraExtensions.vitest.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/vscodeEslint.nix b/modules/home-manager/programs/vscode/vscodeEslint.nix new file mode 100644 index 0000000..faf34f9 --- /dev/null +++ b/modules/home-manager/programs/vscode/vscodeEslint.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-eslint = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.vscodeEslint = { + enable = lib.mkEnableOption "should the vscode-eslint extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vscode-eslint" { + default = ["dbaeumer" "vscode-eslint"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.vscodeEslint.enable { + extensions = [ + config.extraExtensions.vscodeEslint.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/vscodeJest.nix b/modules/home-manager/programs/vscode/vscodeJest.nix new file mode 100644 index 0000000..981c5d8 --- /dev/null +++ b/modules/home-manager/programs/vscode/vscodeJest.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-jest = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.vscodeJest = { + enable = lib.mkEnableOption "should the vscode-jest extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vscode-jest" { + default = ["orta" "vscode-jest"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.vscodeJest.enable { + extensions = [ + config.extraExtensions.vscodeJest.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/vscodeMdx.nix b/modules/home-manager/programs/vscode/vscodeMdx.nix new file mode 100644 index 0000000..6ece0db --- /dev/null +++ b/modules/home-manager/programs/vscode/vscodeMdx.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-mdx = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.vscodeMdx = { + enable = lib.mkEnableOption "should the vscode-mdx extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vscode-mdx" { + default = ["unifiedjs" "vscode-mdx"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.vscodeMdx.enable { + extensions = [ + config.extraExtensions.vscodeMdx.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/vscodeStandard.nix b/modules/home-manager/programs/vscode/vscodeStandard.nix new file mode 100644 index 0000000..3cd7a5f --- /dev/null +++ b/modules/home-manager/programs/vscode/vscodeStandard.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-standard = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.vscodeStandard = { + enable = lib.mkEnableOption "should the vscode-standard extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vscode-standard" { + default = ["standard" "vscode-standard"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.vscodeStandard.enable { + extensions = [ + config.extraExtensions.vscodeStandard.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/programs/vscode/vscodeStylelint.nix b/modules/home-manager/programs/vscode/vscodeStylelint.nix new file mode 100644 index 0000000..8e224cd --- /dev/null +++ b/modules/home-manager/programs/vscode/vscodeStylelint.nix @@ -0,0 +1,29 @@ +{...}: { + flake.homeModules.home-manager-vscode-stylelint = { + lib, + pkgs, + config, + ... + }: let + pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; + pkgsRepository = pkgsRepositories.open-vsx; + in { + options.programs.vscode.profiles = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { + options = { + extraExtensions.vscodeStylelint = { + enable = lib.mkEnableOption "should the vscode-stylelint extension for vscode be enabled"; + extension = lib.mkPackageOption pkgsRepository "vscode-stylelint" { + default = ["stylelint" "vscode-stylelint"]; + }; + }; + }; + config = lib.mkIf config.extraExtensions.vscodeStylelint.enable { + extensions = [ + config.extraExtensions.vscodeStylelint.extension + ]; + }; + })); + }; + }; +} diff --git a/modules/home-manager/sops.nix b/modules/home-manager/sops.nix new file mode 100644 index 0000000..1336c0c --- /dev/null +++ b/modules/home-manager/sops.nix @@ -0,0 +1,9 @@ +{...}: { + flake.homeModules.home-manager-sops = {...}: { + config = { + sops = { + age.keyFile = "/var/lib/sops-nix/key.txt"; + }; + }; + }; +} diff --git a/modules/home-manager/user.nix b/modules/home-manager/user.nix new file mode 100644 index 0000000..15c4d77 --- /dev/null +++ b/modules/home-manager/user.nix @@ -0,0 +1,19 @@ +{...}: { + flake.homeModules.home-manager-user = { + lib, + config, + osConfig, + ... + }: { + options.user = { + isDesktopUser = lib.mkOption { + type = lib.types.bool; + default = osConfig.host.users.${config.home.username}.isDesktopUser; + }; + isTerminalUser = lib.mkOption { + type = lib.types.bool; + default = osConfig.host.users.${config.home.username}.isTerminalUser; + }; + }; + }; +} diff --git a/modules/hosts/home/eve/configuration.nix b/modules/hosts/home/eve/configuration.nix index c54d038..8ec061e 100644 --- a/modules/hosts/home/eve/configuration.nix +++ b/modules/hosts/home/eve/configuration.nix @@ -32,18 +32,18 @@ # Home Manager can also manage your environment variables through # 'home.sessionVariables'. If you don't want to manage your shell through Home - # Manager then you have to manually source 'hm-session-vars.sh' located at + # Manager then you have to manually source 'home-manager-session-vars.sh' located at # either # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # ~/.nix-profile/etc/profile.d/home-manager-session-vars.sh # # or # - # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # ~/.local/state/nix/profiles/profile/etc/profile.d/home-manager-session-vars.sh # # or # - # /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh + # /etc/profiles/per-user/leyla/etc/profile.d/home-manager-session-vars.sh # sessionVariables = { # EDITOR = "emacs"; diff --git a/modules/hosts/home/leyla/configuration.nix b/modules/hosts/home/leyla/configuration.nix index 9f0093d..a7f7a05 100644 --- a/modules/hosts/home/leyla/configuration.nix +++ b/modules/hosts/home/leyla/configuration.nix @@ -62,18 +62,18 @@ # Home Manager can also manage your environment variables through # 'home.sessionVariables'. If you don't want to manage your shell through Home - # Manager then you have to manually source 'hm-session-vars.sh' located at + # Manager then you have to manually source 'home-manager-session-vars.sh' located at # either # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # ~/.nix-profile/etc/profile.d/home-manager-session-vars.sh # # or # - # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # ~/.local/state/nix/profiles/profile/etc/profile.d/home-manager-session-vars.sh # # or # - # /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh + # /etc/profiles/per-user/leyla/etc/profile.d/home-manager-session-vars.sh # sessionVariables = { # EDITOR = "emacs"; diff --git a/modules/parts.nix b/modules/parts.nix index 16228c4..cd65ba0 100644 --- a/modules/parts.nix +++ b/modules/parts.nix @@ -18,7 +18,7 @@ common-modules ++ [ sops-nix.homeManagerModules.sops - ../legacy-modules/home-manager-modules + config.flake.homeModules.home-manager-modules-all ]; home-manager-base = _: { @@ -34,7 +34,7 @@ common-modules ++ [ home-manager-base - ../legacy-modules/system-modules + config.flake.commonModules.system-modules-all ]; in { systems = ["x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"]; @@ -72,7 +72,7 @@ in { ++ [ sops-nix.darwinModules.sops home-manager.darwinModules.home-manager - ../legacy-modules/darwin-modules + config.flake.darwinModules.darwin-modules-all ({ lib, config, diff --git a/modules/system/default.nix b/modules/system/default.nix new file mode 100644 index 0000000..4d74f98 --- /dev/null +++ b/modules/system/default.nix @@ -0,0 +1,11 @@ +{config, ...}: let + mod = config.flake.commonModules; +in { + flake.commonModules.system-modules-all = { + imports = [ + mod.system-config + mod.nix-development + mod.system-users + ]; + }; +} diff --git a/modules/system/nix-development.nix b/modules/system/nix-development.nix new file mode 100644 index 0000000..c2107b5 --- /dev/null +++ b/modules/system/nix-development.nix @@ -0,0 +1,28 @@ +{...}: { + flake.commonModules.nix-development = { + lib, + pkgs, + config, + inputs, + ... + }: { + options.host.nix-development.enable = lib.mkEnableOption "should desktop configuration be enabled"; + + config = lib.mkMerge [ + { + host.nix-development.enable = lib.mkDefault true; + } + (lib.mkIf config.host.nix-development.enable { + nix = { + nixPath = ["nixpkgs=${inputs.nixpkgs}"]; + }; + environment.systemPackages = with pkgs; [ + # nix language server + nil + # nix formatter + alejandra + ]; + }) + ]; + }; +} diff --git a/modules/system/system.nix b/modules/system/system.nix new file mode 100644 index 0000000..f6d5604 --- /dev/null +++ b/modules/system/system.nix @@ -0,0 +1,9 @@ +{...}: { + flake.commonModules.system-config = { + nix = { + settings = { + experimental-features = ["nix-command" "flakes"]; + }; + }; + }; +} diff --git a/modules/system/users.nix b/modules/system/users.nix new file mode 100644 index 0000000..fe2e1d1 --- /dev/null +++ b/modules/system/users.nix @@ -0,0 +1,115 @@ +{...}: { + flake.commonModules.system-users = { + lib, + config, + ... + }: let + host = config.host; + + hostUsers = host.hostUsers; + principleUsers = host.principleUsers; + in { + options.host = { + users = lib.mkOption { + default = {}; + type = lib.types.attrsOf (lib.types.submodule ({ + config, + name, + ... + }: { + options = { + name = lib.mkOption { + type = lib.types.str; + default = name; + description = '' + What should this users name on the system be + ''; + defaultText = lib.literalExpression "config.host.users.\${name}.name"; + }; + isPrincipleUser = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + User should be configured as root and have ssh access + ''; + defaultText = lib.literalExpression "config.host.users.\${name}.isPrincipleUser"; + }; + isDesktopUser = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + User should install their desktop applications + ''; + defaultText = lib.literalExpression "config.host.users.\${name}.isDesktopUser"; + }; + isTerminalUser = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + User should install their terminal applications + ''; + defaultText = lib.literalExpression "config.host.users.\${name}.isTerminalUser"; + }; + isNormalUser = lib.mkOption { + type = lib.types.bool; + default = config.isDesktopUser || config.isTerminalUser; + description = '' + User should install their applications and can log in + ''; + defaultText = lib.literalExpression "config.host.users.\${name}.isNormalUser"; + }; + }; + })); + }; + hostUsers = lib.mkOption { + default = lib.attrsets.mapAttrsToList (_: user: user) host.users; + }; + principleUsers = lib.mkOption { + default = lib.lists.filter (user: user.isPrincipleUser) hostUsers; + }; + normalUsers = lib.mkOption { + default = lib.lists.filter (user: user.isNormalUser) hostUsers; + }; + desktopUsers = lib.mkOption { + default = lib.lists.filter (user: user.isDesktopUser) hostUsers; + }; + terminalUsers = lib.mkOption { + default = lib.lists.filter (user: user.isTerminalUser) hostUsers; + }; + }; + + config = { + host.users = { + leyla = { + isPrincipleUser = lib.mkDefault false; + isDesktopUser = lib.mkDefault false; + isTerminalUser = lib.mkDefault false; + }; + eve = { + isPrincipleUser = lib.mkDefault false; + isDesktopUser = lib.mkDefault false; + isTerminalUser = lib.mkDefault false; + }; + }; + + assertions = + ( + builtins.map (user: { + assertion = !(user.isPrincipleUser && !user.isNormalUser); + message = '' + Non normal user ${user.name} can not be a principle user. + ''; + }) + hostUsers + ) + ++ [ + { + assertion = (builtins.length principleUsers) > 0; + message = '' + At least one user must be a principle user. + ''; + } + ]; + }; + }; +}