14 Commits

Author SHA1 Message Date
Joe Frikker 41bd32951d Aligning home manager and nixpkgs versions 2026-09-16 10:55:51 -04:00
Joe Frikker acc0385350 Formatting flake 2026-09-16 10:53:47 -04:00
Joe Frikker 7ecbf30138 Initial switch back to one file + config options 2026-09-16 10:46:56 -04:00
Joe Frikker 61b30f5062 Adding notion, removing postgres 2026-09-16 08:37:01 -04:00
Joe Frikker 83b70c6c81 Some unbinds 2026-09-15 16:32:54 -04:00
Joe Frikker 0ea18214a5 Fixing apheleia error on load 2026-09-14 16:35:30 -04:00
Joe Frikker 57db7a1db8 nix flake update 2026-09-14 16:35:22 -04:00
Joe Frikker c695346b3c Merge branch 'redbook' 2026-09-11 13:03:02 -04:00
Joe Frikker 914d548d9f No more git fullscreen? 2026-09-11 13:02:14 -04:00
Joe Frikker 8ee9c32d9c Merge remote-tracking branch 'origin/redbook' 2026-09-06 22:50:16 +00:00
Joe Frikker 04b08dee44 Fixing laptop 2026-08-19 22:02:15 -04:00
Joe Frikker 7d03e428bc Merge remote-tracking branch 'origin/redbook' into laptop 2026-08-19 21:38:05 -04:00
Joe Frikker d80478e4e9 wip 2026-06-07 14:00:09 -04:00
Joe Frikker 53bb5718f3 wtf 2026-06-06 01:25:44 +00:00
3 changed files with 498 additions and 432 deletions
Generated
+13 -13
View File
@@ -8,11 +8,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1787169825, "lastModified": 1789074092,
"narHash": "sha256-3MmWHAzeoFHfwjUCQC01olBN+MC4xoSuR7D0bpPr+EE=", "narHash": "sha256-QCXTUbd4FuwOHO7LgJws78YTRcco4xgR8RoYgKLvd9w=",
"owner": "sadjow", "owner": "sadjow",
"repo": "claude-code-nix", "repo": "claude-code-nix",
"rev": "f575914388682670df73e80c9caf82063b659699", "rev": "1f88b393ac054378c393f914dc83d08a6ef5daeb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -28,16 +28,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1787176219, "lastModified": 1789267039,
"narHash": "sha256-djoRr6jBpe35q/0JwAvXpFXg1Ktf+X54NU2RLR7wnHw=", "narHash": "sha256-LWiBv9yAYFi2LPbUhDGHPGKYskJQjj2fw12OlyO1uQo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "c53d643b3737e2fcd04e6cb3b3580ef50b2087a0", "rev": "ec172013fa62135f58fb58dd17ae9651e8f39727",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "master", "ref": "release-26.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
@@ -49,11 +49,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1786852476, "lastModified": 1788680125,
"narHash": "sha256-IM5CYtf86W4w8eUPpKcY/LpdHElmVBtJhaKnoTKxZEA=", "narHash": "sha256-amGSoDobwmp4CFvCn841ws2iuitus+HUJdD/gKgsrJA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "c7962dc97b45129df8d751bedaf37beb5a17706e", "rev": "116ad1c2adb642405ef8916f6a94c8626f971344",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -64,11 +64,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1787101114, "lastModified": 1789009968,
"narHash": "sha256-gwrPcFf/rDjHPaVflbDZ040ZDmBTRj/7+s8ZmE2SaIM=", "narHash": "sha256-GB16oaxpsrnGNnGIE+0uYBqMRzB9X6FYDUvjvnJAYew=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b18a4b905f8d028dc4476412e6d6891728695379", "rev": "d58a46e3bc02d91ebe04667f8397752a749c0024",
"type": "github" "type": "github"
}, },
"original": { "original": {
+132 -35
View File
@@ -10,7 +10,7 @@
}; };
home-manager = { home-manager = {
url = "github:nix-community/home-manager/master"; url = "github:nix-community/home-manager/release-26.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# kube = { # kube = {
@@ -24,8 +24,18 @@
}; };
}; };
outputs = { nixpkgs, home-manager, claude-code, nix-index-database, ... }: outputs =
let modules-for-system = pkgs: pkgs.stdenv.mkDerivation { {
nixpkgs,
home-manager,
claude-code,
nix-index-database,
...
}:
let
modules-for-system =
pkgs:
pkgs.stdenv.mkDerivation {
name = "home-manager-modules"; name = "home-manager-modules";
src = pkgs.lib.fileset.toSource { src = pkgs.lib.fileset.toSource {
root = ./.; root = ./.;
@@ -45,50 +55,137 @@
runHook postInstall runHook postInstall
''; '';
}; };
in { in
{
homeConfigurations.redbook = homeConfigurations.redbook =
let pkgs = import nixpkgs { system = "aarch64-darwin"; config.allowUnfree = true; }; let
modules = modules-for-system pkgs; pkgs = import nixpkgs {
in home-manager.lib.homeManagerConfiguration { system = "aarch64-darwin";
inherit pkgs; config.allowUnfree = true;
modules =
[
nix-index-database.homeModules.default
"${modules}/base.nix"
"${modules}/desktop.nix"
"${modules}/redbook.nix"
"${modules}/redbook-desktop.nix"
] ++
[{
home.stateVersion = "22.05";
home.username = "jfrikker";
home.homeDirectory = "/Users/jfrikker";
home.packages = [ pkgs.pinentry_mac ];
}];
extraSpecialArgs = { claude-code = claude-code.packages.aarch64-darwin.default; };
}; };
homeConfigurations.home =
let pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = modules-for-system pkgs; modules = modules-for-system pkgs;
in home-manager.lib.homeManagerConfiguration { in
home-manager.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
modules = [ modules = [
nix-index-database.homeModules.default nix-index-database.homeModules.default
] ++ "${modules}"
(pkgs.lib.filter ]
(n: pkgs.lib.strings.hasSuffix ".nix" n) ++ [
(pkgs.lib.filesystem.listFilesRecursive "${modules}/base")) ++ {
[{ home.stateVersion = "22.05";
home.username = "jfrikker";
home.homeDirectory = "/Users/jfrikker";
home.packages = [ pkgs.pinentry_mac ];
jfrikker.enable = true;
jfrikker.desktop.enable = true;
jfrikker.redbook.enable = true;
}
];
extraSpecialArgs = {
claude-code = claude-code.packages.aarch64-darwin.default;
};
};
homeConfigurations.home =
let
pkgs = import nixpkgs {
system = "x86_64-linux";
config.allowUnfree = true;
};
modules = modules-for-system pkgs;
in
home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [
nix-index-database.homeModules.default
"${modules}"
]
++ [
{
home.stateVersion = "22.05"; home.stateVersion = "22.05";
home.username = "jfrikker"; home.username = "jfrikker";
home.homeDirectory = "/home/jfrikker"; home.homeDirectory = "/home/jfrikker";
}]; jfrikker.enable = true;
}
];
extraSpecialArgs = { claude-code = claude-code.packages.x86_64-linux.default; }; extraSpecialArgs = {
claude-code = claude-code.packages.x86_64-linux.default;
}; };
};
homeConfigurations.home-laptop =
let
pkgs = import nixpkgs {
system = "x86_64-linux";
config.allowUnfree = true;
};
modules = modules-for-system pkgs;
in
home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [
nix-index-database.homeModules.default
"${modules}"
]
++ [
{
home.stateVersion = "22.05";
home.username = "jfrikker";
home.homeDirectory = "/home/jfrikker";
# home.packages = [ pkgs.pinentry ];
jfrikker.enable = true;
jfrikker.desktop.enable = true;
programs.ghostty = {
enable = true;
settings = {
font-family = "Iosevka Term Extended";
font-size = 10;
};
};
programs.foot = {
enable = true;
settings = {
main = {
font = "Iosevka Term:size=10:width=expanded";
};
};
};
home.pointerCursor = {
enable = true;
package = pkgs.vanilla-dmz;
name = "Vanilla-DMZ";
sway.enable = true;
gtk.enable = true;
};
wayland.windowManager.sway = {
enable = true;
config.modifier = "Mod4";
# config.terminal = "${pkgs.ghostty}/bin/ghostty";
config.input = {
"1452:628:bcm5974" = {
scroll_factor = "0.4";
};
};
};
programs.emacs.package = pkgs.emacs-pgtk;
}
];
# extraSpecialArgs = { kube = kube.packages.x86_64-linux.default; };
extraSpecialArgs = {
claude-code = claude-code.packages.x86_64-linux.default;
};
};
packages.x86_64-linux.default = modules-for-system nixpkgs.legacyPackages.x86_64-linux;
packages.aarch64-darwin.default = modules-for-system nixpkgs.legacyPackages.aarch64-darwin; packages.aarch64-darwin.default = modules-for-system nixpkgs.legacyPackages.aarch64-darwin;
}; };
} }
+185 -216
View File
@@ -1,40 +1,33 @@
#+PROPERTY: header-args :mkdirp yes #+PROPERTY: header-args :mkdirp yes :noweb yes
#+PROPERTY: header-args:elisp :lexical t #+PROPERTY: header-args:elisp :lexical t
* Categories * Categories
#+begin_src nix :tangle target/default.nix
{lib, pkgs, config, claude-code, ...}: let
inherit (lib)
mkIf
mkMerge
;
cfg = config.jfrikker;
in {
options.jfrikker = {
enable = lib.mkEnableOption "Joe Frikker's configuration";
desktop.enable = lib.mkEnableOption "Desktop (GUI) applications";
redbook.enable = lib.mkEnableOption "Redbook-specific configuration";
#+BEGIN_SRC nix :tangle target/base.nix <<nix-options>>
{lib, ...}: { };
imports = lib.filter
(n: lib.strings.hasSuffix ".nix" n)
(lib.filesystem.listFilesRecursive ./base);
}
#+END_SRC
#+BEGIN_SRC nix :tangle target/desktop.nix config = mkIf cfg.enable (mkMerge [
{lib, ...}: { <<nix-configs>>
imports = lib.filter ]);
(n: lib.strings.hasSuffix ".nix" n)
(lib.filesystem.listFilesRecursive ./desktop);
} }
#+END_SRC #+end_src
#+BEGIN_SRC nix :tangle target/redbook.nix
{lib, ...}: {
imports = lib.filter
(n: lib.strings.hasSuffix ".nix" n)
(lib.filesystem.listFilesRecursive ./redbook);
}
#+END_SRC
#+BEGIN_SRC nix :tangle target/redbook-desktop.nix
{lib, ...}: {
imports = lib.filter
(n: lib.strings.hasSuffix ".nix" n)
(lib.filesystem.listFilesRecursive ./redbook-desktop);
}
#+END_SRC
* Packages * Packages
:PROPERTIES:
:header-args:nix: :noweb-ref nix-configs
:END:
Home-manager "packages" are simply binaries that are placed on the path, without any attached Home-manager "packages" are simply binaries that are placed on the path, without any attached
configuration. The code blocks in this section contain package lists that go under the packages configuration. The code blocks in this section contain package lists that go under the packages
section above. section above.
@@ -45,8 +38,7 @@ in a ~nix~ devshell I think I'd also like to use it for scripting / exploratory
so I'm installing it globally with a useful set of libraries. I should curate this somewhat so I'm installing it globally with a useful set of libraries. I should curate this somewhat
carefully so it doesn't get carried away... carefully so it doesn't get carried away...
#+BEGIN_SRC nix :tangle target/base/sbcl.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
rlwrap rlwrap
@@ -94,8 +86,7 @@ the name implies, allows generating and storing ~age~ keys on a Yubikey. ~rage~
~age~ when using ~age.el~, because it supports ~pinentry~. That allows it to prompt for yubikey pins ~age~ when using ~age.el~, because it supports ~pinentry~. That allows it to prompt for yubikey pins
using a dialog, rather than a command line prompt. using a dialog, rather than a command line prompt.
#+BEGIN_SRC nix :tangle target/base/crypto.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
rage rage
@@ -114,8 +105,7 @@ tools. They boost better speed, or simply more streamlined features.
| ~ripgrep~ | ~grep~ | | ~ripgrep~ | ~grep~ |
| ~xh~ | ~curl~ | | ~xh~ | ~curl~ |
#+BEGIN_SRC nix :tangle target/base/rust-reimpls.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
dust dust
@@ -129,8 +119,7 @@ tools. They boost better speed, or simply more streamlined features.
[[https://ledger-cli.org/][~ledger~]] is how I manage my budget. It's a plain-text accounting tool that's really awesome. [[https://ledger-cli.org/][~ledger~]] is how I manage my budget. It's a plain-text accounting tool that's really awesome.
#+BEGIN_SRC nix :tangle target/base/ledger.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
ledger ledger
@@ -140,11 +129,11 @@ tools. They boost better speed, or simply more streamlined features.
~nil~ is an LSP server for nix files. ~nil~ is an LSP server for nix files.
#+BEGIN_SRC nix :tangle target/base/nil.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
nil nil
nixfmt
]; ];
} }
#+END_SRC #+END_SRC
@@ -153,8 +142,7 @@ tools. They boost better speed, or simply more streamlined features.
computers in the world, assuming that you have an out-of-band way to communicate a passphrase computers in the world, assuming that you have an out-of-band way to communicate a passphrase
between them. Once installed, the actual command is ~wormhole~. between them. Once installed, the actual command is ~wormhole~.
#+begin_src nix :tangle target/base/magic-wormhole.nix #+begin_src nix
{pkgs, ...}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
magic-wormhole magic-wormhole
@@ -165,23 +153,20 @@ between them. Once installed, the actual command is ~wormhole~.
These are the other programs I have installed globally. A few (like ~awscli~, ~mysql-client~, etc.) These are the other programs I have installed globally. A few (like ~awscli~, ~mysql-client~, etc.)
are still Redbook-specific; ideally I'd find another way to install them. are still Redbook-specific; ideally I'd find another way to install them.
#+BEGIN_SRC nix :tangle target/redbook/other-packages.nix #+BEGIN_SRC nix
{pkgs, ...}: (mkIf cfg.redbook.enable {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
postgresql
openssh openssh
]; ];
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
} })
#+END_SRC #+END_SRC
These programs require a full desktop environment: These programs require a full desktop environment:
#+BEGIN_SRC nix :tangle target/desktop/desktop-packages.nix #+BEGIN_SRC nix
{pkgs, ...}: (mkIf cfg.desktop.enable {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
google-chrome google-chrome
nerd-fonts.jetbrains-mono nerd-fonts.jetbrains-mono
@@ -189,18 +174,19 @@ These programs require a full desktop environment:
(iosevka-bin.override { variant = "Aile"; }) (iosevka-bin.override { variant = "Aile"; })
(iosevka-bin.override { variant = "Etoile"; }) (iosevka-bin.override { variant = "Etoile"; })
(iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; }) (iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; })
nerd-fonts.symbols-only
keymapp keymapp
proton-pass proton-pass
wireshark wireshark
]; ];
} })
#+END_SRC #+END_SRC
#+BEGIN_SRC nix :tangle target/redbook-desktop/desktop-packages.nix #+BEGIN_SRC nix
{pkgs, ...}: (mkIf (cfg.redbook.enable && cfg.desktop.enable) {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
linear linear
notion-app
(slack.overrideAttrs { (slack.overrideAttrs {
version = "4.50.143"; version = "4.50.143";
src = pkgs.fetchurl { src = pkgs.fetchurl {
@@ -210,10 +196,14 @@ These programs require a full desktop environment:
}) })
teams teams
]; ];
} })
#+END_SRC #+END_SRC
* Program Configurations * Program Configurations
:PROPERTIES:
:header-args:nix: :noweb-ref nix-configs
:END:
This section contains applications whose config files will be generated by Home Manager. Home This section contains applications whose config files will be generated by Home Manager. Home
Manager calls these "programs" (as opposed to "packages", which are just binaries to put on the Manager calls these "programs" (as opposed to "packages", which are just binaries to put on the
path). path).
@@ -224,7 +214,7 @@ Although Home-Manager generates config files for these programs, they don't need
configuration. I'm not sure what benefit there is to enabling ~jq~ as a Home Manager program, rather configuration. I'm not sure what benefit there is to enabling ~jq~ as a Home Manager program, rather
than just as an available package, but there doesn't seem to be a downside. than just as an available package, but there doesn't seem to be a downside.
#+BEGIN_SRC nix :tangle target/base/simple-programs.nix #+BEGIN_SRC nix
{ {
programs = { programs = {
bash.enable = true; bash.enable = true;
@@ -243,7 +233,7 @@ than just as an available package, but there doesn't seem to be a downside.
provides syntax-highlighting versions of a few other commands. It's honestly not incredibly useful, provides syntax-highlighting versions of a few other commands. It's honestly not incredibly useful,
but still nice to have. but still nice to have.
#+BEGIN_SRC nix :tangle target/base/bat.nix #+BEGIN_SRC nix
{ {
programs.bat = { programs.bat = {
enable = true; enable = true;
@@ -254,7 +244,7 @@ but still nice to have.
** Comma ** Comma
#+BEGIN_SRC nix :tangle target/base/comma.nix #+BEGIN_SRC nix
{ {
programs.nix-index.enable = true; programs.nix-index.enable = true;
programs.nix-index-database.comma.enable = true; programs.nix-index-database.comma.enable = true;
@@ -266,7 +256,7 @@ but still nice to have.
~direnv~ allows loading per-project paths as I navigate to their directories on the command line. I ~direnv~ allows loading per-project paths as I navigate to their directories on the command line. I
leverage this with the emacs ~envrc~ package. leverage this with the emacs ~envrc~ package.
#+BEGIN_SRC nix :tangle target/base/direnv.nix #+BEGIN_SRC nix
{ {
programs.direnv = { programs.direnv = {
enable = true; enable = true;
@@ -279,7 +269,7 @@ leverage this with the emacs ~envrc~ package.
~eza~ is an ~ls~ replacement that offers icons, colors, and some easier command-line options. ~eza~ is an ~ls~ replacement that offers icons, colors, and some easier command-line options.
#+BEGIN_SRC nix :tangle target/base/eza.nix #+BEGIN_SRC nix
{ {
programs.eza = { programs.eza = {
enable = true; enable = true;
@@ -295,7 +285,7 @@ leverage this with the emacs ~envrc~ package.
~fzf~ offers a variety of fuzzy finders right from the shell. I haven't been using this, so I'll ~fzf~ offers a variety of fuzzy finders right from the shell. I haven't been using this, so I'll
turn it off for now. turn it off for now.
#+BEGIN_SRC nix :tangle target/base/fzf.nix #+BEGIN_SRC nix
{ {
programs.fzf = { programs.fzf = {
defaultCommand = "fd --type f"; defaultCommand = "fd --type f";
@@ -311,7 +301,7 @@ turn it off for now.
We all know what ~git~ does. We all know what ~git~ does.
#+BEGIN_SRC nix :tangle target/base/git.nix #+BEGIN_SRC nix
{ {
programs.git = { programs.git = {
enable = true; enable = true;
@@ -332,7 +322,7 @@ We all know what ~git~ does.
The best text editor ever? Heresy! The best text editor ever? Heresy!
#+BEGIN_SRC nix :tangle target/base/helix.nix #+BEGIN_SRC nix
{ {
programs.helix = { programs.helix = {
enable = true; enable = true;
@@ -410,7 +400,7 @@ The best text editor ever? Heresy!
~nh~ is an alternative frontend to home-manager and a few other nix tools that I'm trying out. It ~nh~ is an alternative frontend to home-manager and a few other nix tools that I'm trying out. It
shows what's changing when you update your config, which is nice. shows what's changing when you update your config, which is nice.
#+BEGIN_SRC nix :tangle target/base/nh.nix #+BEGIN_SRC nix
{ {
programs.nh = { programs.nh = {
enable = true; enable = true;
@@ -424,7 +414,7 @@ shows what's changing when you update your config, which is nice.
~starship~ gives me a nice shell prompt, mostly showing the versions of relevant software I have ~starship~ gives me a nice shell prompt, mostly showing the versions of relevant software I have
installed. It's shell-agnostic, so it works with both bash and zsh. installed. It's shell-agnostic, so it works with both bash and zsh.
#+BEGIN_SRC nix :tangle target/base/starship.nix #+BEGIN_SRC nix
{ {
programs.starship = { programs.starship = {
enable = true; enable = true;
@@ -457,8 +447,7 @@ installed. It's shell-agnostic, so it works with both bash and zsh.
I'm using ~wezterm~ instead of ~tmux~ for now, so this is disabled, but I'm keeping the config here I'm using ~wezterm~ instead of ~tmux~ for now, so this is disabled, but I'm keeping the config here
in case I need it later. in case I need it later.
#+BEGIN_SRC nix :tangle target/base/tmux.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
programs.tmux = { programs.tmux = {
baseIndex = 1; baseIndex = 1;
@@ -486,25 +475,36 @@ in case I need it later.
#+END_SRC #+END_SRC
** Wezterm ** Wezterm
:PROPERTIES: :PROPERTIES:
:header-args:lua: :tangle target/desktop/wezterm.lua :header-args:lua: :noweb-ref wezterm-config
:END: :END:
~wezterm~ is a fast terminal emulator and multiplexer. It is configured using lua. We'll define its ~wezterm~ is a fast terminal emulator and multiplexer. It is configured using lua. We'll define its
config in two blocks, so we can get lua syntax highlighting in org. First, the nix configuration: config in two blocks, so we can get lua syntax highlighting in org. First, the nix configuration:
#+BEGIN_SRC nix :tangle target/desktop/wezterm.nix #+BEGIN_SRC nix
{ (mkIf cfg.desktop.enable {
programs.wezterm = { programs.wezterm = {
enable = true; enable = true;
extraConfig = builtins.readFile ./wezterm.lua; extraConfig = ''
local config = {}
config.default_prog = { '${pkgs.zsh}/bin/zsh', '-l'}
config.font_size = ${if pkgs.stdenv.isDarwin then "13.0" else "10.0"}
'' + builtins.readFile ./wezterm.lua;
}; };
} })
#+END_SRC #+END_SRC
Then the real lua config: Then the real lua config:
#+BEGIN_SRC lua #+begin_src lua :tangle target/wezterm.lua :noweb-ref nil
local config = {} local config = {}
<<wezterm-config>>
return config
#+end_src
#+BEGIN_SRC lua
config.default_prog = { '/Users/jfrikker/.nix-profile/bin/zsh', '-l' } config.default_prog = { '/Users/jfrikker/.nix-profile/bin/zsh', '-l' }
config.font = wezterm.font 'Iosevka Term SS14' config.font = wezterm.font 'Iosevka Term SS14'
config.font_size = 13.0 config.font_size = 13.0
@@ -695,8 +695,8 @@ Now we'll set up some keybindings:
#+END_SRC #+END_SRC
** Kitty ** Kitty
#+BEGIN_SRC nix :tangle target/desktop/kitty.nix #+BEGIN_SRC nix
{pkgs, ...}: { (mkIf cfg.desktop.enable {
programs.kitty = { programs.kitty = {
enable = true; enable = true;
font = { font = {
@@ -717,15 +717,16 @@ Now we'll set up some keybindings:
"ctrl+9" = "goto_tab 9"; "ctrl+9" = "goto_tab 9";
}; };
}; };
} })
#+END_SRC #+END_SRC
** Ghostty ** Ghostty
Disabled until I can get it working on both linux and mac (if I want to).
#+BEGIN_SRC nix :tangle target/desktop/ghostty.nix #+BEGIN_SRC nix
{pkgs, ...}: { {
programs.ghostty = { programs.ghostty = {
enable = true; enable = false;
package = pkgs.ghostty-bin; package = pkgs.ghostty-bin;
settings = { settings = {
adjust-cell-height = "15%"; adjust-cell-height = "15%";
@@ -741,7 +742,7 @@ Now we'll set up some keybindings:
This is my default shell for now. Unfortunately, nix requires a posix-compliant shell, so bash or This is my default shell for now. Unfortunately, nix requires a posix-compliant shell, so bash or
zsh it is. zsh it is.
#+BEGIN_SRC nix :tangle target/base/zsh.nix #+BEGIN_SRC nix
{ {
programs.zsh = { programs.zsh = {
enable = true; enable = true;
@@ -757,8 +758,7 @@ zsh it is.
Actually, nix *really* requires ~bash~. This is a plugin that allows using zsh from nix-shell. Actually, nix *really* requires ~bash~. This is a plugin that allows using zsh from nix-shell.
#+BEGIN_SRC nix :tangle target/base/zsh-nix-shell.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
programs.zsh.plugins = [ programs.zsh.plugins = [
{ {
@@ -777,8 +777,8 @@ Actually, nix *really* requires ~bash~. This is a plugin that allows using zsh f
** Claude Code ** Claude Code
#+BEGIN_SRC nix :tangle target/base/claude-code.nix #+BEGIN_SRC nix
{claude-code, ...}: { {
programs.claude-code = { programs.claude-code = {
enable = true; enable = true;
package = claude-code; package = claude-code;
@@ -787,6 +787,11 @@ Actually, nix *really* requires ~bash~. This is a plugin that allows using zsh f
#+END_SRC #+END_SRC
* Emacs * Emacs
:PROPERTIES:
:header-args:nix: :noweb-ref nix-configs
:header-args:elisp: :tangle target/emacs.el
:END:
Emacs is a huge portion of this configuration, so although it's a home-manager "program", I'm Emacs is a huge portion of this configuration, so although it's a home-manager "program", I'm
breaking it out into its own top-level section. Many of the sections here have two code blocks: a breaking it out into its own top-level section. Many of the sections here have two code blocks: a
nix code block listing the emacs packages to include, and an elisp code block to configure them in nix code block listing the emacs packages to include, and an elisp code block to configure them in
@@ -795,6 +800,15 @@ emacs.
We'll put the actual emacs configs into separate files, rather than into nix string literals. This We'll put the actual emacs configs into separate files, rather than into nix string literals. This
helps with a few places where nix's string interpolation was causing problems. helps with a few places where nix's string interpolation was causing problems.
#+BEGIN_SRC nix
(mkIf cfg.desktop.enable {
programs.emacs = {
enable = true;
extraConfig = builtins.readFile ./emacs.el;
};
})
#+END_SRC
** Keybindings ** Keybindings
These keybindings are scattered throughout this file, I'm collecting them all here to make it easier These keybindings are scattered throughout this file, I'm collecting them all here to make it easier
to track them. to track them.
@@ -819,15 +833,11 @@ to track them.
| C-c M-g | | [[id:4F426E77-CE03-4BF8-8D1B-7791C7C02B28][Magit file dispatch]] | | | C-c M-g | | [[id:4F426E77-CE03-4BF8-8D1B-7791C7C02B28][Magit file dispatch]] | |
** Global Settings ** Global Settings
:PROPERTIES:
:header-args:elisp: :tangle target/desktop/emacs-global.el
:END:
These are just some general settings that apply everywhere. First, a few packages: These are just some general settings that apply everywhere. First, a few packages:
#+BEGIN_SRC nix :tangle target/desktop/emacs-global.nix #+BEGIN_SRC nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
ace-window ace-window
doom-modeline doom-modeline
@@ -836,7 +846,6 @@ These are just some general settings that apply everywhere. First, a few package
mixed-pitch mixed-pitch
popper popper
]; ];
extraConfig = builtins.readFile ./emacs-global.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -965,6 +974,28 @@ repeats set up that only apply in that mode.
(savehist-mode) (savehist-mode)
#+END_SRC #+END_SRC
Let's unbind some builtin keys that I don't use. I'm not sure if I'll replace them with anything or not, but at a minimum it'll avoid accidental keypresses and clean up which-key output.
#+begin_src elisp
(unbind-key "C-x RET")
(unbind-key "C-x #")
(unbind-key "C-x 5")
(unbind-key "C-x 6")
(unbind-key "C-x \\")
(unbind-key "C-x `")
(unbind-key "C-x m")
(unbind-key "C-x l")
(unbind-key "C-x i")
(unbind-key "C-x u")
(unbind-key "C-x @")
(unbind-key "C-x C-b")
(unbind-key "C-x C-d")
(unbind-key "C-x C-l")
(unbind-key "C-x C-p")
(unbind-key "C-x C-u")
(unbind-key "C-x C-z")
#+end_src
The doom modeline looks nice. I'm turning off IRC notifications, because it was slow to update (and The doom modeline looks nice. I'm turning off IRC notifications, because it was slow to update (and
it would update after every command, slowing down everything). I don't need the workspace name when it would update after every command, slowing down everything). I don't need the workspace name when
I have the tab bar at the top of the window. The other settings just clear up some space, and make I have the tab bar at the top of the window. The other settings just clear up some space, and make
@@ -1263,18 +1294,12 @@ content to be.
(setopt split-width-threshold 200) (setopt split-width-threshold 200)
(setopt split-height-threshold nil) (setopt split-height-threshold nil)
(setopt display-buffer-base-action (setopt display-buffer-base-action
'((display-buffer-reuse-window display-buffer-same-window '((display-buffer-reuse-window
display-buffer-in-previous-window display-buffer-reuse-mode-window
display-buffer-use-some-window))) display-buffer-use-some-window)))
(setq display-buffer-alist (setq display-buffer-alist
'(((or "magit: *" '(((or "\\*Flymake diagnostics .*"
"magit-log*"
"\\*Messages\\*"
"\\*trace-output\\*"
"\\*EGLOT connections\\*")
(jf/display-buffer-fullscreen))
((or "\\*Flymake diagnostics .*"
"\\*Embark Export: .*" "\\*Embark Export: .*"
"\\*Embark Collect .*" "\\*Embark Collect .*"
"\\*xref\\*" "\\*xref\\*"
@@ -1288,10 +1313,13 @@ content to be.
(display-buffer-in-side-window) (display-buffer-in-side-window)
(side . bottom) (side . bottom)
(slot . 0) (slot . 0)
(window-height . 0.33) (window-height . 0.33))
(window-parameters (no-delete-other-windows . t) ((or "magit: *"
(no-other-window . t))) "magit-log*"
((or "magit-revision: .*" "\\*Messages\\*"
"\\*trace-output\\*"
"\\*EGLOT connections\\*"
"magit-revision: .*"
"\\*Help\\*" "\\*Help\\*"
"\\*rustfmt\\*" "\\*rustfmt\\*"
"\\*slack: .*" "\\*slack: .*"
@@ -1302,7 +1330,9 @@ content to be.
"\\*List .*" "\\*List .*"
"\\*Embark Actions\\*" "\\*Embark Actions\\*"
"\\*eldoc\\*") "\\*eldoc\\*")
(jf/display-buffer-right)))) (display-buffer-reuse-window
display-buffer-reuse-mode-window
jf/display-buffer-right))))
(setopt window-persistent-parameters (setopt window-persistent-parameters
(cl-list* '(no-delete-other-windows . writable) (cl-list* '(no-delete-other-windows . writable)
@@ -1312,28 +1342,22 @@ content to be.
** Editing ** Editing
:PROPERTIES:
:header-args:elisp: :tangle target/desktop/emacs-editing.el
:END:
This configuration affects general text editing, across all modes. First, some packages: This configuration affects general text editing, across all modes. First, some packages:
#+BEGIN_SRC nix :tangle target/desktop/emacs-editing.nix #+BEGIN_SRC nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
apheleia
avy avy
edit-indirect edit-indirect
embark embark
format-all
god-mode god-mode
# evil # evil
# evil-collection # evil-collection
# evil-org # evil-org
string-inflection string-inflection
]; ];
extraConfig = builtins.readFile ./emacs-editing.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1440,19 +1464,20 @@ Just "silently" wrap when searching at the bottom of a document.
(bind-keys ("C-x 4 n" . edit-indirect-region)) (bind-keys ("C-x 4 n" . edit-indirect-region))
#+END_SRC #+END_SRC
** Workflow Some auto-formatting stuff
:PROPERTIES:
:header-args:elisp: :tangle target/desktop/emacs-workflow.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-workflow.nix #+begin_src elisp
(with-eval-after-load 'apheleia
(push '(prisma-format "prisma" "format" "--schema" filepath) apheleia-formatters))
#+end_src
** Workflow
#+BEGIN_SRC nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
buffer-terminator buffer-terminator
]; ];
extraConfig = builtins.readFile ./emacs-workflow.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1465,14 +1490,9 @@ Just "silently" wrap when searching at the bottom of a document.
#+END_SRC #+END_SRC
** Language Support ** Language Support
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-languages.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-languages.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
consult-eglot consult-eglot
graphql-ts-mode graphql-ts-mode
@@ -1534,7 +1554,6 @@ Just "silently" wrap when searching at the bottom of a document.
])) ]))
yaml-pro yaml-pro
]; ];
extraConfig = builtins.readFile ./emacs-languages.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1800,18 +1819,12 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Envrc ** Envrc
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-envrc.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-envrc.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
envrc envrc
]; ];
extraConfig = builtins.readFile ./emacs-envrc.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1822,14 +1835,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Magit ** Magit
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-magit.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-magit.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
consult-gh consult-gh
diff-hl diff-hl
@@ -1837,7 +1845,6 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
git-timemachine git-timemachine
magit magit
]; ];
extraConfig = builtins.readFile ./emacs-magit.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1866,14 +1873,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Vertico ** Vertico
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-vertico.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-vertico.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
cape cape
consult consult
@@ -1883,7 +1885,6 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
orderless orderless
vertico vertico
]; ];
extraConfig = builtins.readFile ./emacs-vertico.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -1972,14 +1973,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Org ** Org
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-org.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-org.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
org-modern org-modern
org-present org-present
@@ -1988,7 +1984,6 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
verb verb
visual-fill-column visual-fill-column
]; ];
extraConfig = builtins.readFile ./emacs-org.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -2111,18 +2106,12 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Terminal ** Terminal
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-terminal.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-terminal.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
eat eat
]; ];
extraConfig = builtins.readFile ./emacs-terminal.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -2134,18 +2123,12 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Slack ** Slack
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-slack.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-slack.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
slack slack
]; ];
extraConfig = builtins.readFile ./emacs-slack.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -2164,11 +2147,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Ledger ** Ledger
#+BEGIN_SRC nix
#+BEGIN_SRC nix :tangle target/desktop/emacs-ledger.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
ledger-mode ledger-mode
]; ];
@@ -2177,18 +2158,12 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Age ** Age
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-age.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-age.nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
age age
]; ];
extraConfig = builtins.readFile ./emacs-age.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -2204,15 +2179,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
#+END_SRC #+END_SRC
** Claude Code ** Claude Code
:PROPERTIES: #+BEGIN_SRC nix
:header-args:elisp: :tangle target/desktop/emacs-claude-code.el
:END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-claude-code.nix
{pkgs, ...}:
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
(epkgs.trivialBuild { (epkgs.trivialBuild {
pname = "claude-code"; pname = "claude-code";
@@ -2226,7 +2195,6 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
packageRequires = [ epkgs.inheritenv ]; packageRequires = [ epkgs.inheritenv ];
}) })
]; ];
extraConfig = builtins.readFile ./emacs-claude-code.el;
}; };
} }
#+END_SRC #+END_SRC
@@ -2237,11 +2205,14 @@ for completion. That makes it really annoying to use; don't use yasnippet with e
:custom (claude-code-optimize-window-resize nil)) :custom (claude-code-optimize-window-resize nil))
#+END_SRC #+END_SRC
* Theme * Theme
:PROPERTIES:
:header-args:nix: :noweb-ref nix-configs
:END:
I like Catppuccin Frappe as my theme. Let's use it in as many places as we can. I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
** Bat ** Bat
#+BEGIN_SRC nix :tangle target/base/bat-theme.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
programs.bat = { programs.bat = {
config.theme = "catppuccin-frappe"; config.theme = "catppuccin-frappe";
@@ -2261,15 +2232,14 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
#+END_SRC #+END_SRC
** Helix ** Helix
#+BEGIN_SRC nix :tangle target/base/helix-theme.nix #+BEGIN_SRC nix
{ {
programs.helix.settings.theme = "catppuccin_frappe"; programs.helix.settings.theme = "catppuccin_frappe";
} }
#+END_SRC #+END_SRC
** Tmux ** Tmux
#+BEGIN_SRC nix :tangle target/base/tmux-theme.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
programs.tmux.plugins = [ programs.tmux.plugins = [
{ {
@@ -2283,29 +2253,27 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
#+END_SRC #+END_SRC
** Lazygit ** Lazygit
#+BEGIN_SRC nix :tangle target/base/lazygit.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
xdg = { xdg = {
enable = false enable = false
; ;
configFile."lazygit/config.yml" = { # configFile."lazygit/config.yml" = {
enable = true; # enable = true;
source = pkgs.fetchFromGitHub # source = pkgs.fetchFromGitHub
{ # {
owner = "catppuccin"; # owner = "catppuccin";
repo = "lazygit"; # repo = "lazygit";
rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash # rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash
sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw="; # sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw=";
} + /themes/frappe.yml; # } + /themes/frappe.yml;
}; # };
}; };
} }
#+END_SRC #+END_SRC
** Starship ** Starship
#+BEGIN_SRC nix :tangle target/base/starship_colors.nix #+BEGIN_SRC nix
{pkgs, ...}:
{ {
programs.starship.settings = builtins.fromTOML (builtins.readFile programs.starship.settings = builtins.fromTOML (builtins.readFile
(pkgs.fetchFromGitHub (pkgs.fetchFromGitHub
@@ -2319,14 +2287,16 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
#+END_SRC #+END_SRC
** Wezterm ** Wezterm
#+BEGIN_SRC lua :tangle target/desktop/wezterm.lua :PROPERTIES:
config.color_scheme = 'Catppuccin Frappe' :header-args:lua: :noweb-ref wezterm-config
:END:
return config #+BEGIN_SRC lua
config.color_scheme = 'Catppuccin Frappe'
#+END_SRC #+END_SRC
** Ghostty ** Ghostty
#+BEGIN_SRC nix :tangle target/desktop/ghostty-theme.nix #+BEGIN_SRC nix
{ {
programs.ghostty.settings.theme = "Catppuccin Frappe"; programs.ghostty.settings.theme = "Catppuccin Frappe";
} }
@@ -2334,17 +2304,16 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
** Emacs ** Emacs
:PROPERTIES: :PROPERTIES:
:header-args:elisp: :tangle target/desktop/emacs-theme.el :header-args:elisp: :tangle target/emacs.el
:END: :END:
#+BEGIN_SRC nix :tangle target/desktop/emacs-theme.nix #+BEGIN_SRC nix
{ {
programs.emacs = { programs.emacs = {
enable = true;
extraPackages = epkgs: with epkgs; [ extraPackages = epkgs: with epkgs; [
catppuccin-theme catppuccin-theme
]; ];
extraConfig = builtins.readFile ./emacs-theme.el; extraConfig = "(defvar my-base-font-size ${if pkgs.stdenv.isDarwin then "130" else "100"})";
}; };
} }
#+END_SRC #+END_SRC
@@ -2356,7 +2325,7 @@ I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.
;; (set-face-attribute 'default nil :font "JetBrainsMono Nerd Font" :height 130) ;; (set-face-attribute 'default nil :font "JetBrainsMono Nerd Font" :height 130)
;; (set-face-attribute 'fixed-pitch nil :font "JetBrainsMono Nerd Font" :height 130) ;; (set-face-attribute 'fixed-pitch nil :font "JetBrainsMono Nerd Font" :height 130)
(set-face-attribute 'default nil :font "Iosevka Term SS14" :height 130) (set-face-attribute 'default nil :font "Iosevka Term SS14" :height my-base-font-size)
(set-face-attribute 'fixed-pitch nil :font "Iosevka Term SS14" :height 130) (set-face-attribute 'fixed-pitch nil :font "Iosevka Term SS14" :height my-base-font-size)
(set-face-attribute 'variable-pitch nil :font "Iosevka Etoile" :height 130) (set-face-attribute 'variable-pitch nil :font "Iosevka Etoile" :height my-base-font-size)
#+END_SRC #+END_SRC