refactor: moved darwin, home-manager, and system configurations to dendrite pattern
This commit is contained in:
parent
0ea11e0236
commit
149f4f151f
193 changed files with 3284 additions and 3095 deletions
32
modules/home-manager/programs/android-studio.nix
Normal file
32
modules/home-manager/programs/android-studio.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
15
modules/home-manager/programs/anki.nix
Normal file
15
modules/home-manager/programs/anki.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/bitwarden.nix
Normal file
29
modules/home-manager/programs/bitwarden.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/bruno.nix
Normal file
29
modules/home-manager/programs/bruno.nix
Normal file
|
|
@ -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/"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
25
modules/home-manager/programs/calibre.nix
Normal file
25
modules/home-manager/programs/calibre.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
30
modules/home-manager/programs/davinci-resolve.nix
Normal file
30
modules/home-manager/programs/davinci-resolve.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/dbeaver.nix
Normal file
29
modules/home-manager/programs/dbeaver.nix
Normal file
|
|
@ -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/"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
59
modules/home-manager/programs/default.nix
Normal file
59
modules/home-manager/programs/default.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}
|
||||
19
modules/home-manager/programs/discord.nix
Normal file
19
modules/home-manager/programs/discord.nix
Normal file
|
|
@ -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/"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
26
modules/home-manager/programs/dungeon-draft.nix
Normal file
26
modules/home-manager/programs/dungeon-draft.nix
Normal file
|
|
@ -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.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/e621-downloader.nix
Normal file
18
modules/home-manager/programs/e621-downloader.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
43
modules/home-manager/programs/firefox.nix
Normal file
43
modules/home-manager/programs/firefox.nix
Normal file
|
|
@ -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")
|
||||
)
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/freecad.nix
Normal file
29
modules/home-manager/programs/freecad.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/gdx-liftoff.nix
Normal file
18
modules/home-manager/programs/gdx-liftoff.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/gimp.nix
Normal file
29
modules/home-manager/programs/gimp.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
26
modules/home-manager/programs/guild-wars-2.nix
Normal file
26
modules/home-manager/programs/guild-wars-2.nix
Normal file
|
|
@ -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.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
34
modules/home-manager/programs/idea.nix
Normal file
34
modules/home-manager/programs/idea.nix
Normal file
|
|
@ -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/"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/inkscape.nix
Normal file
29
modules/home-manager/programs/inkscape.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
37
modules/home-manager/programs/kdenlive.nix
Normal file
37
modules/home-manager/programs/kdenlive.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
25
modules/home-manager/programs/kicad.nix
Normal file
25
modules/home-manager/programs/kicad.nix
Normal file
|
|
@ -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:
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
30
modules/home-manager/programs/krita.nix
Normal file
30
modules/home-manager/programs/krita.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/libreoffice.nix
Normal file
29
modules/home-manager/programs/libreoffice.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
43
modules/home-manager/programs/makemkv.nix
Normal file
43
modules/home-manager/programs/makemkv.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
31
modules/home-manager/programs/mapillary-uploader.nix
Normal file
31
modules/home-manager/programs/mapillary-uploader.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
58
modules/home-manager/programs/matrix-cyberia-pwa.nix
Normal file
58
modules/home-manager/programs/matrix-cyberia-pwa.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/mfoc.nix
Normal file
18
modules/home-manager/programs/mfoc.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/noisetorch.nix
Normal file
18
modules/home-manager/programs/noisetorch.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
20
modules/home-manager/programs/noita-entangled-worlds.nix
Normal file
20
modules/home-manager/programs/noita-entangled-worlds.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
19
modules/home-manager/programs/obs.nix
Normal file
19
modules/home-manager/programs/obs.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
19
modules/home-manager/programs/obsidian.nix
Normal file
19
modules/home-manager/programs/obsidian.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
37
modules/home-manager/programs/olympus.nix
Normal file
37
modules/home-manager/programs/olympus.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/onionshare.nix
Normal file
18
modules/home-manager/programs/onionshare.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/openrgb.nix
Normal file
29
modules/home-manager/programs/openrgb.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/openvpn.nix
Normal file
18
modules/home-manager/programs/openvpn.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/pdfarranger.nix
Normal file
18
modules/home-manager/programs/pdfarranger.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/picard.nix
Normal file
29
modules/home-manager/programs/picard.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/piper.nix
Normal file
18
modules/home-manager/programs/piper.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/prostudiomasters.nix
Normal file
29
modules/home-manager/programs/prostudiomasters.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
57
modules/home-manager/programs/proton-calendar-pwa.nix
Normal file
57
modules/home-manager/programs/proton-calendar-pwa.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
57
modules/home-manager/programs/proton-mail-pwa.nix
Normal file
57
modules/home-manager/programs/proton-mail-pwa.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
30
modules/home-manager/programs/protonvpn.nix
Normal file
30
modules/home-manager/programs/protonvpn.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
18
modules/home-manager/programs/proxmark3.nix
Normal file
18
modules/home-manager/programs/proxmark3.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/qbittorrent.nix
Normal file
29
modules/home-manager/programs/qbittorrent.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/qflipper.nix
Normal file
29
modules/home-manager/programs/qflipper.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/signal.nix
Normal file
29
modules/home-manager/programs/signal.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
37
modules/home-manager/programs/steam.nix
Normal file
37
modules/home-manager/programs/steam.nix
Normal file
|
|
@ -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
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/tor-browser.nix
Normal file
29
modules/home-manager/programs/tor-browser.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/ungoogled-chromium.nix
Normal file
29
modules/home-manager/programs/ungoogled-chromium.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
30
modules/home-manager/programs/via.nix
Normal file
30
modules/home-manager/programs/via.nix
Normal file
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]);
|
||||
};
|
||||
}
|
||||
38
modules/home-manager/programs/vmware-workstation.nix
Normal file
38
modules/home-manager/programs/vmware-workstation.nix
Normal file
|
|
@ -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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
]
|
||||
);
|
||||
};
|
||||
}
|
||||
26
modules/home-manager/programs/vortex.nix
Normal file
26
modules/home-manager/programs/vortex.nix
Normal file
|
|
@ -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.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
47
modules/home-manager/programs/vscode/aiCode.nix
Normal file
47
modules/home-manager/programs/vscode/aiCode.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
36
modules/home-manager/programs/vscode/alejandra.nix
Normal file
36
modules/home-manager/programs/vscode/alejandra.nix
Normal file
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/astroVscode.nix
Normal file
29
modules/home-manager/programs/vscode/astroVscode.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/atomKeybindings.nix
Normal file
29
modules/home-manager/programs/vscode/atomKeybindings.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/autoRenameTag.nix
Normal file
29
modules/home-manager/programs/vscode/autoRenameTag.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
239
modules/home-manager/programs/vscode/claudeDev.nix
Normal file
239
modules/home-manager/programs/vscode/claudeDev.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
})
|
||||
];
|
||||
};
|
||||
}
|
||||
42
modules/home-manager/programs/vscode/conventionalCommits.nix
Normal file
42
modules/home-manager/programs/vscode/conventionalCommits.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
35
modules/home-manager/programs/vscode/default.nix
Normal file
35
modules/home-manager/programs/vscode/default.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}
|
||||
27
modules/home-manager/programs/vscode/direnv.nix
Normal file
27
modules/home-manager/programs/vscode/direnv.nix
Normal file
|
|
@ -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];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/es7ReactJsSnippets.nix
Normal file
29
modules/home-manager/programs/vscode/es7ReactJsSnippets.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/evenBetterToml.nix
Normal file
29
modules/home-manager/programs/vscode/evenBetterToml.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
36
modules/home-manager/programs/vscode/go.nix
Normal file
36
modules/home-manager/programs/vscode/go.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/graphql.nix
Normal file
29
modules/home-manager/programs/vscode/graphql.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/liveServer.nix
Normal file
29
modules/home-manager/programs/vscode/liveServer.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/nearley.nix
Normal file
29
modules/home-manager/programs/vscode/nearley.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
31
modules/home-manager/programs/vscode/nixIde.nix
Normal file
31
modules/home-manager/programs/vscode/nixIde.nix
Normal file
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
32
modules/home-manager/programs/vscode/oneDark.nix
Normal file
32
modules/home-manager/programs/vscode/oneDark.nix
Normal file
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
51
modules/home-manager/programs/vscode/openDyslexicFont.nix
Normal file
51
modules/home-manager/programs/vscode/openDyslexicFont.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/openRemoteSsh.nix
Normal file
29
modules/home-manager/programs/vscode/openRemoteSsh.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
32
modules/home-manager/programs/vscode/platformIO.nix
Normal file
32
modules/home-manager/programs/vscode/platformIO.nix
Normal file
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/rustAnalyzer.nix
Normal file
29
modules/home-manager/programs/vscode/rustAnalyzer.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/tauriVscode.nix
Normal file
29
modules/home-manager/programs/vscode/tauriVscode.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/vitest.nix
Normal file
29
modules/home-manager/programs/vscode/vitest.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/vscodeEslint.nix
Normal file
29
modules/home-manager/programs/vscode/vscodeEslint.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/vscodeJest.nix
Normal file
29
modules/home-manager/programs/vscode/vscodeJest.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/vscodeMdx.nix
Normal file
29
modules/home-manager/programs/vscode/vscodeMdx.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/vscodeStandard.nix
Normal file
29
modules/home-manager/programs/vscode/vscodeStandard.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/home-manager/programs/vscode/vscodeStylelint.nix
Normal file
29
modules/home-manager/programs/vscode/vscodeStylelint.nix
Normal file
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue