refactor: move last legacy_modules to modules

This commit is contained in:
Nickolaj Jepsen 2025-12-12 04:10:50 +01:00
parent d463f4d1af
commit d50bbb3d12
49 changed files with 580 additions and 459 deletions

View file

@ -63,26 +63,14 @@ in {
laptop = mkSystem { laptop = mkSystem {
hostname = "laptop"; hostname = "laptop";
username = "nickolaj"; username = "nickolaj";
modules = [
../legacy_modules/graphical.nix
../legacy_modules/devenv.nix
];
}; };
desktop = mkSystem { desktop = mkSystem {
hostname = "desktop"; hostname = "desktop";
username = "nickolaj"; username = "nickolaj";
modules = [
../legacy_modules/graphical.nix
../legacy_modules/devenv.nix
];
}; };
work = mkSystem { work = mkSystem {
hostname = "work"; hostname = "work";
username = "nickolaj"; username = "nickolaj";
modules = [
../legacy_modules/graphical.nix
../legacy_modules/devenv.nix
];
}; };
homelab = mkSystem { homelab = mkSystem {
hostname = "homelab"; hostname = "homelab";

View file

@ -1,3 +1,5 @@
{ {
fireproof.desktop.enable = true; fireproof.desktop.enable = true;
} fireproof.work.enable = true;
fireproof.dev.enable = true;
}

View file

@ -3,6 +3,8 @@
lib, lib,
... ...
}: { }: {
fireproof.dev.enable = true;
boot = { boot = {
# Use grub as bootloader as it works better with mdadm # Use grub as bootloader as it works better with mdadm
loader.grub.enable = true; loader.grub.enable = true;

View file

@ -1,3 +0,0 @@
{
fireproof.desktop.enable = true;
}

View file

@ -1,4 +1,7 @@
{pkgs, ...}: { {pkgs, ...}: {
fireproof.desktop.enable = true;
fireproof.work.enable = true;
fireproof.dev.enable = true;
# Enable OpenGL # Enable OpenGL
hardware.graphics = { hardware.graphics = {
enable = true; enable = true;

View file

@ -1,3 +1,5 @@
{ {
fireproof.desktop.enable = true; fireproof.desktop.enable = true;
} fireproof.work.enable = true;
fireproof.dev.enable = true;
}

View file

@ -1,10 +0,0 @@
{pkgsUnstable, ...}: {
fireproof.home-manager.programs.chromium = {
enable = true;
package = pkgsUnstable.chromium;
extensions = [
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
"nngceckbapebfimnlniiiahkandclblb" # Bitwarden
];
};
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.ferdium
];
}

View file

@ -1,62 +0,0 @@
{
pkgsUnstable,
inputs,
pkgs,
...
}: let
nur = inputs.nur.legacyPackages.${pkgs.system};
extensions = nur.repos.rycee.firefox-addons;
in {
programs.firefox = {
enable = true;
package = pkgsUnstable.firefox;
};
xdg.mime.defaultApplications = {
"text/html" = "firefox.desktop";
"x-scheme-handler/http" = "firefox.desktop";
"x-scheme-handler/https" = "firefox.desktop";
"x-scheme-handler/about" = "firefox.desktop";
"x-scheme-handler/unknown" = "firefox.desktop";
};
fireproof.home-manager = {
programs.firefox = {
enable = true;
package = pkgsUnstable.firefox;
profiles.default = {
extensions.packages = with extensions; [
# Privacy
ublock-origin
clearurls
libredirect
smartproxy
# Security
bitwarden
# Media
dearrow
sponsorblock
# Search
kagi-search
# Productivity
new-tab-override
# Social
reddit-enhancement-suite
# Development
react-devtools
refined-github
];
settings = {
"browser.startup.homepage" = "https://flame.nickolaj.com";
};
};
};
};
}

View file

@ -1,50 +0,0 @@
{
pkgs,
config,
...
}: {
environment.systemPackages = with pkgs; [
ghostty
];
fireproof.home-manager = {
programs.ghostty = {
enable = true;
enableFishIntegration = config.programs.fish.enable;
settings = {
window-decoration = false;
theme = "fireproof";
font-size = 11;
font-family = "Hack Nerd Font";
window-inherit-font-size = false;
};
themes = {
fireproof = {
background = "1C1B1A";
cursor-color = "DAD8CE";
foreground = "DAD8CE";
palette = [
"0=#100F0F"
"1=#AF3029"
"2=#66800B"
"3=#AD8301"
"4=#205EA6"
"5=#A02F6F"
"6=#24837B"
"7=#DAD8CE"
"8=#878580"
"9=#D14D41"
"10=#879A39"
"11=#D0A215"
"12=#4385BE"
"13=#CE5D97"
"14=#3AA99F"
"15=#F2F0E5"
];
selection-background = "403E3C";
selection-foreground = "DAD8CE";
};
};
};
};
fireproof.base.defaults.terminal = "ghostty";
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.obsidian
];
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.slack
];
}

View file

@ -1,22 +0,0 @@
{
username,
pkgs,
...
}: {
environment.systemPackages = with pkgs; [
spotify
];
age.secrets.spotify-player = {
rekeyFile = ../../secrets/spotify-player.age;
path = "/home/${username}/.cache/spotify-player/credentials.json";
mode = "0600";
owner = username;
};
fireproof.home-manager = {
programs.spotify-player = {
enable = true;
};
};
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.sublime-merge
];
}

View file

@ -1,128 +0,0 @@
{
pkgsUnstable,
pkgs,
inputs,
config,
lib,
...
}: let
vscodePackage = pkgsUnstable.vscode;
vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
vscodePkgs = vscode-extensions.vscode-marketplace // vscode-extensions.vscode-marketplace-release; # Prefer release over pre-release
mkFormatter = formatter: languages: {
"[${lib.concatStringsSep "][" languages}]" = {
"editor.defaultFormatter" = formatter;
};
};
# I can't get nix-vscode-extensions to respect allowUnfree, so this is a workaround
allowUnfree = ext: ext.override {meta.license = [];};
in {
fireproof.home-manager = {
programs.vscode = {
enable = true;
package = vscodePackage;
profiles.default = {
enableUpdateCheck = true;
enableExtensionUpdateCheck = true;
keybindings = [
{
"key" = "ctrl+shift+p";
"command" = "editor.action.formatDocument";
}
];
userSettings = lib.mkMerge [
{
# General
"extensions.ignoreRecommendations" = true;
"telemetry.telemetryLevel" = "off";
# Editor
"editor.linkedEditing" = true;
"files.exclude" = {
"**/*.egg-info" = true;
"**/__pycache__" = true;
};
"workbench.editor.wrapTabs" = true;
# Files
"files.autoSave" = "afterDelay";
# Remote
"remote.SSH.useLocalServer" = false;
"remote.SSH.remotePlatform" = lib.mapAttrs (_name: _value: "linux") config.fireproof.home-manager.programs.ssh.matchBlocks;
# AI
"github.copilot.enable" = {
"*" = true;
"plaintext" = true;
"markdown" = true;
"scminput" = true;
};
"chat.agent.enabled" = true;
"github.copilot.chat.agent.thinkingTool" = true;
"github.copilot.chat.codesearch.enabled" = true;
"github.copilot.nextEditSuggestions.enabled" = true;
"githubPullRequests.codingAgent.uiIntegration" = true;
"githubPullRequests.pullBranch" = "always";
# Theme
"workbench.colorTheme" = "Darcula Theme from IntelliJ";
"window.titleBarStyle" = "custom";
"editor.fontFamily" = "'Hack Nerd Font', 'Hack', 'monospace', monospace";
# Keybindings
"workbench.commandPalette.experimental.suggestCommands" = true; # Emulates IntelliJ's "Search Everywhere"
# nix-ide
"nix.enableLanguageServer" = true;
"nix.serverPath" = lib.getExe pkgs.nil;
"nix.serverSettings" = {
nil.formatting.command = ["nix" "fmt" "--" "--"];
};
# Other extensions
"biome.suggestInstallingGlobally" = false;
}
(mkFormatter "esbenp.prettier-vscode" ["json" "jsonc" "markdown" "css" "scss" "typescript" "typescriptreact" "html" "yaml"])
(mkFormatter "charliermarsh.ruff" ["python"])
];
extensions = with vscodePkgs; [
# Remote
(allowUnfree ms-vscode-remote.remote-ssh)
# AI
(allowUnfree github.copilot)
(allowUnfree github.copilot-chat)
# Git(hub)
github.vscode-pull-request-github
# Python
ms-pyright.pyright
ms-python.python
charliermarsh.ruff
# JavaScript
dbaeumer.vscode-eslint
esbenp.prettier-vscode
# Nix
jnoortheen.nix-ide
# Other languages
nefrob.vscode-just-syntax
redhat.vscode-yaml
# Theme
trinm1709.dracula-theme-from-intellij
# Keybindings
k--kato.intellij-idea-keybindings
];
};
};
};
}

View file

@ -1,30 +0,0 @@
{pkgsUnstable, ...}: {
fireproof.home-manager.programs.zed-editor = {
enable = true;
package = pkgsUnstable.zed-editor;
extensions = [
"basedpyright"
"biome"
"css-modules-kit"
"dockerfile"
"env"
"fish"
"jetbrains-themes"
"just-ls"
"mcp-server-linear"
"nix"
];
userSettings = {
base_keymap = "JetBrains";
theme = {
mode = "dark";
light = "JetBrains Light";
dark = "JetBrains Dark";
};
ui_font_family = "Hack Nerd Font";
buffer_font_family = "Hack Nerd Font";
buffer_font_size = 13;
buffer_line_height = "standard";
};
};
}

View file

@ -1,6 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.clickhouse
pkgsUnstable.envsubst
];
}

View file

@ -1,11 +0,0 @@
{
pkgs,
pkgsUnstable,
...
}: {
environment.systemPackages = [
pkgs.nodejs
pkgsUnstable.pnpm
pkgs.turbo-unwrapped
];
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.just
];
}

View file

@ -1,30 +0,0 @@
{
pkgs,
username,
config,
...
}: {
environment.systemPackages = [
pkgs.kubectl
];
age.secrets.k8s-ao-dev = {
rekeyFile = ../../secrets/k8s/ao-dev.age;
path = "/home/${username}/.kube/config.ao-dev";
mode = "0600";
owner = username;
};
age.secrets.k8s-ao-prod = {
rekeyFile = ../../secrets/k8s/ao-prod.age;
path = "/home/${username}/.kube/config.ao-prod";
mode = "0600";
owner = username;
};
fireproof.home-manager = {
home.sessionVariables = {
KUBECONFIG = "${config.age.secrets.k8s-ao-dev.path}:${config.age.secrets.k8s-ao-prod.path}:$HOME/.kube/config";
};
};
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.natscli
];
}

View file

@ -1,6 +0,0 @@
{pkgsUnstable, ...}: {
fireproof.home-manager.programs.fish.shellInit = ''
set -xg PLAYWRIGHT_BROWSERS_PATH ${pkgsUnstable.playwright-driver.browsers}
set -xg PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS true
'';
}

View file

@ -1,5 +0,0 @@
{pkgs, ...}: {
environment.systemPackages = [
pkgs.postgresql
];
}

View file

@ -1,5 +0,0 @@
{pkgsUnstable, ...}: {
environment.systemPackages = [
pkgsUnstable.tilt
];
}

View file

@ -1,16 +0,0 @@
{
imports = [
./apps/pycharm.nix
./apps/vscode.nix
./apps/sublime-merge.nix
./dev/python.nix
./dev/javascript.nix
./dev/k8s.nix
./dev/docker.nix
./dev/tilt.nix
./dev/postgres.nix
./dev/clickhouse.nix
./dev/playwright.nix
./dev/nats.nix
];
}

View file

@ -1,12 +0,0 @@
{
imports = [
./apps/spotify.nix
./apps/firefox.nix
./apps/chromium.nix
./apps/zed.nix
./apps/ghostty.nix
./apps/slack.nix
./apps/obsidian.nix
./apps/ferdium.nix
];
}

View file

@ -1,4 +1,8 @@
{ lib, config, ... }: { {
lib,
config,
...
}: {
config = lib.mkIf config.fireproof.desktop.enable { config = lib.mkIf config.fireproof.desktop.enable {
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = { services.pipewire = {

View file

@ -44,7 +44,7 @@ in {
color: #DAD8CE; color: #DAD8CE;
border-bottom: 2px solid #CF6A4C; border-bottom: 2px solid #CF6A4C;
} }
#workspaces button.focused { #workspaces button.focused {
background: #CF6A4C; background: #CF6A4C;
color: #1C1B1A; color: #1C1B1A;

View file

@ -0,0 +1,18 @@
# Enabled when: desktop
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.desktop.enable {
fireproof.home-manager.programs.chromium = {
enable = true;
package = pkgsUnstable.chromium;
extensions = [
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
"nngceckbapebfimnlniiiahkandclblb" # Bitwarden
];
};
};
}

View file

@ -0,0 +1,14 @@
# Enabled when: dev
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
environment.systemPackages = [
pkgsUnstable.clickhouse
pkgsUnstable.envsubst
];
};
}

View file

@ -1,4 +1,9 @@
_: { {lib, ...}: {
options.fireproof = {
work.enable = lib.mkEnableOption "Enable work-related applications and tools";
dev.enable = lib.mkEnableOption "Enable development tools and applications";
};
imports = [ imports = [
./fish/default.nix ./fish/default.nix
./claude.nix ./claude.nix
@ -12,5 +17,29 @@ _: {
./zoxide.nix ./zoxide.nix
./systemd-manager-tui.nix ./systemd-manager-tui.nix
./llm.nix ./llm.nix
# Apps (migrated from legacy_modules/apps)
./chromium.nix
./ferdium.nix
./firefox.nix
./ghostty.nix
./obsidian.nix
./pycharm.nix
./slack.nix
./spotify.nix
./sublime-merge.nix
./vscode.nix
./zed.nix
# Dev tools (migrated from legacy_modules/dev)
./clickhouse.nix
./docker.nix
./javascript.nix
./k8s.nix
./nats.nix
./playwright.nix
./postgres.nix
./python.nix
./tilt.nix
]; ];
} }

View file

@ -1,3 +1,4 @@
# Enabled when: always
{ {
username, username,
pkgs, pkgs,

View file

@ -0,0 +1,13 @@
# Enabled when: desktop & work
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf (config.fireproof.desktop.enable && config.fireproof.work.enable) {
environment.systemPackages = [
pkgsUnstable.ferdium
];
};
}

View file

@ -0,0 +1,67 @@
# Enabled when: desktop
{
config,
lib,
pkgsUnstable,
inputs,
pkgs,
...
}: let
nur = inputs.nur.legacyPackages.${pkgs.system};
extensions = nur.repos.rycee.firefox-addons;
in {
config = lib.mkIf config.fireproof.desktop.enable {
programs.firefox = {
enable = true;
package = pkgsUnstable.firefox;
};
xdg.mime.defaultApplications = {
"text/html" = "firefox.desktop";
"x-scheme-handler/http" = "firefox.desktop";
"x-scheme-handler/https" = "firefox.desktop";
"x-scheme-handler/about" = "firefox.desktop";
"x-scheme-handler/unknown" = "firefox.desktop";
};
fireproof.home-manager = {
programs.firefox = {
enable = true;
package = pkgsUnstable.firefox;
profiles.default = {
extensions.packages = with extensions; [
# Privacy
ublock-origin
clearurls
libredirect
smartproxy
# Security
bitwarden
# Media
dearrow
sponsorblock
# Search
kagi-search
# Productivity
new-tab-override
# Social
reddit-enhancement-suite
# Development
react-devtools
refined-github
];
settings = {
"browser.startup.homepage" = "https://flame.nickolaj.com";
};
};
};
};
};
}

View file

@ -0,0 +1,54 @@
# Enabled when: desktop
{
config,
lib,
pkgs,
...
}: {
config = lib.mkIf config.fireproof.desktop.enable {
environment.systemPackages = with pkgs; [
ghostty
];
fireproof.home-manager = {
programs.ghostty = {
enable = true;
enableFishIntegration = config.programs.fish.enable;
settings = {
window-decoration = false;
theme = "fireproof";
font-size = 11;
font-family = "Hack Nerd Font";
window-inherit-font-size = false;
};
themes = {
fireproof = {
background = "1C1B1A";
cursor-color = "DAD8CE";
foreground = "DAD8CE";
palette = [
"0=#100F0F"
"1=#AF3029"
"2=#66800B"
"3=#AD8301"
"4=#205EA6"
"5=#A02F6F"
"6=#24837B"
"7=#DAD8CE"
"8=#878580"
"9=#D14D41"
"10=#879A39"
"11=#D0A215"
"12=#4385BE"
"13=#CE5D97"
"14=#3AA99F"
"15=#F2F0E5"
];
selection-background = "403E3C";
selection-foreground = "DAD8CE";
};
};
};
};
fireproof.base.defaults.terminal = "ghostty";
};
}

View file

@ -0,0 +1,16 @@
# Enabled when: dev
{
config,
lib,
pkgs,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
environment.systemPackages = [
pkgs.nodejs
pkgsUnstable.pnpm
pkgs.turbo-unwrapped
];
};
}

34
modules/programs/k8s.nix Normal file
View file

@ -0,0 +1,34 @@
# Enabled when: dev
{
config,
lib,
pkgs,
username,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
environment.systemPackages = [
pkgs.kubectl
];
age.secrets.k8s-ao-dev = {
rekeyFile = ../../secrets/k8s/ao-dev.age;
path = "/home/${username}/.kube/config.ao-dev";
mode = "0600";
owner = username;
};
age.secrets.k8s-ao-prod = {
rekeyFile = ../../secrets/k8s/ao-prod.age;
path = "/home/${username}/.kube/config.ao-prod";
mode = "0600";
owner = username;
};
fireproof.home-manager = {
home.sessionVariables = {
KUBECONFIG = "${config.age.secrets.k8s-ao-dev.path}:${config.age.secrets.k8s-ao-prod.path}:$HOME/.kube/config";
};
};
};
}

13
modules/programs/nats.nix Normal file
View file

@ -0,0 +1,13 @@
# Enabled when: dev
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
environment.systemPackages = [
pkgsUnstable.natscli
];
};
}

View file

@ -0,0 +1,13 @@
# Enabled when: desktop
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.desktop.enable {
environment.systemPackages = [
pkgsUnstable.obsidian
];
};
}

