wip: refactor: crumb -> msyds

This commit is contained in:
2025-06-17 04:21:04 -06:00
parent 4073d5a077
commit 59982e7b4e
6 changed files with 210 additions and 54 deletions

View File

@@ -29,6 +29,7 @@
users.users = [ users.users = [
"crumb" "crumb"
"msyds"
]; ];
impermanence = { impermanence = {

141
modules/home/emacs.nix Normal file
View File

@@ -0,0 +1,141 @@
{ config, lib, pkgs, inputs, ... }@args:
let cfg = config.sydnix.emacs;
in {
options.sydnix.emacs = {
enable = lib.mkEnableOption "Emacs";
userDir = lib.mkOption {
description = ''
The path to the Emacs user directory.
'';
default = "/persist/dots/modules/home/users/msyds/emacs";
type = lib.types.path;
};
package = lib.mkPackageOption pkgs "emacs" {
default = [ "emacs-pgtk" ];
};
emacsPackages = lib.mkOption {
description = ''
Emacs packages to be installed. Used primarily for Elisp packages with
system dependencies.
'';
default = _epkgs: [];
type = lib.types.anything // {
merge =
_loc: defs: epkgs: lib.concatMap (f: f epkgs) (lib.getValues defs);
check = lib.isFunction;
};
};
fontPackages = lib.mkOption {
description = ''
Font packages to be made available to Emacs.
'';
type = lib.types.listOf lib.types.package;
default = [];
};
files = [
];
tex = {
enable = lib.mkEnableOption "TexLive";
extraTexPackages = lib.mkOption {
description = ''
TexLive package to be made available.
'';
default = {};
type = lib.types.attrsOf lib.types.package;
};
};
extraWrapProgramArgs = lib.mkOption {
description = ''
Extra arguments to pass to the final wrapProgram call.
'';
default = [];
type = lib.types.listOf lib.types.str;
apply = lib.escapeShellArgs;
};
};
config = lib.mkIf cfg.enable
(let
emacsDataDir = "${config.xdg.dataHome}/emacs";
emacsCacheDir = "${config.xdg.cacheHome}/emacs";
warnings =
if config.fonts.fontconfig.enable
then []
else [''This Emacs config will have font issues if
fonts.fontconfig.enable is not enabled.''];
essentialTexPackages = {
inherit (pkgs.texlive)
scheme-basic # Set of common packages.
fontspec
dvisvgm dvipng wrapfig # For Org-mode previews/export.
amsmath # Essential for mathematics.
ulem hyperref
capt-of
pgf # Includes TikZ.
tikz-cd # Commutative diagrams w/ TikZ.
quiver # Commutative diagrams w/ TikZ & q.uiver.app.
metafont
preview # For new-gen org-latex-preview.
mylatexformat # For new-gen org-latex-preview.
collection-fontsrecommended # Essential fonts.
etoolbox # For Org-mode exports.
;
};
my-texlive = pkgs.texlive.combine
(essentialTexPackages ++ cfg.tex.extraTexPackages);
emacs-final =
let ewp = (pkgs.emacsPackagesFor cfg.package).emacsWithPackages
cfg.emacsPackages;
in pkgs.symlinkJoin {
name = "sydmacs";
paths = [ ewp ];
nativeBuildInputs = [
pkgs.makeWrapper
];
postBuild = ''
# Read all emacs binaries into a Bash array.
readarray -d "" emacsen \
< <(find "$out/bin" \( -name emacs -or -name 'emacs-*' \) -print0)
for emacs in "''${emacsen[@]}"; do
wrapProgram "$emacs" \
--add-flags "--init-directory \"${cfg.userDir}\"" \
${cfg.extraWrapProgramArgs}
done
'';
meta = cfg.package.meta;
version = cfg.package.version;
};
in {
programs.emacs = {
enable = true;
package = emacs-final;
};
sydnix.impermanence.cache.directories = [
# Impermanence expects the path to be relative to ~.
(lib.removePrefix "${config.home.homeDirectory}/" emacsCacheDir)
];
sydnix.impermanence.directories = [
# Impermanence expects the path to be relative to ~.
(lib.removePrefix "${config.home.homeDirectory}/" emacsDataDir)
];
home.packages = cfg.fontPackages;
services.emacs = {
enable = true;
# Generate a desktop entry for emacsclient.
client.enable = true;
};
# We do this ourselves.
stylix.targets.emacs.enable = false;
});
}

View File

@@ -0,0 +1,24 @@
{ config, lib, pkgs, inputs, ... }@args:
let cfg = config.sydnix.users.msyds.emacs;
in {
options.sydnix.users.msyds.emacs = {
enable = lib.mkEnableOption ''Emacs, à la msyds'';
userDir = lib.mkOption {
description = ''
The path to the Emacs user directory.
'';
default = "/persist/dots/modules/home/users/msyds/emacs";
type = lib.types.path;
};
package = lib.mkPackageOption pkgs "emacs" {
default = [ "emacs-pgtk" ];
};
};
config = lib.mkIf cfg.enable {
sydnix.emacs = {
enable = true;
};
};
}

65
users/msyds/default.nix Executable file → Normal file
View File

@@ -1,70 +1,45 @@
{ {
systemConfiguration = { config, ... }: { systemConfiguration = { config, ... }: {
isNormalUser = true; isNormalUser = true;
# Unfortunately must be hard-coded so we can attribute it to the
# corresponding LDAP user.
uid = 1006;
# TODO: Don't hard-code `persist`. Use # TODO: Don't hard-code `persist`. Use
# config.sydnix.impermanence.persistGroupName. # config.sydnix.impermanence.persistGroupName.
extraGroups = [ extraGroups = [ "wheel" "persist" "input" ];
# Admin account.
"wheel"
# Default permissions to modify /persist.
"persist"
# Can modify the files served by Nginx.
"nginx"
# Can modify Deertopia's git-annex repos.
"annex"
# Can modify Deertopia's Jellyfin libraries.
"jellyfin"
# Can access slskd's downloads.
"slskd"
# Can access Nixarr's media.
"media"
"www"
];
initialHashedPassword = initialHashedPassword =
"$y$j9T$aEFDDwdTZbAc6VQRXrkBJ0$K8wxTGTWDihyX1wxJ.ZMH//wmQFfrGGUkLkxIU0Lyq8"; "$y$j9T$4pyDiPlhnN4UarQoY7Sn70$URZQKPJ3yU4WoQFHRhzm4uF3bM4U7OVYem3oPioykMC";
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = [
../../public-keys/ssh/crumb-at-guix-rebound.pub
../../public-keys/ssh/crumb-at-nixos-testbed.pub
../../public-keys/ssh/termux.pub
]; ];
}; };
homeConfiguration = { config, lib, pkgs, ... }: { homeConfiguration = { config, lib, pkgs, ... }: {
home.file.".ssh/id_ed25519".source = home.file.".ssh/id_ed25519".source =
config.lib.file.mkOutOfStoreSymlink config.lib.file.mkOutOfStoreSymlink
"/persist/private-keys/ssh/lain-at-deertopia"; "/persist/private-keys/ssh/crumb-at-nixos-testbed";
home.file.".ssh/id_ed25519.pub".source = home.file.".ssh/id_ed25519.pub".source =
../../public-keys/ssh/lain-at-deertopia.pub; ../../public-keys/ssh/crumb-at-nixos-testbed.pub;
programs.bash.enable = true; # A few settings without a home:
xdg.enable = true;
home.preferXdgDirectories = true;
home.sessionVariables = { home.packages = [];
"EDITOR" = "nvim";
"VISUAL" = "nvim";
};
home.packages = [ fonts.fontconfig.enable = true;
pkgs.btop
];
sydnix = { sydnix = {
impermanence = { xdg.enable = true;
enable = true; # Personal configurations.
directories = [ users.crumb = {
".ssh" bash.enable = true;
"public" direnv.enable = true;
]; git.enable = true;
nvim.enable = true;
readline.enable = true;
};
users.msyds = {
emacs.enable = true;
}; };
users.crumb.git.enable = true;
users.crumb.nvim.enable = true;
}; };
# Don't touch! # Don't touch!

View File

@@ -1,9 +0,0 @@
{ config, lib, pkgs, ... }:
let mutableSymlink = config.lib.file.mkOutOfStoreSymlink;
in {
home.file.".ssh/id_ed25519".source =
mutableSymlink "/persist/private-keys/ssh/lain-at-deertopia";
home.file.".ssh/id_ed25519.pub".source =
../../public-keys/ssh/lain-at-deertopia.pub;
}

24
users/msyds/secrets.yaml Executable file
View File

@@ -0,0 +1,24 @@
lastfm-password: ENC[AES256_GCM,data:gLcWwEFLhlVdMWez5Kaja17WFUA=,iv:KT9JO0823dn6qHnK2uOacMxHf4f776/soXFUVjUi1UA=,tag:n77bHc97yoKJPYvTCWhEuQ==,type:str]
librefm-password: ENC[AES256_GCM,data:0gDlWC/2CxryI6jH5RuJ,iv:8QVnhLko3H/IupQrNknxTR8NewfTP+DJyzvHk9Hzr48=,tag:Ku02Jp7p5G5qkO41Y3EFwA==,type:str]
github-oauth: ENC[AES256_GCM,data:t3FKFYu8edeBipC55nrG0lt1SCY8q1N5dZmvsCg7GLlVl4oDXW8FyQ==,iv:aewQ63H6c5wAw+YQRKbDT18Q05hSFsrdQBSYOUeVNeY=,tag:m1oCnSmLt+0rfcfSO4sOkQ==,type:str]
gitlab-oauth: ENC[AES256_GCM,data:1THznoGRZmq7BkisZoGa0ZiPG7aSmkV06SY=,iv:Gq6UPHBBrnpkiAo4CZipc89kJ9mfJrwIp9NmUmjtKBo=,tag:UhvgCQlnkTEQ4hEbCTM6ow==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1qayk0d0f765v57pedm7mtau6qkmv8rh6jtaqm40g5g9armaty4jqc0v0y2
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2NE5mTER1OXpadmNzaXV6
b3RSbS9yWTN0NWR4Z2xBRnRSanQxYXdRT2drClVrSk1raXE4ZUVIVmxoMzJWU1Rj
VmxzdnVSUVEvQk1JcFo4Qjh6YWhiME0KLS0tIHh1OCtzSUZpWWhrbXB4SlA4RVBs
VVBqSEM2bVFBU0M5YzZBQWIwUmVXUXMKvWb57Rc+rO5M8Pf7lvbSjuZB4FrHgT3A
uBQHH3wpv0BVVzL8tucPnwNxDnwpWvFxxwNVy/rtfs6y6HPu6fuOsA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-01-04T06:44:34Z"
mac: ENC[AES256_GCM,data:6zIMlRUHqX0yWVX8CWo69QtutuYshHuNGJ3N+PTpwe6qawwrAAEOMK9Xg4PDu7GZDRWu89UBq3SLOB9DpzOzj1sNoQeokNBvO2AyY+3iBcwBgzX8GeN/A7VK/HPv7g6CuEwnwjvhZLYH74UzmzfXraxMMdx0wldoQE7HD8Ya49M=,iv:QpRtoBUEAyLjeoj4+xtfEibMZj0vhfcMZON3q7LBMBQ=,tag:Dd+Lomo+rg6/fgBRudtIUg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.1