Switching to flake-parts
This commit is contained in:
@@ -0,0 +1,646 @@
|
||||
{lib, pkgs, config, ...}: 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";
|
||||
|
||||
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
rlwrap
|
||||
(sbcl.withPackages (ps: with ps; [
|
||||
alexandria
|
||||
cl-markup
|
||||
cl-mock
|
||||
clack
|
||||
clack-handler-woo
|
||||
dbi
|
||||
defstar
|
||||
dexador
|
||||
fare-csv
|
||||
group-by
|
||||
lack-request
|
||||
lack-response
|
||||
local-time
|
||||
log4cl
|
||||
mito
|
||||
myway
|
||||
prove
|
||||
prove-asdf
|
||||
replic
|
||||
serapeum
|
||||
shasht
|
||||
slynk
|
||||
smug
|
||||
split-sequence
|
||||
str
|
||||
sxql-composer
|
||||
trivia
|
||||
trivial-mmap
|
||||
trivial-ws
|
||||
trivial-open-browser
|
||||
trivial-timeout
|
||||
uuid
|
||||
]))
|
||||
];
|
||||
}
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
rage
|
||||
age-plugin-yubikey
|
||||
yubikey-manager
|
||||
];
|
||||
}
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
dust
|
||||
fd
|
||||
ripgrep
|
||||
tokei
|
||||
xh
|
||||
];
|
||||
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
icons = "auto";
|
||||
};
|
||||
}
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
ledger
|
||||
];
|
||||
}
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
nil
|
||||
nixfmt
|
||||
];
|
||||
}
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
magic-wormhole
|
||||
];
|
||||
}
|
||||
(mkIf cfg.redbook.enable {
|
||||
home.packages = with pkgs; [
|
||||
openssh
|
||||
];
|
||||
})
|
||||
(mkIf cfg.desktop.enable {
|
||||
home.packages = with pkgs; [
|
||||
google-chrome
|
||||
nerd-fonts.jetbrains-mono
|
||||
nerd-fonts.symbols-only
|
||||
(iosevka-bin.override { variant = "Aile"; })
|
||||
(iosevka-bin.override { variant = "Etoile"; })
|
||||
(iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; })
|
||||
nerd-fonts.symbols-only
|
||||
keymapp
|
||||
proton-pass
|
||||
wireshark
|
||||
];
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
})
|
||||
(mkIf (cfg.redbook.enable && cfg.desktop.enable) {
|
||||
home.packages = with pkgs; [
|
||||
linear
|
||||
notion-app
|
||||
(slack.overrideAttrs {
|
||||
version = "4.50.143";
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://downloads.slack-edge.com/desktop-releases/mac/arm64/4.50.143/Slack-4.50.143-macOS.dmg";
|
||||
hash = "sha256-f5oYi8NPKXWpDcowFYMUjptbQs4V9hK2bm1TuaQeJn0=";
|
||||
};
|
||||
})
|
||||
teams
|
||||
];
|
||||
})
|
||||
{
|
||||
programs = {
|
||||
bash.enable = true;
|
||||
gh.enable = true;
|
||||
home-manager.enable = true;
|
||||
jq.enable = true;
|
||||
lazygit.enable = true;
|
||||
zoxide.enable = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
config.style = "numbers";
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.nix-index.enable = true;
|
||||
programs.nix-index-database.comma.enable = true;
|
||||
}
|
||||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.fzf = {
|
||||
defaultCommand = "fd --type f";
|
||||
fileWidgetCommand = "fd --type f";
|
||||
fileWidgetOptions = ["--preview" "'bat --color=always --style=numbers --line-range=:500 {}'"];
|
||||
changeDirWidgetCommand = "fd --type d";
|
||||
tmux.enableShellIntegration = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
settings.user.name = "Joe Frikker";
|
||||
settings.user.email = "joe@redbookcattle.com";
|
||||
settings.github.user = "joe@redbookcattle.com";
|
||||
settings.merge.conflictstyle = "zdiff3";
|
||||
};
|
||||
|
||||
programs.delta = {
|
||||
enable = true;
|
||||
enableGitIntegration = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.helix = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
|
||||
settings.editor = {
|
||||
auto-format = false;
|
||||
auto-pairs = false;
|
||||
auto-save.after-delay.enable = true;
|
||||
auto-save.after-delay.timeout = 1000;
|
||||
cursorline = true;
|
||||
idle-timeout = 0;
|
||||
rulers = [120];
|
||||
text-width = 100;
|
||||
lsp.goto-reference-include-declaration = false;
|
||||
cursor-shape.insert = "bar";
|
||||
smart-tab.supersede-menu = true;
|
||||
whitespace.render.newline = "all";
|
||||
};
|
||||
|
||||
settings.keys.normal.space = {
|
||||
space = "file_picker";
|
||||
"," = "buffer_picker";
|
||||
# b = "@:sh wezterm cli spawn --cwd . -- tig blame <C-r>%<ret>";
|
||||
};
|
||||
|
||||
|
||||
languages.language-server.eslint = {
|
||||
args = ["--stdio"];
|
||||
command = "vscode-eslint-language-server";
|
||||
config.nodePath = "";
|
||||
config.quiet = false;
|
||||
config.rulesCustomizations = [];
|
||||
config.run = "onType";
|
||||
config.validate = "on";
|
||||
config.codeAction.disableRuleComment.enable = true;
|
||||
config.codeAction.disableRuleComment.location = "separateLine";
|
||||
config.codeAction.showDocumentation.enable = true;
|
||||
config.problems.shortenToSingleLine = false;
|
||||
};
|
||||
|
||||
languages.language-server.jdtls.config.java = {
|
||||
autobuild.enabled = true;
|
||||
completion.maxResults = 1000;
|
||||
format.settings.url = "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml";
|
||||
};
|
||||
|
||||
languages.language-server.rust-analyzer.config.files.watcher = "client";
|
||||
|
||||
languages.language = [
|
||||
{
|
||||
name = "typescript";
|
||||
language-servers = [ "typescript-language-server" "vscode-eslint-language-server" ];
|
||||
indent.tab-width = 4;
|
||||
indent.unit = " ";
|
||||
}
|
||||
{
|
||||
name = "tsx";
|
||||
language-servers = [ "typescript-language-server" "vscode-eslint-language-server" ];
|
||||
indent.tab-width = 4;
|
||||
indent.unit = " ";
|
||||
}
|
||||
{
|
||||
name = "java";
|
||||
indent.tab-width = 4;
|
||||
indent.unit = " ";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.nh = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
add_newline = false;
|
||||
container.disabled = true;
|
||||
git_branch.symbol = " ";
|
||||
git_status.ahead = "⇡\${count}";
|
||||
git_status.behind = "⇣\${count}";
|
||||
git_status.diverged = "⇕⇡\${ahead_count}⇣\${behind_count}";
|
||||
git_status.format = "([\\[\$conflicted\$staged\$ahead_behind\\]](\$style) )";
|
||||
java.symbol = " ";
|
||||
line_break.disabled = true;
|
||||
nix_shell.symbol = " ";
|
||||
nodejs.symbol = " ";
|
||||
package.disabled = true;
|
||||
palette = "catppuccin_frappe";
|
||||
python.symbol = " ";
|
||||
package.symbol = " ";
|
||||
rust.symbol = " ";
|
||||
docker_context.disabled = true;
|
||||
shell.disabled = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.tmux = {
|
||||
baseIndex = 1;
|
||||
clock24 = true;
|
||||
customPaneNavigationAndResize = true;
|
||||
historyLimit = 50000;
|
||||
enable = true;
|
||||
escapeTime = 0;
|
||||
keyMode = "vi";
|
||||
mouse = true;
|
||||
shell = pkgs.zsh + "/bin/zsh";
|
||||
shortcut = "Space";
|
||||
tmuxinator.enable = true;
|
||||
terminal = "xterm-256color";
|
||||
extraConfig = ''
|
||||
bind-key -T copy-mode-vi 'v' send -X begin-selection
|
||||
bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel
|
||||
|
||||
bind-key -T launcher g popup -h 100% -w 100% -E lazygit
|
||||
bind-key g switch-client -Tlauncher
|
||||
set -g default-command ""
|
||||
'';
|
||||
};
|
||||
}
|
||||
(mkIf cfg.desktop.enable {
|
||||
programs.wezterm = {
|
||||
enable = true;
|
||||
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;
|
||||
};
|
||||
})
|
||||
(mkIf cfg.desktop.enable {
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
font = {
|
||||
name = "Iosevka Term SS14";
|
||||
package = pkgs.iosevka-bin.override { variant = "SGr-IosevkaTermSS14"; };
|
||||
size = 13;
|
||||
};
|
||||
themeFile = "Catppuccin-Frappe";
|
||||
keybindings = {
|
||||
"ctrl+1" = "goto_tab 1";
|
||||
"ctrl+2" = "goto_tab 2";
|
||||
"ctrl+3" = "goto_tab 3";
|
||||
"ctrl+4" = "goto_tab 4";
|
||||
"ctrl+5" = "goto_tab 5";
|
||||
"ctrl+6" = "goto_tab 6";
|
||||
"ctrl+7" = "goto_tab 7";
|
||||
"ctrl+8" = "goto_tab 8";
|
||||
"ctrl+9" = "goto_tab 9";
|
||||
};
|
||||
};
|
||||
})
|
||||
{
|
||||
programs.ghostty = {
|
||||
enable = false;
|
||||
package = pkgs.ghostty-bin;
|
||||
settings = {
|
||||
adjust-cell-height = "15%";
|
||||
font-family = "Iosevka Term SS14";
|
||||
font-size = 13;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
oh-my-zsh.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
autosuggestion.enable = true;
|
||||
historySubstringSearch.enable = true;
|
||||
history.share = false;
|
||||
cdpath = ["~/source"];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.zsh.plugins = [
|
||||
{
|
||||
name = "zsh-nix-shell";
|
||||
file = "nix-shell.plugin.zsh";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "chisui";
|
||||
repo = "zsh-nix-shell";
|
||||
rev = "v0.7.0";
|
||||
sha256 = "149zh2rm59blr2q458a5irkfh82y3dwdich60s9670kl3cl5h2m1";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
(mkIf cfg.desktop.enable {
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
extraConfig = builtins.readFile ./emacs.el;
|
||||
};
|
||||
})
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
ace-window
|
||||
doom-modeline
|
||||
free-keys
|
||||
ligature
|
||||
mixed-pitch
|
||||
popper
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
apheleia
|
||||
avy
|
||||
edit-indirect
|
||||
embark
|
||||
god-mode
|
||||
# evil
|
||||
# evil-collection
|
||||
# evil-org
|
||||
string-inflection
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
buffer-terminator
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
consult-eglot
|
||||
graphql-ts-mode
|
||||
haskell-ts-mode
|
||||
jenkinsfile-mode
|
||||
jq-mode
|
||||
(lispy.overrideAttrs {
|
||||
packageRequires = [
|
||||
ace-window iedit swiper zoutline hydra
|
||||
];
|
||||
ignoreCompilationError = true;
|
||||
})
|
||||
# lispyville
|
||||
lua-mode
|
||||
nix-mode
|
||||
pnpm-mode
|
||||
prisma-ts-mode
|
||||
rust-mode
|
||||
sly
|
||||
sly-macrostep
|
||||
sql-indent
|
||||
tree-sitter
|
||||
(treesit-grammars.with-grammars (g: [
|
||||
g.tree-sitter-bash
|
||||
g.tree-sitter-commonlisp
|
||||
g.tree-sitter-css
|
||||
g.tree-sitter-dockerfile
|
||||
g.tree-sitter-dot
|
||||
g.tree-sitter-elisp
|
||||
g.tree-sitter-graphql
|
||||
g.tree-sitter-gitcommit
|
||||
g.tree-sitter-gitignore
|
||||
g.tree-sitter-haskell
|
||||
g.tree-sitter-html
|
||||
g.tree-sitter-java
|
||||
g.tree-sitter-javascript
|
||||
g.tree-sitter-jq
|
||||
g.tree-sitter-json
|
||||
g.tree-sitter-json5
|
||||
g.tree-sitter-just
|
||||
g.tree-sitter-ledger
|
||||
g.tree-sitter-llvm
|
||||
g.tree-sitter-make
|
||||
g.tree-sitter-nginx
|
||||
g.tree-sitter-nix
|
||||
g.tree-sitter-org
|
||||
g.tree-sitter-php
|
||||
g.tree-sitter-prisma
|
||||
g.tree-sitter-python
|
||||
g.tree-sitter-rust
|
||||
g.tree-sitter-rust-format-args
|
||||
g.tree-sitter-scss
|
||||
g.tree-sitter-sql
|
||||
g.tree-sitter-toml
|
||||
g.tree-sitter-tsx
|
||||
g.tree-sitter-typescript
|
||||
g.tree-sitter-xml
|
||||
g.tree-sitter-yaml
|
||||
]))
|
||||
yaml-pro
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
envrc
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
consult-gh
|
||||
diff-hl
|
||||
forge
|
||||
git-timemachine
|
||||
magit
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
cape
|
||||
consult
|
||||
corfu
|
||||
embark-consult
|
||||
marginalia
|
||||
orderless
|
||||
vertico
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
org-modern
|
||||
org-present
|
||||
org-roam
|
||||
ox-slack
|
||||
verb
|
||||
visual-fill-column
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
eat
|
||||
];
|
||||
};
|
||||
}
|
||||
(mkIf (cfg.redbook.enable && cfg.desktop.enable) {
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
slack
|
||||
];
|
||||
extraConfig = builtins.readFile ./slack.el;
|
||||
};
|
||||
})
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
ledger-mode
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
age
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.claude-code = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
(epkgs.trivialBuild {
|
||||
pname = "claude-code";
|
||||
version = "0.4.5";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "stevemolitor";
|
||||
repo = "claude-code.el";
|
||||
rev = "03199df8b3a1e9cd4857f0851f7a912ba524aff3";
|
||||
sha256 = "sha256-5QJrWIu4EgnHcOqMwlrs2JBBx7aI9OaSJswesr6Apfk=";
|
||||
};
|
||||
packageRequires = [ epkgs.inheritenv ];
|
||||
})
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.bat = {
|
||||
config.theme = "catppuccin-frappe";
|
||||
themes = {
|
||||
catppuccin-frappe = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "sublime-text"; # Bat uses sublime syntax for its themes
|
||||
rev = "3d8625d937d89869476e94bc100192aa220ce44a";
|
||||
sha256 = "3ABUsfJpb6RO6AiuuSL5gwDofJIwC5tlEMzBrlY9/s0=";
|
||||
};
|
||||
file = "Frappe.tmTheme";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.helix.settings.theme = "catppuccin_frappe";
|
||||
}
|
||||
{
|
||||
programs.tmux.plugins = [
|
||||
{
|
||||
plugin = pkgs.tmuxPlugins.catppuccin;
|
||||
extraConfig = ''set -g @catppuccin_window_tabs_enabled on
|
||||
set -g @catppuccin_window_default_text "#W"
|
||||
set -g @catppuccin_window_current_text "#W"'';
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
xdg = {
|
||||
enable = false
|
||||
;
|
||||
# configFile."lazygit/config.yml" = {
|
||||
# enable = true;
|
||||
# source = pkgs.fetchFromGitHub
|
||||
# {
|
||||
# owner = "catppuccin";
|
||||
# repo = "lazygit";
|
||||
# rev = "b2ecb6d41b6f54a82104879573c538e8bdaeb0bf"; # Replace with the latest commit hash
|
||||
# sha256 = "9BBmWRcjNaJE9T0RKVEJaSnkrbMom0CLYE8PzAT6yFw=";
|
||||
# } + /themes/frappe.yml;
|
||||
# };
|
||||
};
|
||||
}
|
||||
{
|
||||
programs.starship.settings = builtins.fromTOML (builtins.readFile
|
||||
(pkgs.fetchFromGitHub
|
||||
{
|
||||
owner = "catppuccin";
|
||||
repo = "starship";
|
||||
rev = "3e3e54410c3189053f4da7a7043261361a1ed1bc"; # Replace with the latest commit hash
|
||||
sha256 = "soEBVlq3ULeiZFAdQYMRFuswIIhI9bclIU8WXjxd7oY=";
|
||||
} + /palettes/frappe.toml));
|
||||
}
|
||||
{
|
||||
programs.ghostty.settings.theme = "Catppuccin Frappe";
|
||||
}
|
||||
{
|
||||
programs.emacs = {
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
catppuccin-theme
|
||||
];
|
||||
extraConfig = ''(defvar my-base-font-size ${if pkgs.stdenv.isDarwin then "130" else "100"})
|
||||
(require 'catppuccin-theme)
|
||||
(setopt catppuccin-flavor 'frappe)
|
||||
(load-theme 'catppuccin :no-confirm)
|
||||
|
||||
;; (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 'default nil :font "Iosevka Term SS14" :height my-base-font-size)
|
||||
(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 my-base-font-size)
|
||||
'';
|
||||
};
|
||||
}
|
||||
]);
|
||||
}
|
||||
Reference in New Issue
Block a user