View file

@ -0,0 +1,14 @@
# Enabled when: dev
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
fireproof.home-manager.programs.fish.shellInit = ''
set -xg PLAYWRIGHT_BROWSERS_PATH ${pkgsUnstable.playwright-driver.browsers}
set -xg PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS true
'';
};
}

View file

@ -0,0 +1,13 @@
# Enabled when: dev
{
config,
lib,
pkgs,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
environment.systemPackages = [
pkgs.postgresql
];
};
}

View file

@ -1,4 +1,10 @@
{pkgsUnstable, ...}: let # Enabled when: desktop & dev
{
config,
lib,
pkgsUnstable,
...
}: let
pycharmPkg = pkgsUnstable.jetbrains.pycharm-professional.override { pycharmPkg = pkgsUnstable.jetbrains.pycharm-professional.override {
# -Dide.browser.jcef.enabled causes crashes on wayland # -Dide.browser.jcef.enabled causes crashes on wayland
vmopts = '' vmopts = ''
@ -11,7 +17,9 @@
# "github-copilot" # "github-copilot"
# ]; # ];
in { in {
environment.systemPackages = [ config = lib.mkIf (config.fireproof.desktop.enable && config.fireproof.dev.enable) {
pycharmPkg environment.systemPackages = [
]; pycharmPkg
];
};
} }

View file

@ -1,6 +1,8 @@
# Enabled when: dev
{ {
pkgs, config,
lib, lib,
pkgs,
pkgsUnstable, pkgsUnstable,
... ...
}: let }: let
@ -19,17 +21,19 @@
''; '';
}; };
in { in {
environment.systemPackages = [ config = lib.mkIf config.fireproof.dev.enable {
(mkWrapLDLibraryPath pkgsUnstable.uv) environment.systemPackages = [
(mkWrapLDLibraryPath pkgsUnstable.rye) (mkWrapLDLibraryPath pkgsUnstable.uv)
(mkWrapLDLibraryPath pkgs.python3) (mkWrapLDLibraryPath pkgsUnstable.rye)
(mkWrapLDLibraryPath pkgsUnstable.prek) (mkWrapLDLibraryPath pkgs.python3)
]; (mkWrapLDLibraryPath pkgsUnstable.prek)
# uv tool adds executable to $HOME/.local/bin, so add it to PATH
fireproof.home-manager = {
home.sessionPath = [
"$HOME/.local/bin"
]; ];
# uv tool adds executable to $HOME/.local/bin, so add it to PATH
fireproof.home-manager = {
home.sessionPath = [
"$HOME/.local/bin"
];
};
}; };
} }

