finalize: jonas@comfy-station
This commit is contained in:
@@ -22,13 +22,12 @@
|
|||||||
keys = ["borg" "passgit"];
|
keys = ["borg" "passgit"];
|
||||||
};
|
};
|
||||||
hive.yubikey.withCCID = false;
|
hive.yubikey.withCCID = false;
|
||||||
#hive.doom.enable = true;
|
hive.doom.enable = true;
|
||||||
#hive.doom.asDefaultEditor = true;
|
hive.doom.asDefaultEditor = true;
|
||||||
#hive.doom.enableCopilot = true;
|
hive.doom.enableCopilot = true;
|
||||||
#hive.doom.withNixPkgs = true;
|
hive.doom.withNixPkgs = true;
|
||||||
#hive.doom.withShellPkgs = true;
|
hive.doom.withShellPkgs = true;
|
||||||
#hive.doom.withPythonPkgs = true;
|
hive.doom.withPythonPkgs = true;
|
||||||
#hive.jj.enable = true;
|
|
||||||
|
|
||||||
# Make session variables available in systemd units
|
# Make session variables available in systemd units
|
||||||
# SEE: https://github.com/nix-community/home-manager/pull/5543
|
# SEE: https://github.com/nix-community/home-manager/pull/5543
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
self.homeModules.yubikey
|
self.homeModules.yubikey
|
||||||
self.homeModules.zsh
|
self.homeModules.zsh
|
||||||
self.homeModules.nix-scripts
|
self.homeModules.nix-scripts
|
||||||
|
self.homeModules.doom
|
||||||
|
self.homeModules.jj
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
290
modules/doom/doom.nix
Normal file
290
modules/doom/doom.nix
Normal file
@@ -0,0 +1,290 @@
|
|||||||
|
{
|
||||||
|
flake.homeModules.doom = {
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.hive.doom;
|
||||||
|
doom-pkgs = with pkgs; [
|
||||||
|
cmake
|
||||||
|
emacs-all-the-icons-fonts
|
||||||
|
fira
|
||||||
|
fira-code-symbols
|
||||||
|
fontconfig
|
||||||
|
gcc
|
||||||
|
nerd-fonts.fira-code
|
||||||
|
];
|
||||||
|
default-core-pkgs = with pkgs; [
|
||||||
|
(ripgrep.override {withPCRE2 = true;})
|
||||||
|
(aspellWithDicts (d: [d.en d.de d.en-computers d.en-science]))
|
||||||
|
binutils
|
||||||
|
editorconfig-core-c
|
||||||
|
fd
|
||||||
|
git
|
||||||
|
gnumake
|
||||||
|
gnutls
|
||||||
|
ispell
|
||||||
|
libtool
|
||||||
|
vscode-langservers-extracted
|
||||||
|
(pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
name = "epdfinfo";
|
||||||
|
phases = "installPhase";
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
ln -s $(${pkgs.findutils}/bin/find ${pkgs.emacsPackages.pdf-tools}/ -name epdfinfo) $out/bin/
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
default-shell-pkgs = with pkgs; [
|
||||||
|
bash-language-server
|
||||||
|
];
|
||||||
|
default-nix-pkgs = with pkgs; [
|
||||||
|
alejandra
|
||||||
|
nixd
|
||||||
|
];
|
||||||
|
default-latex-pkgs = with pkgs; [
|
||||||
|
pandoc
|
||||||
|
poppler
|
||||||
|
texlab
|
||||||
|
texlive.combined.scheme-medium
|
||||||
|
];
|
||||||
|
default-cxx-pkgs = with pkgs; [
|
||||||
|
clang
|
||||||
|
clang-tools
|
||||||
|
cmake
|
||||||
|
cppcheck
|
||||||
|
doxygen
|
||||||
|
gdb
|
||||||
|
ninja
|
||||||
|
];
|
||||||
|
default-python-pkgs = with pkgs; [
|
||||||
|
python312
|
||||||
|
python312Packages.black
|
||||||
|
pyright
|
||||||
|
];
|
||||||
|
doom-path-pkgs =
|
||||||
|
lib.optionals cfg.withLatexPkgs (cfg.overrideLatexPkgs default-latex-pkgs)
|
||||||
|
++ lib.optionals cfg.withShellPkgs (cfg.overrideShellPkgs default-shell-pkgs)
|
||||||
|
++ lib.optionals cfg.withNixPkgs (cfg.overrideNixPkgs default-nix-pkgs)
|
||||||
|
++ lib.optionals cfg.withCXXPkgs (cfg.overrideCXXPkgs default-cxx-pkgs)
|
||||||
|
++ lib.optionals cfg.withPythonPkgs (cfg.overridePythonPkgs default-python-pkgs)
|
||||||
|
++ lib.optional cfg.enableCopilot pkgs.unstable.copilot-language-server
|
||||||
|
++ default-core-pkgs;
|
||||||
|
doom-socket-name = "main";
|
||||||
|
wrapped-emacs = pkgs.symlinkJoin {
|
||||||
|
name = "wrapped-emacs";
|
||||||
|
paths = [pkgs.emacs30];
|
||||||
|
nativeBuildInputs = [pkgs.makeBinaryWrapper];
|
||||||
|
postBuild = ''
|
||||||
|
wrapProgram $out/bin/emacs \
|
||||||
|
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
|
||||||
|
--add-flags "--init-directory=${config.xdg.configHome}/doom-emacs" \
|
||||||
|
--set DOOMDIR "${config.home.sessionVariables.DOOMDIR}" \
|
||||||
|
--set DOOMLOCALDIR "${config.home.sessionVariables.DOOMLOCALDIR}"
|
||||||
|
|
||||||
|
wrapProgram $out/bin/emacsclient \
|
||||||
|
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
|
||||||
|
--set DOOMDIR "${config.home.sessionVariables.DOOMDIR}" \
|
||||||
|
--set DOOMLOCALDIR "${config.home.sessionVariables.DOOMLOCALDIR}"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
doom-setup = pkgs.writeShellScript "doom-setup" ''
|
||||||
|
export PATH="${lib.makeBinPath doom-path-pkgs}:$PATH"
|
||||||
|
export EMACS="${wrapped-emacs}/bin/emacs"
|
||||||
|
export DOOMDIR="${config.home.sessionVariables.DOOMDIR}"
|
||||||
|
export DOOMLOCALDIR="${config.home.sessionVariables.DOOMLOCALDIR}"
|
||||||
|
if [ ! -d "$DOOMLOCALDIR" ]; then
|
||||||
|
${config.xdg.configHome}/doom-emacs/bin/doom install --force --no-env
|
||||||
|
else
|
||||||
|
${config.xdg.configHome}/doom-emacs/bin/doom "$@"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
doom-open = pkgs.writeShellScriptBin "doom-open" ''
|
||||||
|
export EMACS_SOCKET_NAME="$XDG_RUNTIME_DIR/emacs/${doom-socket-name}"
|
||||||
|
if [ -t 0 ]; then
|
||||||
|
exec ${wrapped-emacs}/bin/emacsclient -t "$@"
|
||||||
|
else
|
||||||
|
exec ${wrapped-emacs}/bin/emacsclient -c "$@"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
options.hive.doom = {
|
||||||
|
enable = lib.mkEnableOption "Enable Doom Emacs";
|
||||||
|
asDefaultEditor = lib.mkEnableOption "set the EDITOR variable to use the current emacs server (graphical/non-graphical)";
|
||||||
|
enableCopilot = lib.mkEnableOption "Enable Copilot in Doom Emacs";
|
||||||
|
enableTidal = lib.mkEnableOption "Enable TidalCycles";
|
||||||
|
withLatexPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path";
|
||||||
|
withShellPkgs = lib.mkEnableOption "Enable shell packages in doom path";
|
||||||
|
withNixPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path";
|
||||||
|
withCXXPkgs = lib.mkEnableOption "Enable CXX packages in doom path";
|
||||||
|
withPythonPkgs = lib.mkEnableOption "Enable python packages in doom path";
|
||||||
|
overrideLatexPkgs = lib.mkOption {
|
||||||
|
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||||
|
default = pkgs: pkgs;
|
||||||
|
example = ''
|
||||||
|
prev: with pkgs; [
|
||||||
|
texlive.combined.scheme-full
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
description = "Override the default LaTeX packages in the doom path.";
|
||||||
|
};
|
||||||
|
overrideShellPkgs = lib.mkOption {
|
||||||
|
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||||
|
default = pkgs: pkgs;
|
||||||
|
example = ''
|
||||||
|
prev: with pkgs; [
|
||||||
|
shellcheck
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
description = "Override the default shell packages in the doom path.";
|
||||||
|
};
|
||||||
|
overrideNixPkgs = lib.mkOption {
|
||||||
|
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||||
|
default = pkgs: pkgs;
|
||||||
|
example = ''
|
||||||
|
prev: with pkgs; [
|
||||||
|
nixpkgs-fmt
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
description = "Override the default Nix packages in the doom path.";
|
||||||
|
};
|
||||||
|
overrideCXXPkgs = lib.mkOption {
|
||||||
|
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||||
|
default = pkgs: pkgs;
|
||||||
|
example = ''
|
||||||
|
prev: with pkgs; [
|
||||||
|
openmp
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
description = "Override the default C++ packages in the doom path.";
|
||||||
|
};
|
||||||
|
overridePythonPkgs = lib.mkOption {
|
||||||
|
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||||
|
default = pkgs: pkgs;
|
||||||
|
example = ''
|
||||||
|
prev: with pkgs; [
|
||||||
|
pythonPackages.black
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
description = "Override the default Python packages in the doom path.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
fonts.fontconfig.enable = true;
|
||||||
|
|
||||||
|
programs.emacs = {
|
||||||
|
enable = true;
|
||||||
|
package = wrapped-emacs;
|
||||||
|
};
|
||||||
|
|
||||||
|
home = {
|
||||||
|
sessionPath = ["${config.xdg.configHome}/doom-emacs/bin"];
|
||||||
|
sessionVariables =
|
||||||
|
{
|
||||||
|
DOOMDIR = "${config.xdg.configHome}/doom-config";
|
||||||
|
DOOMLOCALDIR = "${config.xdg.configHome}/doom-local";
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs cfg.asDefaultEditor {
|
||||||
|
EDITOR = "${doom-open.name}";
|
||||||
|
};
|
||||||
|
packages = doom-pkgs ++ lib.optional cfg.asDefaultEditor doom-open;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.doom-emacs-server = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Doom Emacs Server";
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${wrapped-emacs}/bin/emacs --fg-daemon=${doom-socket-name}";
|
||||||
|
SuccessExitStatus = 15;
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = []; # Lazy start by socket
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.user.sockets.doom-emacs-server = {
|
||||||
|
Socket = {
|
||||||
|
ListenStream = "/run/user/%U/emacs/${doom-socket-name}";
|
||||||
|
DirectoryMode = "0700";
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = ["sockets.target"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg = {
|
||||||
|
enable = true;
|
||||||
|
configFile = {
|
||||||
|
"doom-config/splash.png" = {
|
||||||
|
source = ./static/splash.png;
|
||||||
|
};
|
||||||
|
"doom-config/config.el" = {
|
||||||
|
source = ./static/config.el;
|
||||||
|
};
|
||||||
|
"doom-config/config.d/copilot.el" = {
|
||||||
|
enable = cfg.enableCopilot;
|
||||||
|
source = ./static/config.d/copilot.el;
|
||||||
|
};
|
||||||
|
"doom-config/packages/treesit-docgen.el" = {
|
||||||
|
source = ./static/packages/treesit-docgen.el;
|
||||||
|
};
|
||||||
|
"doom-config/init.el" = {
|
||||||
|
source = ./static/init.el;
|
||||||
|
onChange = "${doom-setup} sync --force -e";
|
||||||
|
};
|
||||||
|
"doom-config/packages.el" = {
|
||||||
|
source = ./static/packages.el;
|
||||||
|
onChange = "${doom-setup} sync --force -u -e";
|
||||||
|
};
|
||||||
|
"doom-config/packages.d/copilot.el" = {
|
||||||
|
enable = cfg.enableCopilot;
|
||||||
|
source = ./static/packages.d/copilot.el;
|
||||||
|
onChange = "${doom-setup} sync --force -u -e";
|
||||||
|
};
|
||||||
|
"doom-config/packages.d/tidal.el" = {
|
||||||
|
enable = cfg.enableTidal;
|
||||||
|
source = ./static/packages.d/tidal.el;
|
||||||
|
onChange = "${doom-setup} sync --force -u -e";
|
||||||
|
};
|
||||||
|
"doom-emacs" = {
|
||||||
|
source = builtins.fetchGit {
|
||||||
|
url = "https://github.com/doomemacs/doomemacs";
|
||||||
|
rev = "a0d6aac43fc94def29c98826e2f0088bcb703d13";
|
||||||
|
};
|
||||||
|
onChange = "${doom-setup} --force sync -u -e";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
desktopEntries = {
|
||||||
|
emacs = {
|
||||||
|
name = "Doom Emacs";
|
||||||
|
genericName = "Text Editor";
|
||||||
|
icon = ./static/icon.png;
|
||||||
|
exec = "${wrapped-emacs}/bin/emacs %F";
|
||||||
|
terminal = false;
|
||||||
|
categories = ["Application" "Development" "TextEditor"];
|
||||||
|
mimeType = ["text/*"];
|
||||||
|
settings = {
|
||||||
|
StartupWMClass = "Doom Emacs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
emacsclient = {
|
||||||
|
name = "Doom Emacs (Client)";
|
||||||
|
genericName = "Text Editor";
|
||||||
|
icon = ./static/icon.png;
|
||||||
|
exec = ''
|
||||||
|
sh -c "if [ -n \\"\\$*\\" ]; then exec ${wrapped-emacs}/bin/emacsclient --alternate-editor= --display=\\"\\$DISPLAY\\" \\"\\$@\\"; else exec emacsclient --alternate-editor= --create-frame; fi" sh %F
|
||||||
|
'';
|
||||||
|
terminal = false;
|
||||||
|
categories = ["Application" "Development" "TextEditor"];
|
||||||
|
mimeType = ["text/*"];
|
||||||
|
settings = {
|
||||||
|
StartupWMClass = "Doom Emacs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
37
modules/programs/jj.nix
Normal file
37
modules/programs/jj.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
flake.homeModules.jj = {
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.hive.jj;
|
||||||
|
in {
|
||||||
|
options.hive.jj = {
|
||||||
|
followGit = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Follow the current git configuration";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
jujutsu
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.jujutsu = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
user = lib.optionalAttrs cfg.followGit {
|
||||||
|
name = config.programs.git.settings.user.name;
|
||||||
|
email = config.programs.git.settings.user.email;
|
||||||
|
};
|
||||||
|
ui = lib.optionalAttrs (cfg.followGit && config.programs.difftastic.enable) {
|
||||||
|
diff-formatter = ["${pkgs.difftastic}/bin/difft" "--color=always" "$left" "$right"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./doom.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,288 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.hive.doom;
|
|
||||||
doom-pkgs = with pkgs; [
|
|
||||||
cmake
|
|
||||||
emacs-all-the-icons-fonts
|
|
||||||
fira
|
|
||||||
fira-code-symbols
|
|
||||||
fontconfig
|
|
||||||
gcc
|
|
||||||
nerd-fonts.fira-code
|
|
||||||
];
|
|
||||||
default-core-pkgs = with pkgs; [
|
|
||||||
(ripgrep.override {withPCRE2 = true;})
|
|
||||||
(aspellWithDicts (d: [d.en d.de d.en-computers d.en-science]))
|
|
||||||
binutils
|
|
||||||
editorconfig-core-c
|
|
||||||
fd
|
|
||||||
git
|
|
||||||
gnumake
|
|
||||||
gnutls
|
|
||||||
ispell
|
|
||||||
libtool
|
|
||||||
vscode-langservers-extracted
|
|
||||||
(pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
name = "epdfinfo";
|
|
||||||
phases = "installPhase";
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
ln -s $(${pkgs.findutils}/bin/find ${pkgs.emacsPackages.pdf-tools}/ -name epdfinfo) $out/bin/
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
];
|
|
||||||
default-shell-pkgs = with pkgs; [
|
|
||||||
bash-language-server
|
|
||||||
];
|
|
||||||
default-nix-pkgs = with pkgs; [
|
|
||||||
alejandra
|
|
||||||
nixd
|
|
||||||
];
|
|
||||||
default-latex-pkgs = with pkgs; [
|
|
||||||
pandoc
|
|
||||||
poppler
|
|
||||||
texlab
|
|
||||||
texlive.combined.scheme-medium
|
|
||||||
];
|
|
||||||
default-cxx-pkgs = with pkgs; [
|
|
||||||
clang
|
|
||||||
clang-tools
|
|
||||||
cmake
|
|
||||||
cppcheck
|
|
||||||
doxygen
|
|
||||||
gdb
|
|
||||||
ninja
|
|
||||||
];
|
|
||||||
default-python-pkgs = with pkgs; [
|
|
||||||
python312
|
|
||||||
python312Packages.black
|
|
||||||
pyright
|
|
||||||
];
|
|
||||||
doom-path-pkgs =
|
|
||||||
lib.optionals cfg.withLatexPkgs (cfg.overrideLatexPkgs default-latex-pkgs)
|
|
||||||
++ lib.optionals cfg.withShellPkgs (cfg.overrideShellPkgs default-shell-pkgs)
|
|
||||||
++ lib.optionals cfg.withNixPkgs (cfg.overrideNixPkgs default-nix-pkgs)
|
|
||||||
++ lib.optionals cfg.withCXXPkgs (cfg.overrideCXXPkgs default-cxx-pkgs)
|
|
||||||
++ lib.optionals cfg.withPythonPkgs (cfg.overridePythonPkgs default-python-pkgs)
|
|
||||||
++ lib.optional cfg.enableCopilot pkgs.unstable.copilot-language-server
|
|
||||||
++ default-core-pkgs;
|
|
||||||
doom-socket-name = "main";
|
|
||||||
wrapped-emacs = pkgs.symlinkJoin {
|
|
||||||
name = "wrapped-emacs";
|
|
||||||
paths = [pkgs.emacs30];
|
|
||||||
nativeBuildInputs = [pkgs.makeBinaryWrapper];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/emacs \
|
|
||||||
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
|
|
||||||
--add-flags "--init-directory=${config.xdg.configHome}/doom-emacs" \
|
|
||||||
--set DOOMDIR "${config.home.sessionVariables.DOOMDIR}" \
|
|
||||||
--set DOOMLOCALDIR "${config.home.sessionVariables.DOOMLOCALDIR}"
|
|
||||||
|
|
||||||
wrapProgram $out/bin/emacsclient \
|
|
||||||
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
|
|
||||||
--set DOOMDIR "${config.home.sessionVariables.DOOMDIR}" \
|
|
||||||
--set DOOMLOCALDIR "${config.home.sessionVariables.DOOMLOCALDIR}"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
doom-setup = pkgs.writeShellScript "doom-setup" ''
|
|
||||||
export PATH="${lib.makeBinPath doom-path-pkgs}:$PATH"
|
|
||||||
export EMACS="${wrapped-emacs}/bin/emacs"
|
|
||||||
export DOOMDIR="${config.home.sessionVariables.DOOMDIR}"
|
|
||||||
export DOOMLOCALDIR="${config.home.sessionVariables.DOOMLOCALDIR}"
|
|
||||||
if [ ! -d "$DOOMLOCALDIR" ]; then
|
|
||||||
${config.xdg.configHome}/doom-emacs/bin/doom install --force --no-env
|
|
||||||
else
|
|
||||||
${config.xdg.configHome}/doom-emacs/bin/doom "$@"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
doom-open = pkgs.writeShellScriptBin "doom-open" ''
|
|
||||||
export EMACS_SOCKET_NAME="$XDG_RUNTIME_DIR/emacs/${doom-socket-name}"
|
|
||||||
if [ -t 0 ]; then
|
|
||||||
exec ${wrapped-emacs}/bin/emacsclient -t "$@"
|
|
||||||
else
|
|
||||||
exec ${wrapped-emacs}/bin/emacsclient -c "$@"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
options.hive.doom = {
|
|
||||||
enable = lib.mkEnableOption "Enable Doom Emacs";
|
|
||||||
asDefaultEditor = lib.mkEnableOption "set the EDITOR variable to use the current emacs server (graphical/non-graphical)";
|
|
||||||
enableCopilot = lib.mkEnableOption "Enable Copilot in Doom Emacs";
|
|
||||||
enableTidal = lib.mkEnableOption "Enable TidalCycles";
|
|
||||||
withLatexPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path";
|
|
||||||
withShellPkgs = lib.mkEnableOption "Enable shell packages in doom path";
|
|
||||||
withNixPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path";
|
|
||||||
withCXXPkgs = lib.mkEnableOption "Enable CXX packages in doom path";
|
|
||||||
withPythonPkgs = lib.mkEnableOption "Enable python packages in doom path";
|
|
||||||
overrideLatexPkgs = lib.mkOption {
|
|
||||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
|
||||||
default = pkgs: pkgs;
|
|
||||||
example = ''
|
|
||||||
prev: with pkgs; [
|
|
||||||
texlive.combined.scheme-full
|
|
||||||
]
|
|
||||||
'';
|
|
||||||
description = "Override the default LaTeX packages in the doom path.";
|
|
||||||
};
|
|
||||||
overrideShellPkgs = lib.mkOption {
|
|
||||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
|
||||||
default = pkgs: pkgs;
|
|
||||||
example = ''
|
|
||||||
prev: with pkgs; [
|
|
||||||
shellcheck
|
|
||||||
]
|
|
||||||
'';
|
|
||||||
description = "Override the default shell packages in the doom path.";
|
|
||||||
};
|
|
||||||
overrideNixPkgs = lib.mkOption {
|
|
||||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
|
||||||
default = pkgs: pkgs;
|
|
||||||
example = ''
|
|
||||||
prev: with pkgs; [
|
|
||||||
nixpkgs-fmt
|
|
||||||
]
|
|
||||||
'';
|
|
||||||
description = "Override the default Nix packages in the doom path.";
|
|
||||||
};
|
|
||||||
overrideCXXPkgs = lib.mkOption {
|
|
||||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
|
||||||
default = pkgs: pkgs;
|
|
||||||
example = ''
|
|
||||||
prev: with pkgs; [
|
|
||||||
openmp
|
|
||||||
]
|
|
||||||
'';
|
|
||||||
description = "Override the default C++ packages in the doom path.";
|
|
||||||
};
|
|
||||||
overridePythonPkgs = lib.mkOption {
|
|
||||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
|
||||||
default = pkgs: pkgs;
|
|
||||||
example = ''
|
|
||||||
prev: with pkgs; [
|
|
||||||
pythonPackages.black
|
|
||||||
]
|
|
||||||
'';
|
|
||||||
description = "Override the default Python packages in the doom path.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
fonts.fontconfig.enable = true;
|
|
||||||
|
|
||||||
programs.emacs = {
|
|
||||||
enable = true;
|
|
||||||
package = wrapped-emacs;
|
|
||||||
};
|
|
||||||
|
|
||||||
home = {
|
|
||||||
sessionPath = ["${config.xdg.configHome}/doom-emacs/bin"];
|
|
||||||
sessionVariables =
|
|
||||||
{
|
|
||||||
DOOMDIR = "${config.xdg.configHome}/doom-config";
|
|
||||||
DOOMLOCALDIR = "${config.xdg.configHome}/doom-local";
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs cfg.asDefaultEditor {
|
|
||||||
EDITOR = "${doom-open.name}";
|
|
||||||
};
|
|
||||||
packages = doom-pkgs ++ lib.optional cfg.asDefaultEditor doom-open;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.services.doom-emacs-server = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Doom Emacs Server";
|
|
||||||
};
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${wrapped-emacs}/bin/emacs --fg-daemon=${doom-socket-name}";
|
|
||||||
SuccessExitStatus = 15;
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = []; # Lazy start by socket
|
|
||||||
};
|
|
||||||
};
|
|
||||||
systemd.user.sockets.doom-emacs-server = {
|
|
||||||
Socket = {
|
|
||||||
ListenStream = "/run/user/%U/emacs/${doom-socket-name}";
|
|
||||||
DirectoryMode = "0700";
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = ["sockets.target"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg = {
|
|
||||||
enable = true;
|
|
||||||
configFile = {
|
|
||||||
"doom-config/splash.png" = {
|
|
||||||
source = ./static/splash.png;
|
|
||||||
};
|
|
||||||
"doom-config/config.el" = {
|
|
||||||
source = ./static/config.el;
|
|
||||||
};
|
|
||||||
"doom-config/config.d/copilot.el" = {
|
|
||||||
enable = cfg.enableCopilot;
|
|
||||||
source = ./static/config.d/copilot.el;
|
|
||||||
};
|
|
||||||
"doom-config/packages/treesit-docgen.el" = {
|
|
||||||
source = ./static/packages/treesit-docgen.el;
|
|
||||||
};
|
|
||||||
"doom-config/init.el" = {
|
|
||||||
source = ./static/init.el;
|
|
||||||
onChange = "${doom-setup} sync --force -e";
|
|
||||||
};
|
|
||||||
"doom-config/packages.el" = {
|
|
||||||
source = ./static/packages.el;
|
|
||||||
onChange = "${doom-setup} sync --force -u -e";
|
|
||||||
};
|
|
||||||
"doom-config/packages.d/copilot.el" = {
|
|
||||||
enable = cfg.enableCopilot;
|
|
||||||
source = ./static/packages.d/copilot.el;
|
|
||||||
onChange = "${doom-setup} sync --force -u -e";
|
|
||||||
};
|
|
||||||
"doom-config/packages.d/tidal.el" = {
|
|
||||||
enable = cfg.enableTidal;
|
|
||||||
source = ./static/packages.d/tidal.el;
|
|
||||||
onChange = "${doom-setup} sync --force -u -e";
|
|
||||||
};
|
|
||||||
"doom-emacs" = {
|
|
||||||
source = builtins.fetchGit {
|
|
||||||
url = "https://github.com/doomemacs/doomemacs";
|
|
||||||
rev = "a0d6aac43fc94def29c98826e2f0088bcb703d13";
|
|
||||||
};
|
|
||||||
onChange = "${doom-setup} --force sync -u -e";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
desktopEntries = {
|
|
||||||
emacs = {
|
|
||||||
name = "Doom Emacs";
|
|
||||||
genericName = "Text Editor";
|
|
||||||
icon = ./static/icon.png;
|
|
||||||
exec = "${wrapped-emacs}/bin/emacs %F";
|
|
||||||
terminal = false;
|
|
||||||
categories = ["Application" "Development" "TextEditor"];
|
|
||||||
mimeType = ["text/*"];
|
|
||||||
settings = {
|
|
||||||
StartupWMClass = "Doom Emacs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
emacsclient = {
|
|
||||||
name = "Doom Emacs (Client)";
|
|
||||||
genericName = "Text Editor";
|
|
||||||
icon = ./static/icon.png;
|
|
||||||
exec = ''
|
|
||||||
sh -c "if [ -n \\"\\$*\\" ]; then exec ${wrapped-emacs}/bin/emacsclient --alternate-editor= --display=\\"\\$DISPLAY\\" \\"\\$@\\"; else exec emacsclient --alternate-editor= --create-frame; fi" sh %F
|
|
||||||
'';
|
|
||||||
terminal = false;
|
|
||||||
categories = ["Application" "Development" "TextEditor"];
|
|
||||||
mimeType = ["text/*"];
|
|
||||||
settings = {
|
|
||||||
StartupWMClass = "Doom Emacs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.hive.jj;
|
|
||||||
in {
|
|
||||||
options.hive.jj = {
|
|
||||||
enable = lib.mkEnableOption "Enable jj vcs";
|
|
||||||
followGit = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
description = "Follow the current git configuration";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
jujutsu
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.jujutsu = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
user = lib.optionalAttrs cfg.followGit {
|
|
||||||
name = config.programs.git.settings.user.name;
|
|
||||||
email = config.programs.git.settings.user.email;
|
|
||||||
};
|
|
||||||
ui = lib.optionalAttrs (cfg.followGit && config.programs.difftastic.enable) {
|
|
||||||
diff-formatter = ["${pkgs.difftastic}/bin/difft" "--color=always" "$left" "$right"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user