caesium: thunderbird and vscode updates

This commit is contained in:
2026-08-06 23:38:26 -04:00
parent bf09e6cabb
commit 7fb8488730
13 changed files with 445 additions and 292 deletions
+29 -13
View File
@@ -1,38 +1,54 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { config
, lib
, modulesPath
, ...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "nvme" "ahci" "xhci_pci" "thunderbolt" "usbhid" "usb_storage" "sd_mod" "sr_mod" ]; boot.initrd.availableKernelModules = [
"nvme"
"ahci"
"xhci_pci"
"thunderbolt"
"usbhid"
"usb_storage"
"sd_mod"
"sr_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92"; device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@" ]; options = [ "subvol=@" ];
}; };
fileSystems."/nix" = fileSystems."/nix" = {
{ device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92"; device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@nix" ]; options = [ "subvol=@nix" ];
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/038C-E1E1"; device = "/dev/disk/by-uuid/038C-E1E1";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
"fmask=0022"
"dmask=0022"
];
}; };
fileSystems."/home" = fileSystems."/home" = {
{ device = "/dev/disk/by-uuid/ddbb8d84-7704-45a0-93b4-7d38905755f3"; device = "/dev/disk/by-uuid/ddbb8d84-7704-45a0-93b4-7d38905755f3";
fsType = "ext4"; fsType = "ext4";
}; };
+13 -16
View File
@@ -1,4 +1,9 @@
{ config, inputs, lib, pkgs, ... }: { { config, pkgs, ... }: {
imports = [
./programs.vscode.nix
./programs.thunderbird.nix
];
home.packages = with pkgs; [ home.packages = with pkgs; [
firefox firefox
@@ -6,32 +11,23 @@
faugus-launcher faugus-launcher
]; ];
systemd.user.sessionVariables = {
## Required to fix firefox unrendered addressbar and tabs
XDG_DATA_DIRS = "${config.home.homeDirectory}/.nix-profile/share:/usr/local/share:/usr/share";
};
services.flatpak = { services.flatpak = {
enable = true;
packages = [ packages = [
"com.spotify.Client" "com.spotify.Client"
"com.discordapp.Discord" "com.discordapp.Discord"
"flathub:app/com.anthropic.Claude/x86_64/stable"
]; ];
overrides = [];
}; };
programs.zsh.shellAliases = { programs.zsh.shellAliases = {
claude = "nix run github:sadjow/claude-code-nix"; claude = "nix run github:sadjow/claude-code-nix";
}; };
programs.vscode = {
enable = true;
package = pkgs.vscode-fhs;
profiles.default = {
userSettings = builtins.fromJSON (builtins.readFile ./config.vscode.settings.json);
extensions = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
bbenoist.nix
vscode-icons-team.vscode-icons
waderyan.gitblame
];
};
};
home.sessionVariables = { home.sessionVariables = {
NPM_CONFIG_PREFIX = "/mnt/Projects/.npm-global/.npm-global"; NPM_CONFIG_PREFIX = "/mnt/Projects/.npm-global/.npm-global";
}; };
@@ -44,3 +40,4 @@
prefix=/mnt/Projects/.npm-global/.npm-global prefix=/mnt/Projects/.npm-global/.npm-global
''; '';
} }
+41 -8
View File
@@ -1,4 +1,4 @@
{ config, pkgs, ... }: { pkgs, ... }:
{ {
imports = [ imports = [
@@ -8,7 +8,10 @@
time.timeZone = "America/New_York"; time.timeZone = "America/New_York";
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# --- BOOTLOADER --- # --- BOOTLOADER ---
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
@@ -44,19 +47,30 @@
# Primary Swap: Compressed RAM (Fastest) # Primary Swap: Compressed RAM (Fastest)
zramSwap.enable = true; zramSwap.enable = true;
zramSwap.memoryPercent = 25; zramSwap.memoryPercent = 25;
systemd.oomd.enable = true;
services.earlyoom.enable = true;
services.earlyoom.freeMemThreshold = 5; # trigger at 5% free RAM
services.earlyoom.freeSwapThreshold = 10; # trigger at 10% free swap
# Secondary Swap: 16GB File on Alpha (Safety Net) # Secondary Swap: 16GB File on Alpha (Safety Net)
swapDevices = [ { swapDevices = [
{
device = "/var/lib/swapfile"; device = "/var/lib/swapfile";
size = 16 * 1024; # 16GB size = 16 * 1024; # 16GB
} ]; }
];
# --- USER & GROUPS --- # --- USER & GROUPS ---
users.groups.storage = { }; users.groups.storage = { };
users.users.mbessette = { users.users.mbessette = {
isNormalUser = true; isNormalUser = true;
shell = pkgs.zsh; shell = pkgs.zsh;
extraGroups = [ "wheel" "networkmanager" "storage" "docker" ]; extraGroups = [
"wheel"
"networkmanager"
"storage"
"docker"
];
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILsZW38Ad1GAhGgfo7LsBzt6M4oo30VafsmNrILPMVio" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILsZW38Ad1GAhGgfo7LsBzt6M4oo30VafsmNrILPMVio"
]; ];
@@ -66,17 +80,29 @@
# Note: The UUIDs stay in hardware-configuration.nix. # Note: The UUIDs stay in hardware-configuration.nix.
# We only list them here if we want to add specific options like compression. # We only list them here if we want to add specific options like compression.
fileSystems."/nix".options = [ "subvol=@nix" "compress=zstd" "noatime" ]; fileSystems."/nix".options = [
"subvol=@nix"
"compress=zstd"
"noatime"
];
fileSystems."/mnt/bottles" = { fileSystems."/mnt/bottles" = {
device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92"; # Use the same Alpha UUID device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92"; # Use the same Alpha UUID
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@bottles" "compress=zstd" "noatime" ]; options = [
"subvol=@bottles"
"compress=zstd"
"noatime"
];
}; };
fileSystems."/mnt/steam-games" = { fileSystems."/mnt/steam-games" = {
device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92"; device = "/dev/disk/by-uuid/9523b80b-8a1f-4784-9750-9b8fadf91b92";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@steam" "compress=zstd" "noatime" ]; options = [
"subvol=@steam"
"compress=zstd"
"noatime"
];
}; };
fileSystems."/mnt/Projects" = { fileSystems."/mnt/Projects" = {
@@ -157,6 +183,13 @@
}; };
# --- PROGRAMS --- # --- PROGRAMS ---
services.printing = {
enable = true;
drivers = [
pkgs.hplip
];
};
programs.zsh.enable = true; programs.zsh.enable = true;
programs.steam = { programs.steam = {
+26 -9
View File
@@ -1,4 +1,7 @@
{ pkgs, lib, inputs, ... }: { pkgs
, lib
, ...
}:
let let
ansibleRequired = { ansibleRequired = {
taps = [ taps = [
@@ -47,7 +50,8 @@ let
# "jetbrains-toolbox" # "jetbrains-toolbox"
]; ];
}; };
in { in
{
ids.gids.nixbld = 350; ids.gids.nixbld = 350;
security.pam.services.sudo_local.touchIdAuth = true; security.pam.services.sudo_local.touchIdAuth = true;
@@ -74,7 +78,11 @@ in {
]; ];
# Add Homebrew to PATH # Add Homebrew to PATH
environment.systemPath = [ "/opt/homebrew/bin" "/opt/homebrew/sbin" "/Users/matthew.bessette/.local/bin" ]; environment.systemPath = [
"/opt/homebrew/bin"
"/opt/homebrew/sbin"
"/Users/matthew.bessette/.local/bin"
];
system.primaryUser = "matthew.bessette"; system.primaryUser = "matthew.bessette";
users.users."matthew.bessette" = { users.users."matthew.bessette" = {
@@ -95,18 +103,26 @@ in {
# Each list is (ansible-managed set) ++ (nix-only extras), deduped. With # Each list is (ansible-managed set) ++ (nix-only extras), deduped. With
# cleanup = "uninstall" above, anything NOT listed here gets removed on # cleanup = "uninstall" above, anything NOT listed here gets removed on
# activation — so ansibleRequired must be merged in or nix would clobber it. # activation — so ansibleRequired must be merged in or nix would clobber it.
taps = lib.unique (ansibleRequired.taps ++ [ taps = lib.unique (
ansibleRequired.taps
++ [
# nix-only taps go here # nix-only taps go here
]); ]
brews = lib.unique (ansibleRequired.brews ++ [ );
brews = lib.unique (
ansibleRequired.brews
++ [
"biome" "biome"
"jira-cli" "jira-cli"
"treehouse" "treehouse"
]); ]
);
# visual-studio-code is installed by Homebrew (in ansibleRequired.casks) so # visual-studio-code is installed by Homebrew (in ansibleRequired.casks) so
# Homebrew owns the .app; home-manager (cleo.home.nix) owns settings + # Homebrew owns the .app; home-manager (cleo.home.nix) owns settings +
# extensions only (programs.vscode with package = null) — no second copy. # extensions only (programs.vscode with package = null) — no second copy.
casks = lib.unique (ansibleRequired.casks ++ [ casks = lib.unique (
ansibleRequired.casks
++ [
"android-commandlinetools" "android-commandlinetools"
"android-platform-tools" "android-platform-tools"
"bruno" "bruno"
@@ -121,7 +137,8 @@ in {
"spotify" "spotify"
"yubico-yubikey-manager" "yubico-yubikey-manager"
"zoom" "zoom"
]); ]
);
masApps = { masApps = {
BetterSnapTool = 417375580; BetterSnapTool = 417375580;
+4 -89
View File
@@ -1,47 +1,11 @@
{ config, lib, pkgs, inputs, ... }: { config, pkgs, inputs, ... }:
let
oldPkgs = import inputs.nixpkgs-nodejs {
system = pkgs.stdenv.hostPlatform.system;
config.allowUnfree = true;
};
in
{ {
home.username = "matthew.bessette"; imports = [
home.homeDirectory = "/Users/matthew.bessette"; ./programs.vscode.nix
];
home.packages = with pkgs; [ ]; home.packages = with pkgs; [ ];
programs.vscode = {
enable = true;
mutableExtensionsDir = false;
profiles.default = {
userSettings = builtins.fromJSON (builtins.readFile ./config.vscode.settings.json);
extensions = (
with pkgs.vscode-marketplace-release; [
bbenoist.nix
graphql.vscode-graphql-syntax
graphql.vscode-graphql
ms-python.debugpy
ms-python.python
ms-python.vscode-pylance
oxc.oxc-vscode
vscode-icons-team.vscode-icons
typescriptteam.native-preview
waderyan.gitblame
]
) ++ (
with pkgs.vscode-marketplace; [
biomejs.biome
]
);
};
};
# mise runtime manager — installed by nix. Zsh integration is disabled
# because `mise activate zsh` registers a precmd hook that re-evaluates the
# environment before every prompt, causing a per-command shell delay.
# Tools still resolve via shims on PATH (see home.sessionPath below); this
# trades away mise's per-directory env-var auto-loading for prompt speed.
programs.mise = { programs.mise = {
enable = true; enable = true;
enableZshIntegration = false; enableZshIntegration = false;
@@ -110,22 +74,9 @@ in
prefix=${config.home.homeDirectory}/.npm-global prefix=${config.home.homeDirectory}/.npm-global
''; '';
# Stub Android SDK directory so ANDROID_HOME/platform-tools/adb resolves to
# the adb binary installed by the android-platform-tools Homebrew cask.
home.file."android-sdk/platform-tools/adb".source = config.lib.file.mkOutOfStoreSymlink "/opt/homebrew/bin/adb"; home.file."android-sdk/platform-tools/adb".source = config.lib.file.mkOutOfStoreSymlink "/opt/homebrew/bin/adb";
home.file."android-sdk/cmdline-tools/latest/bin/sdkmanager".source = config.lib.file.mkOutOfStoreSymlink "/opt/homebrew/bin/sdkmanager"; home.file."android-sdk/cmdline-tools/latest/bin/sdkmanager".source = config.lib.file.mkOutOfStoreSymlink "/opt/homebrew/bin/sdkmanager";
xdg.configFile."oxlint/oxlintrc.json".source = config.lib.file.mkOutOfStoreSymlink "/Users/matthew.bessette/nixos/config.oxlintrc.json";
xdg.configFile."biome/biome.json".source = config.lib.file.mkOutOfStoreSymlink "/Users/matthew.bessette/nixos/config.biome.json";
# --- Tool config parity with local-dev-ansible (tasks/config/*) ---
# Note: ~/.aws/config is intentionally NOT managed here — `aws-sso-util configure
# populate` must rewrite it at runtime, which a read-only nix symlink would block.
# Run once after switch:
# aws-sso-util configure populate \
# --sso-start-url https://d-9067516d20.awsapps.com/start \
# --sso-region us-east-1 --region us-east-1 --config-default output=json
# GitHub Copilot CLI (tasks/config/copilot.yml)
home.file.".copilot/settings.json".text = builtins.toJSON { home.file.".copilot/settings.json".text = builtins.toJSON {
footer = { footer = {
showModelEffort = true; showModelEffort = true;
@@ -156,40 +107,4 @@ in
tuiSidebarPanel.enabled = true; tuiSidebarPanel.enabled = true;
maintainerAnnouncements = { enabled = false; home = false; }; maintainerAnnouncements = { enabled = false; home = false; };
}; };
# Claude Code settings (tasks/config/claude-code.yml) — cleo-scoped override of the
# shared config.claude.json, since claude-statusline is only installed on cleo.
# mkForce wins over home.shared.nix's `.source = ./config.claude.json`.
xdg.configFile."claude/settings.json".source = lib.mkForce (pkgs.writeText "claude-settings.json" (builtins.toJSON {
"$schema" = "https://json.schemastore.org/claude-code-settings.json";
theme = "dark";
agent = "plan";
denyCommands = [ "code --install-extension*" ];
additionalDirectories = [ "/tmp" ];
autoMemoryEnabled = false;
effortLevel = "medium";
fastModePerSessionOptIn = true;
feedbackSurveyRate = 0;
model = "opusplan";
showClearContextOnPlanAccept = false;
statusLine = { type = "command"; command = "claude-statusline prompt"; };
}));
xdg.configFile."claude-statusline/config.toml".text = ''
format = "$directory | $git_branch | $model | $cost | $context | $usage"
preset = "default"
[usage]
disabled = false
format = 'S: {{printf "%.0f" .BlockPct}}% ({{.BlockResets}}) | W: {{printf "%.0f" .WeeklyPct}}%'
'';
xdg.configFile."1Password/ssh/agent.toml".text = lib.mkForce ''
[[ssh-keys]]
item = "Cleo SSH Key"
vault = "Cleo"
[[ssh-keys]]
item = "Personal SSH Key"
vault = "Private"
'';
} }
-6
View File
@@ -1,6 +0,0 @@
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"theme": "dark",
"agent": "plan",
"denyCommands": ["code --install-extension*"]
}
+13
View File
@@ -32,6 +32,19 @@
"source.organizeImports": "explicit" "source.organizeImports": "explicit"
} }
}, },
"[nix]": {
"editor.defaultFormatter": "jnoortheen.nix-ide",
"editor.formatOnSave": true
},
"nix.enableLanguageServer": true,
"nix.serverPath": "nixd",
"nix.serverSettings": {
"nixd": {
"formatting": {
"command": ["treefmt", "--stdin", "buffer.nix"]
}
}
},
"js/ts.updateImportsOnPaste.enabled": true, "js/ts.updateImportsOnPaste.enabled": true,
"js/ts.preferences.importModuleSpecifier": "relative", "js/ts.preferences.importModuleSpecifier": "relative",
"git.openRepositoryInParentFolders": "never", "git.openRepositoryInParentFolders": "never",
+28 -14
View File
@@ -42,17 +42,15 @@
nixpkgs-nodejs.url = "github:NixOS/nixpkgs/21808d22b1cda1898b71cf1a1beb524a97add2c4"; nixpkgs-nodejs.url = "github:NixOS/nixpkgs/21808d22b1cda1898b71cf1a1beb524a97add2c4";
}; };
outputs = inputs @ { outputs =
self, inputs@{
nixpkgs, nixpkgs,
nixpkgsUnstable, nixpkgsUnstable,
nixos-hardware,
home-manager, home-manager,
home-manager-darwin, home-manager-darwin,
nix-darwin, nix-darwin,
mac-app-util, mac-app-util,
nix-flatpak, nix-flatpak,
nixpkgs-nodejs,
... ...
}: }:
let let
@@ -71,12 +69,16 @@
}; };
}) })
]; ];
in { in
{
# ------------------------------------------------------------- # -------------------------------------------------------------
# NixOS Configuration (Linux) # NixOS Configuration (Linux)
# ------------------------------------------------------------- # -------------------------------------------------------------
nixosConfigurations.caesium = nixpkgs.lib.nixosSystem { nixosConfigurations.caesium = nixpkgs.lib.nixosSystem {
specialArgs = { system = linuxSystem; inherit inputs; }; specialArgs = {
system = linuxSystem;
inherit inputs;
};
modules = [ modules = [
{ {
nixpkgs.overlays = mkOverlays linuxSystem; nixpkgs.overlays = mkOverlays linuxSystem;
@@ -90,7 +92,10 @@
# nix-darwin Configuration (macOS) # nix-darwin Configuration (macOS)
# ------------------------------------------------------------- # -------------------------------------------------------------
darwinConfigurations.cleo-darwin = nix-darwin.lib.darwinSystem { darwinConfigurations.cleo-darwin = nix-darwin.lib.darwinSystem {
specialArgs = { system = darwinSystem; inherit inputs; }; specialArgs = {
system = darwinSystem;
inherit inputs;
};
system = darwinSystem; system = darwinSystem;
modules = [ modules = [
{ {
@@ -103,7 +108,10 @@
}; };
darwinConfigurations.hydrogen = nix-darwin.lib.darwinSystem { darwinConfigurations.hydrogen = nix-darwin.lib.darwinSystem {
specialArgs = { system = darwinSystem; inherit inputs; }; specialArgs = {
system = darwinSystem;
inherit inputs;
};
system = darwinSystem; system = darwinSystem;
modules = [ modules = [
{ {
@@ -118,13 +126,15 @@
# ------------------------------------------------------------- # -------------------------------------------------------------
# Homemanager configuration # Homemanager configuration
# ------------------------------------------------------------- # -------------------------------------------------------------
homeConfigurations."mbessette@caesium" = let homeConfigurations."mbessette@caesium" =
let
pkgs = import nixpkgs { pkgs = import nixpkgs {
system = linuxSystem; system = linuxSystem;
config.allowUnfree = true; config.allowUnfree = true;
overlays = mkOverlays linuxSystem; overlays = mkOverlays linuxSystem;
}; };
in home-manager.lib.homeManagerConfiguration { in
home-manager.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
extraSpecialArgs = { extraSpecialArgs = {
system = linuxSystem; system = linuxSystem;
@@ -139,13 +149,15 @@
]; ];
}; };
homeConfigurations."mbessette@hydrogen" = let homeConfigurations."mbessette@hydrogen" =
let
pkgs = import nixpkgsUnstable { pkgs = import nixpkgsUnstable {
system = darwinSystem; system = darwinSystem;
config.allowUnfree = true; config.allowUnfree = true;
overlays = mkOverlays darwinSystem; overlays = mkOverlays darwinSystem;
}; };
in home-manager-darwin.lib.homeManagerConfiguration { in
home-manager-darwin.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
extraSpecialArgs = { extraSpecialArgs = {
system = darwinSystem; system = darwinSystem;
@@ -160,13 +172,15 @@
]; ];
}; };
homeConfigurations."matthew.bessette@cleo-darwin" = let homeConfigurations."matthew.bessette@cleo-darwin" =
let
pkgs = import nixpkgsUnstable { pkgs = import nixpkgsUnstable {
system = darwinSystem; system = darwinSystem;
config.allowUnfree = true; config.allowUnfree = true;
overlays = mkOverlays darwinSystem; overlays = mkOverlays darwinSystem;
}; };
in home-manager-darwin.lib.homeManagerConfiguration { in
home-manager-darwin.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
extraSpecialArgs = { extraSpecialArgs = {
system = darwinSystem; system = darwinSystem;
+53 -12
View File
@@ -1,34 +1,75 @@
{ config, lib, pkgs, hostname, userConfig, ... }: {
config,
lib,
pkgs,
hostname,
userConfig,
...
}:
let let
onePassPath = if pkgs.stdenv.isDarwin onePassPath =
then "${userConfig.homeDirectory}/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock" if pkgs.stdenv.isDarwin then
else "${userConfig.homeDirectory}/.1password/agent.sock"; "${userConfig.homeDirectory}/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
ghosttyPkg = if pkgs.stdenv.isDarwin else
then pkgs."ghostty-bin" "${userConfig.homeDirectory}/.1password/agent.sock";
else pkgs.ghostty; ghosttyPkg = if pkgs.stdenv.isDarwin then pkgs."ghostty-bin" else pkgs.ghostty;
rebuildCmd = if pkgs.stdenv.isDarwin rebuildCmd = if pkgs.stdenv.isDarwin then "darwin-rebuild" else "nixos-rebuild";
then "darwin-rebuild" in
else "nixos-rebuild"; {
in {
home.stateVersion = lib.mkDefault "26.05"; home.stateVersion = lib.mkDefault "26.05";
home.username = userConfig.username; home.username = userConfig.username;
home.homeDirectory = userConfig.homeDirectory; home.homeDirectory = userConfig.homeDirectory;
home.sessionVariables.SSH_AUTH_SOCK = onePassPath; home.sessionVariables.SSH_AUTH_SOCK = onePassPath;
home.sessionVariables.CLAUDE_CONFIG_DIR = "${config.xdg.configHome}/claude"; home.sessionVariables.CLAUDE_CONFIG_DIR = "${config.xdg.configHome}/claude";
home.packages = with pkgs; [
nixd
treefmt
nixpkgs-fmt
deadnix
];
xdg.enable = true; xdg.enable = true;
xdg.configHome = "${config.home.homeDirectory}/.config"; xdg.configHome = "${config.home.homeDirectory}/.config";
xdg.cacheHome = "${config.home.homeDirectory}/.cache"; xdg.cacheHome = "${config.home.homeDirectory}/.cache";
xdg.dataHome = "${config.home.homeDirectory}/.local/share"; xdg.dataHome = "${config.home.homeDirectory}/.local/share";
xdg.stateHome = "${config.home.homeDirectory}/.config/state"; xdg.stateHome = "${config.home.homeDirectory}/.config/state";
xdg.configFile."ssh.conf".source = ./config.ssh.conf; xdg.configFile."ssh.conf".source = ./config.ssh.conf;
xdg.configFile."claude/settings.json".source = ./config.claude.json;
xdg.configFile."1Password/ssh/agent.toml".text = '' xdg.configFile."1Password/ssh/agent.toml".text = ''
[[ssh-keys]] [[ssh-keys]]
item = "${userConfig._1PassKeyName}" item = "${userConfig._1PassKeyName}"
vault = "${userConfig._1PassKeyVault}" vault = "${userConfig._1PassKeyVault}"
''; '';
xdg.configFile."claude/settings.json".source = pkgs.writeText "claude-settings.json" (
builtins.toJSON {
"$schema" = "https://json.schemastore.org/claude-code-settings.json";
theme = "dark";
agent = "plan";
denyCommands = [ "code --install-extension*" ];
additionalDirectories = [ "/tmp" ];
autoMemoryEnabled = false;
effortLevel = "medium";
fastModePerSessionOptIn = true;
feedbackSurveyRate = 0;
model = "opusplan";
showClearContextOnPlanAccept = false;
statusLine = {
type = "command";
command = "claude-statusline prompt";
};
}
);
xdg.configFile."claude-statusline/config.toml".text = ''
format = "$directory | $git_branch | $model | $cost | $context | $usage"
preset = "default"
[usage]
disabled = false
format = 'S: {{printf "%.0f" .BlockPct}}% ({{.BlockResets}}) | W: {{printf "%.0f" .WeeklyPct}}%'
'';
programs.tmux.enable = true; programs.tmux.enable = true;
programs.fastfetch.enable = true; programs.fastfetch.enable = true;
+3 -12
View File
@@ -1,17 +1,8 @@
{ config, inputs, pkgs, ... }: { { config, inputs, pkgs, ... }: {
imports = [
# Managed VS Code Extensions (The "Clean" Way) ./programs.vscode.nix
programs.vscode = { ./programs.thunderbird.nix
enable = true;
profiles.default = {
userSettings = builtins.fromJSON (builtins.readFile ./config.vscode.settings.json);
extensions = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
bbenoist.nix
vscode-icons-team.vscode-icons
waderyan.gitblame
]; ];
};
};
home.sessionVariables = { home.sessionVariables = {
# Points to the Homebrew location mentioned in your caveat # Points to the Homebrew location mentioned in your caveat
+80
View File
@@ -0,0 +1,80 @@
{ pkgs, ... }:
let
tbPkg = if pkgs.stdenv.isDarwin then pkgs.thunderbird-bin else pkgs.thunderbird;
mkGmailAccount = address: realName: {
inherit address realName;
flavor = "gmail.com";
thunderbird.enable = true;
};
mkCalendar = collection: {
remote = {
type = "caldav";
url = "https://cloud.thiccdata.io/remote.php/dav/calendars/mbessette/${collection}/";
userName = "mbessette";
};
};
mkAddressBook = book: {
remote = {
type = "carddav";
url = "https://cloud.thiccdata.io/remote.php/dav/addressbooks/users/mbessette/${book}/";
userName = "mbessette";
};
thunderbird.enable = true;
};
in
{
programs.thunderbird = {
enable = true;
package = tbPkg;
profiles.default = {
isDefault = true;
accountsOrder = [ "personal" ];
};
};
accounts.calendar.basePath = ".calendars";
accounts.contact.basePath = ".contacts";
accounts.email.accounts = {
personal = mkGmailAccount "blade30912@gmail.com" "Matthew Bessette" // {
primary = true;
};
bessette = mkGmailAccount "bessette.matthew94@gmail.com" "Matthew Bessette";
house = mkGmailAccount "mbessette.house@gmail.com" "Matthew Bessette";
joseph = mkGmailAccount "joseph.lamothe55@gmail.com" "Joseph Lamothe";
};
accounts.calendar.accounts = {
family = mkCalendar "test" // {
thunderbird = {
enable = true;
color = "#FED3D9";
};
};
matt = mkCalendar "matt-calendar" // {
primary = true;
thunderbird = {
enable = true;
color = "#FDF0D7";
settings = id: {
"calendar.registry.${id}.imip.identity.key" =
"id_${builtins.hashString "sha256" "personal"}";
};
};
};
joseph-cal = mkCalendar "joseph-calendar" // {
thunderbird = {
enable = true;
color = "#CEF4F8";
};
};
};
accounts.contact.accounts = {
contacts = mkAddressBook "contacts";
};
}
+34
View File
@@ -0,0 +1,34 @@
{ config, pkgs, ... }: {
xdg.configFile."oxlint/oxlintrc.json".source =
config.lib.file.mkOutOfStoreSymlink "/Users/matthew.bessette/nixos/config.oxlintrc.json";
xdg.configFile."biome/biome.json".source =
config.lib.file.mkOutOfStoreSymlink "/Users/matthew.bessette/nixos/config.biome.json";
programs.vscode = {
enable = true;
package = pkgs.unstable.vscode;
mutableExtensionsDir = false;
profiles.default = {
userSettings = builtins.fromJSON (builtins.readFile ./config.vscode.settings.json);
extensions =
(with pkgs.vscode-marketplace-release; [
bbenoist.nix
jnoortheen.nix-ide
graphql.vscode-graphql-syntax
graphql.vscode-graphql
ms-python.debugpy
ms-python.python
ms-python.vscode-pylance
oxc.oxc-vscode
vscode-icons-team.vscode-icons
typescriptteam.native-preview
lucasprag.dont-git-lost
ms-vscode-remote.remote-ssh
])
++ (with pkgs.vscode-marketplace; [
biomejs.biome
]);
};
};
}
+8
View File
@@ -0,0 +1,8 @@
[formatter.deadnix]
command = "deadnix"
options = ["--edit", "--quiet"]
includes = ["*.nix"]
[formatter.nix]
command = "nixpkgs-fmt"
includes = ["*.nix"]