forked from FG42/FG42
1
0
Fork 0
FG42/nix/fg42/derivation.nix

177 lines
4.6 KiB
Nix
Raw Normal View History

# Fg42 - Emacs Editor for advance users
#
2024-02-18 16:08:02 +00:00
# Copyright (c) 2010-2024 Sameer Rahmani <lxsameer@gnu.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{ lib
, config
, stdenv
, git
, texinfo
, gcc
, bash
, utils
, emacsPackagesFor
, makeFontsConf
, xorg
, maintainers
, ...
}:
with builtins;
2024-02-22 14:19:57 +00:00
let
cfg = config.fg42;
emacs = cfg.emacs;
version = cfg.version;
emacsBundle = (emacsPackagesFor emacs).withPackages (_: cfg.elispPackages);
paths = map (x: "${x}/bin/") cfg.paths;
pathsStr = lib.strings.concatStrings (lib.strings.intersperse ":" paths);
mimeTypes = builtins.concatStringsSep ";" cfg.mimeTypes;
fontsConf = makeFontsConf { fontDirectories = cfg.fonts; };
2024-04-05 22:32:40 +01:00
in
stdenv.mkDerivation rec {
2024-03-27 23:50:44 +00:00
inherit version;
pname = "FG42";
src = ../../.;
2024-02-22 14:19:57 +00:00
2024-03-27 23:50:44 +00:00
buildPhase = ''
2024-02-22 14:19:57 +00:00
LISPDIR=$out/share/fg42/
mkdir -p $out/bin
2024-04-05 22:32:40 +01:00
mkdir -p $out/share/applications/
2024-02-22 14:19:57 +00:00
install -d $LISPDIR
2024-02-22 14:19:57 +00:00
cp -rv ${src}/lisp/ $LISPDIR
2024-02-22 14:19:57 +00:00
cp -rv ${src}/share $out/
cp -rv ${src}/snippets $LISPDIR/snippets
cp "${fontsConf}" $LISPDIR/fonts.conf
chmod 755 $LISPDIR -R
export FONTCONFIG_FILE="$LISPDIR/fonts.conf"
2024-02-22 14:19:57 +00:00
2024-04-05 22:32:40 +01:00
cat >> $out/share/applications/FG42.desktop << EOF
[Desktop Entry]
Encoding=UTF-8
Name=FG42
GenericName=FG42
Comment=The nix base Emacs bundle for advance users
MimeType=${mimeTypes}
2024-04-05 22:32:40 +01:00
Type=Application
Terminal=false
Categories=Development;TextEditor;
StartupWMClass=FG42
Exec=${placeholder "out"}/bin/fg42
Icon=fg42
Version=${version}
EOF
2024-02-22 14:19:57 +00:00
runHook preBuild
cd $LISPDIR
emacs -L . --batch -f batch-byte-compile *.el
cd -
cat >> $out/bin/fg42 << EOF
#!${stdenv.shell}
export FG42_HOME=${placeholder "out"}/share/fg42/
export FG42_EMACSD=~/.fg42/v4/emacs.d
export FG42_USE_NIX=true;
export PATH=${pathsStr}:$PATH
export FONTCONFIG_FILE="$LISPDIR/fonts.conf"
2024-02-22 14:19:57 +00:00
LIBRARY_PATH="\$(${stdenv.cc}/bin/cc -print-file-name=libgccjit.so):\$LIBRARY_PATH" \
FG42_WM=fales ${emacsBundle}/bin/emacs \
--name FG42 \
-q --no-splash --title FG42 \
-l \$FG42_HOME/lisp/fg42/init.el "\$@"
EOF
chmod +x $out/bin/fg42
runHook postBuild
cat >> $out/bin/fg42-wm << EOF
#!${stdenv.shell}
export FG42_HOME=${placeholder "out"}/share/fg42/
export FG42_EMACSD=~/.fg42/v4/emacs.d
export FG42_USE_NIX=true;
2024-03-09 22:00:49 +00:00
export PATH=${pathsStr}:\$PATH
export FONTCONFIG_FILE="$LISPDIR/fonts.conf"
2024-02-22 14:19:57 +00:00
# Disable access control for the current user.
2024-03-09 22:00:49 +00:00
${xorg.xhost}/bin/xhost +SI:localuser:\$USER
2024-02-22 14:19:57 +00:00
# Make Java applications aware this is a non-reparenting window manager.
export _JAVA_AWT_WM_NONREPARENTING=1
# Set default cursor.
xsetroot -cursor_name left_ptr
# Set keyboard repeat rate.
xset r rate 400 30
# Uncomment the following block to use the exwm-xim module.
# export XMODIFIERS=@im=exwm-xim
# export GTK_IM_MODULE=xim
# export QT_IM_MODULE=xim
# export CLUTTER_IM_MODULE=xim
LIBRARY_PATH="\$(${stdenv.cc}/bin/cc -print-file-name=libgccjit.so):\$LIBRARY_PATH" \
FG42_WM=true ${emacsBundle}/bin/emacs \
--name FG42 \
-q --no-splash --title FG42 \
-l \$FG42_HOME/lisp/fg42/init.el "\$@"
EOF
chmod +x $out/bin/fg42-wm
LISPDIR=$out/share/fg42/lisp/
emacs --batch -l package --eval "(package-generate-autoloads \"${pname}\" \"$LISPDIR\")"
2024-02-22 14:19:57 +00:00
runHook postBuild
'';
# installPhase = ''
# runHook preInstall
# runHook postInstall
# '';
2024-03-27 23:50:44 +00:00
buildInputs = [ emacs emacsBundle git texinfo gcc bash ];
2024-02-22 14:19:57 +00:00
addEmacsNativeLoadPath = true;
meta = {
broken = false;
platforms = emacs.meta.platforms;
homepage = "https://fg42.org/";
maintainers = [ maintainers.lxsameer ];
description = "The mighty editor for the Emacsians";
2024-02-22 14:19:57 +00:00
longDescription = ''
2024-03-27 23:50:44 +00:00
FG42 is a framework to create and editor and window manager based on GNU/Emacs.
It has a pre-defined setup as well which can be installed out of the box. But the
goal of this project is to provide the API necessary to create an integrated editor.
2024-03-27 23:50:44 +00:00
So you need to know about Emacs in advance.
'';
2024-02-22 14:19:57 +00:00
license = lib.licenses.gpl3Plus;
};
}