View file

@ -0,0 +1,13 @@
# Enabled when: desktop & work
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf (config.fireproof.desktop.enable && config.fireproof.work.enable) {
environment.systemPackages = [
pkgsUnstable.slack
];
};
}

View file

@ -0,0 +1,27 @@
# Enabled when: desktop
{
config,
lib,
username,
pkgs,
...
}: {
config = lib.mkIf config.fireproof.desktop.enable {
environment.systemPackages = with pkgs; [
spotify
];
age.secrets.spotify-player = {
rekeyFile = ../../secrets/spotify-player.age;
path = "/home/${username}/.cache/spotify-player/credentials.json";
mode = "0600";
owner = username;
};
fireproof.home-manager = {
programs.spotify-player = {
enable = true;
};
};
};
}

View file

@ -0,0 +1,13 @@
# Enabled when: desktop & dev
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf (config.fireproof.desktop.enable && config.fireproof.dev.enable) {
environment.systemPackages = [
pkgsUnstable.sublime-merge
];
};
}

13
modules/programs/tilt.nix Normal file
View file

@ -0,0 +1,13 @@
# Enabled when: dev
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf config.fireproof.dev.enable {
environment.systemPackages = [
pkgsUnstable.tilt
];
};
}

131
modules/programs/vscode.nix Normal file
View file

@ -0,0 +1,131 @@
# Enabled when: desktop & dev
{
config,
lib,
pkgsUnstable,
pkgs,
inputs,
...
}: let
vscodePackage = pkgsUnstable.vscode;
vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
vscodePkgs = vscode-extensions.vscode-marketplace // vscode-extensions.vscode-marketplace-release; # Prefer release over pre-release
mkFormatter = formatter: languages: {
"[${lib.concatStringsSep "][" languages}]" = {
"editor.defaultFormatter" = formatter;
};
};
# I can't get nix-vscode-extensions to respect allowUnfree, so this is a workaround
allowUnfree = ext: ext.override {meta.license = [];};
in {
config = lib.mkIf (config.fireproof.desktop.enable && config.fireproof.dev.enable) {
fireproof.home-manager = {
programs.vscode = {
enable = true;
package = vscodePackage;
profiles.default = {
enableUpdateCheck = true;
enableExtensionUpdateCheck = true;
keybindings = [
{
"key" = "ctrl+shift+p";
"command" = "editor.action.formatDocument";
}
];
userSettings = lib.mkMerge [
{
# General
"extensions.ignoreRecommendations" = true;
"telemetry.telemetryLevel" = "off";
# Editor
"editor.linkedEditing" = true;
"files.exclude" = {
"**/*.egg-info" = true;
"**/__pycache__" = true;
};
"workbench.editor.wrapTabs" = true;
# Files
"files.autoSave" = "afterDelay";
# Remote
"remote.SSH.useLocalServer" = false;
"remote.SSH.remotePlatform" = lib.mapAttrs (_name: _value: "linux") config.fireproof.home-manager.programs.ssh.matchBlocks;
# AI
"github.copilot.enable" = {
"*" = true;
"plaintext" = true;
"markdown" = true;
"scminput" = true;
};
"chat.agent.enabled" = true;
"github.copilot.chat.agent.thinkingTool" = true;
"github.copilot.chat.codesearch.enabled" = true;
"github.copilot.nextEditSuggestions.enabled" = true;
"githubPullRequests.codingAgent.uiIntegration" = true;
"githubPullRequests.pullBranch" = "always";
# Theme
"workbench.colorTheme" = "Darcula Theme from IntelliJ";
"window.titleBarStyle" = "custom";
"editor.fontFamily" = "'Hack Nerd Font', 'Hack', 'monospace', monospace";
# Keybindings
"workbench.commandPalette.experimental.suggestCommands" = true; # Emulates IntelliJ's "Search Everywhere"
# nix-ide
"nix.enableLanguageServer" = true;
"nix.serverPath" = lib.getExe pkgs.nil;
"nix.serverSettings" = {
nil.formatting.command = ["nix" "fmt" "--" "--"];
};
# Other extensions
"biome.suggestInstallingGlobally" = false;
}
(mkFormatter "esbenp.prettier-vscode" ["json" "jsonc" "markdown" "css" "scss" "typescript" "typescriptreact" "html" "yaml"])
(mkFormatter "charliermarsh.ruff" ["python"])
];
extensions = with vscodePkgs; [
# Remote
(allowUnfree ms-vscode-remote.remote-ssh)
# AI
(allowUnfree github.copilot)
(allowUnfree github.copilot-chat)
# Git(hub)
github.vscode-pull-request-github
# Python
ms-pyright.pyright
ms-python.python
charliermarsh.ruff
# JavaScript
dbaeumer.vscode-eslint
esbenp.prettier-vscode
# Nix
jnoortheen.nix-ide
# Other languages
nefrob.vscode-just-syntax
redhat.vscode-yaml
# Theme
trinm1709.dracula-theme-from-intellij
# Keybindings
k--kato.intellij-idea-keybindings
];
};
};
};
};
}

38
modules/programs/zed.nix Normal file
View file

@ -0,0 +1,38 @@
# Enabled when: desktop & dev
{
config,
lib,
pkgsUnstable,
...
}: {
config = lib.mkIf (config.fireproof.desktop.enable && config.fireproof.dev.enable) {
fireproof.home-manager.programs.zed-editor = {
enable = true;
package = pkgsUnstable.zed-editor;
extensions = [
"basedpyright"
"biome"
"css-modules-kit"
"dockerfile"
"env"
"fish"
"jetbrains-themes"
"just-ls"
"mcp-server-linear"
"nix"
];
userSettings = {
base_keymap = "JetBrains";
theme = {
mode = "dark";
light = "JetBrains Light";
dark = "JetBrains Dark";
};
ui_font_family = "Hack Nerd Font";
buffer_font_family = "Hack Nerd Font";
buffer_font_size = 13;
buffer_line_height = "standard";
};
};
};
}