forked from aylac.top/nixcfg
this repo has no description

Compare changes

Choose any two refs to compare.

Changed files
+1104 -451
homes
modules
flake
home
desktop
profiles
programs
git
helix
jujutsu
zed-editor
snippets
nixos
desktop
profiles
workstation
programs
services
snippets
+11 -12
homes/ayla/default.nix
···
profiles = {
betterLocations.enable = true;
shell.enable = true;
+
fixMimeTypes.enable = true;
defaultApps = {
enable = true;
forceMimeAssociations = true;
-
archiveViewer.package = pkgs.file-roller;
-
audioPlayer.package = config.programs.mpv.finalPackage;
-
videoPlayer.package = config.programs.mpv.finalPackage;
-
editor.package = pkgs.gnome-text-editor;
-
fileManager.package = pkgs.nautilus;
-
imageViewer.package = pkgs.loupe;
-
pdfViewer.package = pkgs.papers;
-
#terminal.package = pkgs.ptyxis;
+
editor = {
+
package = config.programs.helix.package;
+
terminal = true;
+
icon = "helix";
+
};
terminalEditor.package = config.programs.helix.package;
-
webBrowser.package = config.programs.helium.package;
+
webBrowser = {
+
package = config.programs.helium.package;
+
icon = "helium";
+
};
};
};
};
···
};
myHome = {
-
desktop = {
-
gnome.enable = true;
-
};
+
desktop.gnome.enable = true;
programs = {
lutris.enable = true;
+3 -1
modules/flake/files/zed.nix
···
};
languages = {
-
JSON = biome // {language_servers = ["json-language-server"];};
+
JSON = biome // {language_servers = ["json-language-server" "biome"];};
+
+
JSONC = biome // {language_servers = ["json-language-server" "biome"];};
Markdown = {
format_on_save = "on";
+1 -1
modules/flake/nixos.nix
···
};
}
];
-
specialArgs = {inherit self;};
+
specialArgs = {inherit self inputs;};
}
);
};
+51
modules/home/desktop/cosmic/default.nix
···
+
{
+
lib,
+
config,
+
pkgs,
+
...
+
}: {
+
options.myHome.desktop.cosmic = {
+
enable = lib.mkEnableOption "COSMIC desktop environment";
+
};
+
+
config = lib.mkIf config.myHome.desktop.cosmic.enable {
+
dconf = {
+
enable = true;
+
+
settings = {
+
"org/gnome/desktop/wm/preferences".button-layout = "appmenu:close";
+
};
+
};
+
+
myHome.profiles.defaultApps = {
+
audioPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
editor = {
+
package = lib.mkDefault pkgs.cosmic-edit;
+
icon = lib.mkDefault "com.system76.CosmicEdit";
+
};
+
fileManager = {
+
package = lib.mkDefault pkgs.cosmic-files;
+
icon = lib.mkDefault "com.system76.CosmicFiles";
+
};
+
imageViewer = {
+
package = lib.mkDefault pkgs.loupe;
+
icon = lib.mkDefault "org.gnome.Loupe";
+
};
+
pdfViewer = {
+
package = lib.mkDefault pkgs.papers;
+
icon = lib.mkDefault "org.gnome.Papers";
+
};
+
terminal = {
+
package = lib.mkDefault pkgs.cosmic-term;
+
icon = lib.mkDefault "com.system76.CosmicTerm";
+
};
+
videoPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
};
+
};
+
}
+3 -1
modules/home/desktop/default.nix
···
}: {
imports = [
./gnome
+
./plasma
+
./cosmic
];
options.myHome.desktop.enable = lib.mkOption {
-
default = config.myHome.desktop.gnome.enable;
+
default = config.myHome.desktop.gnome.enable or config.myHome.desktop.plasma.enable;
description = "Desktop environment configuration.";
type = lib.types.bool;
};
+34 -7
modules/home/desktop/gnome/default.nix
···
switch-to-workspace-up = [];
toggle-fullscreen = ["<Super>w"];
};
+
+
"org/gnome/desktop/wm/preferences".button-layout = "appmenu:close";
};
};
···
];
myHome.profiles.defaultApps = {
-
audioPlayer.package = lib.mkDefault pkgs.mpv;
-
editor.package = lib.mkDefault pkgs.gnome-text-editor;
-
fileManager.package = lib.mkDefault pkgs.nautilus;
-
imageViewer.package = lib.mkDefault pkgs.loupe;
-
pdfViewer.package = lib.mkDefault pkgs.papers;
-
terminal.package = lib.mkDefault pkgs.gnome-console;
-
videoPlayer.package = lib.mkDefault pkgs.mpv;
+
archiveViewer = {
+
package = lib.mkDefault pkgs.file-roller;
+
icon = lib.mkDefault "org.gnome.FileRoller";
+
};
+
audioPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
editor = {
+
package = lib.mkDefault pkgs.gnome-text-editor;
+
icon = lib.mkDefault "org.gnome.TextEditor";
+
};
+
fileManager = {
+
package = lib.mkDefault pkgs.nautilus;
+
icon = lib.mkDefault "org.gnome.Nautilus";
+
};
+
imageViewer = {
+
package = lib.mkDefault pkgs.loupe;
+
icon = lib.mkDefault "org.gnome.Loupe";
+
};
+
pdfViewer = {
+
package = lib.mkDefault pkgs.papers;
+
icon = lib.mkDefault "org.gnome.Papers";
+
};
+
terminal = {
+
package = lib.mkDefault pkgs.gnome-console;
+
icon = lib.mkDefault "org.gnome.Terminal";
+
};
+
videoPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
};
};
}
+52
modules/home/desktop/plasma/default.nix
···
+
{
+
lib,
+
config,
+
pkgs,
+
...
+
}: {
+
options.myHome.desktop.plasma = {
+
enable = lib.mkEnableOption "KDE Plasma desktop environment";
+
};
+
+
config = lib.mkIf config.myHome.desktop.plasma.enable {
+
dconf = {
+
enable = true;
+
+
settings = {
+
"org/gnome/desktop/wm/preferences".button-layout = "appmenu:minimize,maximize,close";
+
};
+
};
+
+
myHome.profiles.defaultApps = {
+
audioPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
editor = {
+
package = lib.mkDefault pkgs.kdePackages.kate;
+
icon = lib.mkDefault "org.kde.kate";
+
};
+
fileManager = {
+
package = lib.mkDefault pkgs.kdePackages.dolphin;
+
exec = lib.mkDefault (lib.getExe config.myHome.profiles.defaultApps.fileManager.package);
+
icon = lib.mkDefault "org.kde.dolphin";
+
};
+
imageViewer = {
+
package = lib.mkDefault pkgs.kdePackages.gwenview;
+
icon = lib.mkDefault "org.kde.gwenview";
+
};
+
pdfViewer = {
+
package = lib.mkDefault pkgs.kdePackages.okular;
+
icon = lib.mkDefault "org.kde.okular";
+
};
+
terminal = {
+
package = lib.mkDefault pkgs.kdePackages.konsole;
+
icon = lib.mkDefault "org.kde.konsole";
+
};
+
videoPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
};
+
};
+
}
+1
modules/home/profiles/default.nix
···
./betterLocations
./defaultApps
./shell
+
./fixMimeTypes
];
}
+100 -11
modules/home/profiles/defaultApps/default.nix
···
default = lib.getExe cfg.archiveViewer.package;
description = "The executable path for the default archive viewer.";
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default archive viewer.";
+
};
};
audioPlayer = {
···
default = lib.getExe cfg.audioPlayer.package;
description = "The executable path for the default audio player.";
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default audio player.";
+
};
};
editor = {
···
default = lib.getExe cfg.editor.package;
description = "The executable path for the default text editor.";
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default text editor.";
+
};
};
fileManager = {
···
type = lib.types.str;
default = lib.getExe cfg.fileManager.package;
description = "The executable path for the default file manager.";
+
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default file manager.";
};
};
···
default = lib.getExe cfg.imageViewer.package;
description = "The executable path for the default image viewer.";
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default image viewer.";
+
};
};
pdfViewer = {
···
default = lib.getExe cfg.pdfViewer.package;
description = "The executable path for the default PDF viewer.";
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default PDF viewer.";
+
};
};
terminal = {
···
type = lib.types.str;
default = lib.getExe cfg.terminal.package;
description = "The executable path for the default terminal emulator.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default terminal emulator.";
};
};
···
default = lib.getExe cfg.videoPlayer.package;
description = "The executable path for the default video player.";
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default video player.";
+
};
};
webBrowser = {
···
type = lib.types.str;
default = lib.getExe cfg.webBrowser.package;
description = "The executable path for the default web browser.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = lib.getIcon cfg.webBrowser.package;
+
description = "The icon name for the default web browser.";
};
};
};
···
};
desktopEntries = let
-
mkDefaultEntry = name: exec: {
+
mkDefaultEntry = name: exec: terminal: icon: {
exec = "${exec} %U";
-
icon = "${builtins.baseNameOf exec}";
+
icon =
+
if icon != ""
+
then icon
+
else "${builtins.baseNameOf exec}";
name = "Default ${name}";
-
terminal = false;
+
inherit terminal;
settings = {
NoDisplay = "true";
···
};
in
lib.mkIf cfg.forceMimeAssociations {
-
defaultAudioPlayer = mkDefaultEntry "Audio Player" cfg.audioPlayer.exec;
-
defaultEditor = mkDefaultEntry "Editor" cfg.editor.exec;
-
defaultFileManager = mkDefaultEntry "File Manager" cfg.fileManager.exec;
-
defaultImageViewer = mkDefaultEntry "Image Viewer" cfg.imageViewer.exec;
-
defaultPdfViewer = mkDefaultEntry "PDF Viewer" cfg.pdfViewer.exec;
-
defaultVideoPlayer = mkDefaultEntry "Video Player" cfg.videoPlayer.exec;
-
defaultWebBrowser = mkDefaultEntry "Web Browser" cfg.webBrowser.exec;
-
defaultArchiveViewer = mkDefaultEntry "Archive Viewer" cfg.archiveViewer.exec;
+
defaultAudioPlayer =
+
mkDefaultEntry "Audio Player" cfg.audioPlayer.exec cfg.audioPlayer.terminal cfg.audioPlayer.icon;
+
defaultEditor =
+
mkDefaultEntry "Editor" cfg.editor.exec cfg.editor.terminal cfg.editor.icon;
+
defaultFileManager =
+
mkDefaultEntry "File Manager" cfg.fileManager.exec cfg.fileManager.terminal cfg.fileManager.icon;
+
defaultImageViewer =
+
mkDefaultEntry "Image Viewer" cfg.imageViewer.exec false cfg.imageViewer.icon;
+
defaultPdfViewer =
+
mkDefaultEntry "PDF Viewer" cfg.pdfViewer.exec cfg.pdfViewer.terminal cfg.pdfViewer.icon;
+
defaultVideoPlayer =
+
mkDefaultEntry "Video Player" cfg.videoPlayer.exec false cfg.videoPlayer.icon;
+
defaultWebBrowser =
+
mkDefaultEntry "Web Browser" cfg.webBrowser.exec false cfg.webBrowser.icon;
+
defaultArchiveViewer =
+
mkDefaultEntry "Archive Viewer" cfg.archiveViewer.exec false cfg.archiveViewer.icon;
};
};
};
+30 -10
modules/home/profiles/defaultApps/mimeTypes.nix
···
];
browserFiles = [
-
"application/vnd.mozilla.xul+xml"
-
"application/x-extension-htm"
-
"application/x-extension-html"
-
"application/x-extension-shtml"
-
"application/x-extension-xht"
-
"application/x-extension-xhtml"
-
"application/xhtml+xml"
-
"text/html"
-
"text/xml"
"x-scheme-handler/chrome"
"x-scheme-handler/ftp"
"x-scheme-handler/http"
···
];
editorFiles = [
+
"application/vnd.mozilla.xul+xml"
+
"application/x-extension-htm"
+
"application/x-extension-html"
+
"application/x-extension-shtml"
+
"application/x-extension-xht"
+
"application/x-extension-xhtml"
+
"application/xhtml+xml"
+
"text/html"
+
"text/xml"
+
"application/json"
-
"application/x-shellscript"
"application/x-shellscript"
"text/markdown"
"text/plain"
"text/x-python"
+
"text/x-typescript"
+
"text/x-javascript"
+
"text/x-svelte"
+
"text/css"
+
"text/x-lua"
+
"text/x-nix"
+
"text/x-scss"
+
"application/toml"
+
"text/x-zig"
+
"text/x-gleam"
+
"text/x-glsl"
+
"text/x-gdscript"
+
"text/x-vue"
+
"text/x-go"
+
"text/x-rust"
+
"text/x-makefile"
+
"text/x-fish"
+
"text/x-elixir"
+
"text/html"
+
"application/x-yaml"
];
imageFiles = [
+47
modules/home/profiles/fixMimeTypes/default.nix
···
+
{
+
lib,
+
pkgs,
+
config,
+
...
+
}: let
+
cfg = config.myHome.profiles.fixMimeTypes;
+
+
xml = pkgs.formats.xml {};
+
+
# thank you chatgpt ig
+
makeMimeFile = {
+
type, # e.g. "text/x-typescript"
+
comment, # e.g. "TypeScript source file"
+
globs, # list of patterns: [ "*.ts" "*.tsx" ]
+
}:
+
xml.generate (builtins.replaceStrings ["/"] ["_"] "${type}.xml") {
+
"mime-info" = {
+
"@xmlns" = "http://www.freedesktop.org/standards/shared-mime-info";
+
"mime-type" = {
+
"@type" = type;
+
comment = comment;
+
glob = map (pattern: {"@pattern" = pattern;}) globs;
+
};
+
};
+
};
+
in {
+
options.myHome.profiles.fixMimeTypes = {
+
enable = lib.mkEnableOption "mimetypes are dumb and they don't always register the right formats";
+
};
+
+
config = lib.mkIf cfg.enable {
+
xdg.dataFile = {
+
"mime/packages/typescript.xml".source = makeMimeFile {
+
type = "text/x-typescript";
+
comment = "TypeScript source file";
+
globs = ["*.ts" "*.tsx" "*.mts" "*.cts"];
+
};
+
+
"mime/packages/svelte.xml".source = makeMimeFile {
+
type = "text/x-svelte";
+
comment = "Svelte source file";
+
globs = ["*.svelte" "*.svelte.ts" "*.svelte.js"];
+
};
+
};
+
};
+
}
+1 -1
modules/home/profiles/shell/default.nix
···
l = "eza -lah";
tree = "eza --tree";
top = "btop";
-
cat = "bat";
+
cat = "bat -p -P";
ytmusic = "yt-dlp -f 251 --remux-video opus --embed-metadata --embed-thumbnail -o \"%(album)s/%(disc_number>0)s%(disc_number)02d-%(track_number)02d %(title)s.%(ext)s\"";
};
};
+1 -4
modules/home/programs/git/default.nix
···
signByDefault = true;
};
settings = {
-
user = {
-
name = "ayla";
-
email = "ayla-git.barcode041@silomails.com";
-
};
+
inherit (config.mySnippets.git) user;
color.ui = true;
github.user = "ayla6";
init = {
+60 -204
modules/home/programs/helix/default.nix
···
{
config,
lib,
-
pkgs,
...
-
}: {
+
}: let
+
editorCfg = config.mySnippets.editor;
+
+
mkHelixServer = name: srv:
+
lib.filterAttrs (_: v: v != null) {
+
inherit name;
+
command =
+
if srv.helix-command != null
+
then srv.helix-command
+
else srv.command;
+
args = srv.args or null;
+
config = srv.config or null;
+
};
+
+
mkHelixLanguage = name: lang: let
+
# this shit is so ugly
+
fmtName = lib.findFirst (x: x != null) null [
+
(lang.helix-formatter or null)
+
(lang.formatter or null)
+
];
+
+
fmt =
+
if fmtName != null
+
then editorCfg.formatters.${fmtName}
+
else null;
+
+
usesLspFormatter = fmt == null || fmt.type == "lsp";
+
+
formatter =
+
if fmt != null && fmt.type == "external"
+
then
+
lib.filterAttrs (_: v: v != null) {
+
command = fmt.command;
+
args = fmt.args;
+
}
+
else null;
+
+
fullLspList = lang.language-servers ++ lang.helix-only-language-servers;
+
+
languageServers = map (srvName:
+
lib.filterAttrs (_: v: v != null) {
+
name = srvName;
+
except-features =
+
if (usesLspFormatter && fmtName != null && srvName != fmtName)
+
then ["format"]
+
else null;
+
})
+
fullLspList;
+
in
+
lib.filterAttrs (_: v: v != null) {
+
name = lang.name;
+
auto-format = lang.auto-format;
+
language-servers = languageServers;
+
file-types = lang.file-types;
+
inherit formatter;
+
};
+
in {
options.myHome.programs.helix.enable = lib.mkEnableOption "helix";
config = lib.mkIf config.myHome.programs.helix.enable {
···
};
};
};
-
languages = {
-
language-server = {
-
bash-language-server = {
-
command = "bash-language-server";
-
args = ["start"];
-
};
-
vscode-css-languageserver = {
-
command = pkgs.writeScript "vscode-css-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
fish-lsp = {
-
command = lib.getExe pkgs.fish-lsp;
-
args = ["start"];
-
};
-
-
lua-language-server = {
-
command = lib.getExe pkgs.lua-language-server;
-
};
-
-
marksman = {
-
command = lib.getExe pkgs.marksman;
-
args = ["server"];
-
};
-
-
nixd = {
-
command = lib.getExe pkgs.nixd;
-
};
-
-
nil = {
-
command = lib.getExe pkgs.nil;
-
};
-
-
vscode-json-languageserver = {
-
command = pkgs.writeScript "vscode-json-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/./bin/vscode-json-languageserver "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
typescript-language-server = with pkgs.nodePackages; {
-
command = pkgs.writeScript "typescript-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${typescript-language-server}/lib/node_modules/typescript-language-server/lib/cli.mjs "$@"
-
'';
-
args = ["--stdio"];
-
};
-
-
superhtml = {
-
command = lib.getExe pkgs.superhtml;
-
args = ["lsp"];
-
};
-
-
biome = {
-
command = lib.getExe pkgs.biome;
-
args = ["lsp-proxy"];
-
config = {
-
format = {"html.formatter.enabled" = true;};
-
};
-
};
-
-
vscode-html-language-server = {
-
command = pkgs.writeScript "vscode-html-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server "$@"
-
'';
-
args = ["--stdio"];
-
};
-
};
-
-
language = [
-
{
-
name = "bash";
-
auto-format = true;
-
file-types = ["sh" "bash" "dash" "ksh" "mksh"];
-
-
formatter = {
-
command = lib.getExe pkgs.shfmt;
-
args = ["-i" "2"];
-
};
-
-
language-servers = ["bash-language-server"];
-
}
-
{
-
name = "css";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-css-languageserver";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "fish";
-
auto-format = true;
-
language-servers = ["fish-lsp"];
-
}
-
{
-
name = "html";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-html-language-server";
-
except-features = ["format"];
-
}
-
{
-
name = "superhtml";
-
except-features = ["format"];
-
}
-
{
-
name = "biome";
-
except-features = ["format"];
-
}
-
];
-
formatter = {
-
command = lib.getExe pkgs.biome;
-
args = ["format" "--use-server" "--html-formatter-enabled=true" "--stdin-file-path=%{buffer_name}"];
-
};
-
}
-
{
-
name = "javascript";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "json";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "vscode-json-languageserver";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "lua";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.stylua;};
-
language-servers = ["lua-language-server"];
-
}
-
{
-
name = "markdown";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.mdformat;};
-
language-servers = ["marksman"];
-
}
-
{
-
name = "nix";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.alejandra;};
-
language-servers = [
-
"nixd"
-
"nil"
-
];
-
}
-
{
-
name = "typescript";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "jsx";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
{
-
name = "tsx";
-
auto-format = true;
-
language-servers = [
-
{
-
name = "typescript-language-server";
-
except-features = ["format"];
-
}
-
"biome"
-
];
-
}
-
];
+
languages = {
+
language-server = lib.mapAttrs mkHelixServer editorCfg.languageServers;
+
language = lib.attrValues (lib.mapAttrs mkHelixLanguage editorCfg.languages);
};
};
};
+1 -4
modules/home/programs/jujutsu/default.nix
···
programs.jujutsu = {
enable = true;
settings = {
-
user = {
-
name = "ayla";
-
email = "ayla-git.barcode041@silomails.com";
-
};
+
inherit (config.mySnippets.git) user;
signing = {
behavior = "own";
backend = "ssh";
+108 -182
modules/home/programs/zed-editor/default.nix
···
{
lib,
config,
-
pkgs,
...
}: let
-
biome = {
-
format_on_save = "on";
+
editorCfg = config.mySnippets.editor;
+
+
mkZedFormatter = fmtName:
+
if fmtName == null
+
then "language_server"
+
else let
+
f = editorCfg.formatters.${fmtName};
+
in
+
if f.type == "external"
+
then {
+
external = {
+
command = f.command;
+
arguments = f.args or [];
+
};
+
}
+
else if f.type == "lsp"
+
then {language_server = {name = fmtName;};}
+
else null;
-
formatter = {language_server = {name = "biome";};};
-
code_actions_on_format = {
-
"source.fixAll.biome" = true;
-
"source.organizeImports.biome" = true;
-
"source.action.useSortedKeys.biome" = true;
+
mkZedLanguage = name: lang:
+
lib.filterAttrs (_: v: v != null) {
+
formatter = mkZedFormatter lang.formatter;
+
language_servers = lang.language-servers ++ lang.zed-only-language-servers;
+
code_actions_on_format = lang.code-actions-on-format;
};
-
};
-
prettier = {
-
external = {
-
command = pkgs.writeScript "prettier-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.prettier}/bin/prettier.cjs "$@"
-
'';
-
arguments = ["--stdin-filepath" "{buffer_path}"];
+
+
mkZedLsp = name: srv:
+
lib.filterAttrs (_: v: v != null) {
+
binary = lib.filterAttrs (_: v: v != null) {
+
path = srv.command;
+
arguments = srv.args or null;
+
};
+
settings = srv.config or null;
};
-
};
in {
options.myHome.programs.zed-editor.enable = lib.mkEnableOption "zed editor";
···
"scss"
"toml"
"biome"
-
"superhtml"
+
#"superhtml"
"marksman"
+
"makefile"
+
"zig"
+
"gleam"
+
"glsl"
+
"gdscript"
+
"svelte"
+
"vue"
+
"basher"
+
"sql"
+
#"ruby"
+
#"elixir"
];
userSettings = {
auto_indent_on_paste = true;
···
preferred_line_length = 100;
soft_wrap = "preferred_line_length";
+
tab_size = 2;
+
format_on_save = "on";
+
prettier = {
+
allowed = false;
+
};
+
agent = {
default_model = {
provider = "google";
···
default_profile = "ask";
};
-
languages = {
-
JavaScript =
-
biome
-
// {
-
language_servers = [
-
"typescript-language-server"
-
"biome"
-
"!vtsls"
-
"!eslint"
-
];
-
};
-
TypeScript =
-
biome
-
// {
-
language_servers = [
-
"typescript-language-server"
-
"biome"
-
"!vtsls"
-
"!eslint"
-
];
-
};
-
TSX =
-
biome
-
// {
-
language_servers = [
-
"typescript-language-server"
-
"biome"
-
"!vtsls"
-
"!eslint"
-
];
-
};
-
JSON =
-
biome
-
// {
-
language_servers = [
-
"json-language-server"
-
"biome"
-
];
-
};
-
CSS =
-
biome
-
// {
-
language_servers = [
-
"css-language-server"
-
"biome"
-
];
-
};
-
HTML = {
-
format_on_save = "on";
-
formatter = {
-
language_server = {
-
name = "biome";
-
};
-
};
-
code_actions_on_format = {
-
"html.formatter.enabled.biome" = true;
-
};
-
language_servers = ["vscode-html-language-server" "superhtml" "biome"];
-
};
-
Nix = {
-
format_on_save = "on";
-
formatter = "language_server";
-
language_servers = [
-
"nixd"
-
"nil"
-
];
-
};
-
Markdown = {
-
format_on_save = "on";
-
formatter = prettier;
-
language_servers = ["marksman"];
-
};
-
Fish = {
-
format_on_save = "on";
-
formatter = "language_server";
-
language_servers = ["fish-lsp"];
-
};
-
Lua = {
-
format_on_save = "on";
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.stylua;
-
};
-
};
-
language_servers = ["lua-language-server"];
-
};
+
telemetry = {
+
diagnostics = false;
+
metrics = false;
};
-
lsp = {
-
nixd = {
-
binary.path = lib.getExe pkgs.nixd;
-
settings.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
+
+
languages = lib.listToAttrs (
+
lib.attrValues (
+
lib.mapAttrs (name: lang: {
+
name = lang.full-name;
+
value = mkZedLanguage name lang;
+
})
+
editorCfg.languages
+
)
+
);
+
lsp = lib.mapAttrs mkZedLsp editorCfg.languageServers;
+
};
+
userTasks = [
+
{
+
label = "jjui";
+
command = "jjui";
+
hide = "on_success";
+
use_new_terminal = true;
+
allow_concurrent_runs = false;
+
shell = {
+
program = "fish";
};
-
nil = {
-
binary = {
-
path = lib.getExe pkgs.nil;
-
arguments = ["--stdio"];
-
};
+
}
+
];
+
userKeymaps = [
+
{
+
context = "(vim_mode == helix_normal || vim_mode == helix_select) && !menu";
+
bindings = {
+
n = "vim::WrappingLeft";
+
e = "vim::Down";
+
i = "vim::Up";
+
o = "vim::WrappingRight";
};
-
typescript-language-server = with pkgs.nodePackages; {
-
binary = {
-
path = pkgs.writeScript "typescript-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${typescript-language-server}/lib/node_modules/typescript-language-server/lib/cli.mjs "$@"
-
'';
-
arguments = ["--stdio"];
-
};
+
}
+
{
+
context = "vim_mode == helix_normal && !menu";
+
bindings = {
+
j = "vim::NextWordEnd";
+
J = ["vim::NextWordEnd" {ignore_punctuation = true;}];
+
k = "vim::MoveToNextMatch";
+
K = "vim::MoveToPreviousMatch";
+
l = "vim::HelixInsert";
+
L = "vim::InsertFirstNonWhitespace";
+
h = "vim::InsertLineBelow";
+
H = "vim::InsertLineAbove";
};
-
json-language-server = {
-
binary = {
-
path = pkgs.writeScript "vscode-json-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/./bin/vscode-json-languageserver "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
css-language-server = {
-
binary = {
-
path = pkgs.writeScript "vscode-css-languageserver-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
vscode-html-language-server = {
-
binary = {
-
path = pkgs.writeScript "vscode-html-language-server-bun" ''
-
#! ${pkgs.bash}/bin/bash -e
-
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server "$@"
-
'';
-
arguments = ["--stdio"];
-
};
-
};
-
biome = {
-
binary = {
-
path = lib.getExe pkgs.biome;
-
arguments = ["lsp-proxy"];
-
};
-
};
-
superhtml = {
-
binary = {
-
path = lib.getExe pkgs.superhtml;
-
arguments = ["lsp"];
-
};
-
};
-
marksman = {
-
binary = {
-
path = lib.getExe pkgs.marksman;
-
arguments = ["server"];
-
};
-
};
-
fish-lsp = {
-
binary = {
-
path = lib.getExe pkgs.fish-lsp;
-
arguments = ["start"];
-
};
-
};
-
lua-language-server = {
-
binary = {
-
path = lib.getExe pkgs.lua-language-server;
-
};
+
}
+
{
+
context = "Workspace";
+
bindings = {
+
ctrl-g = [
+
"task::Spawn"
+
{
+
task_name = "jjui";
+
reveal_target = "center";
+
}
+
];
};
-
};
-
telemetry = {
-
diagnostics = false;
-
metrics = false;
-
};
-
};
+
}
+
];
};
};
}
+2
modules/home/snippets/default.nix
···
{...}: {
imports = [
+
./editor
./firefox-based
+
./git
];
}
+415
modules/home/snippets/editor/default.nix
···
+
{
+
lib,
+
pkgs,
+
...
+
}: let
+
# Helper function to create language server definitions
+
mkLspServer = name: {
+
command,
+
helix-command ? null,
+
args ? null,
+
config ? null,
+
}: {
+
inherit name command helix-command args config;
+
};
+
+
# Helper function to create formatter definitions
+
mkFormatter = name: {
+
type,
+
command ? null,
+
args ? null,
+
lspName ? null,
+
config ? null,
+
}: {
+
inherit name type command args lspName config;
+
};
+
+
# Helper function to create language definitions
+
mkLanguage = name: {
+
full-name ? name,
+
auto-format ? true,
+
file-types ? null,
+
language-servers ? [],
+
zed-only-language-servers ? [],
+
helix-only-language-servers ? [],
+
formatter ? null,
+
helix-formatter ? null,
+
code-actions-on-format ? null,
+
}: {
+
inherit name full-name auto-format file-types language-servers zed-only-language-servers helix-only-language-servers formatter helix-formatter code-actions-on-format;
+
};
+
in {
+
options.mySnippets.editor = lib.mkOption {
+
type = lib.types.attrs;
+
default = {};
+
description = "Editor configuration data";
+
};
+
+
config.mySnippets.editor = {
+
# Language Servers
+
languageServers = {
+
biome = mkLspServer "biome" {
+
command = lib.getExe pkgs.biome;
+
args = ["lsp-proxy"];
+
};
+
+
tailwindcss-language-server = mkLspServer "tailwindcss-language-server" {
+
command = pkgs.writeScript "tailwindcss-language-server-bun" ''
+
#!${lib.getExe pkgs.bash} -e
+
exec ${lib.getExe pkgs.bun} ${lib.getExe pkgs.tailwindcss-language-server}
+
'';
+
helix-command = let
+
fd = lib.getExe pkgs.fd;
+
xargs = "${pkgs.uutils-findutils}/bin/xargs";
+
grep = lib.getExe pkgs.gnugrep;
+
bun = lib.getExe pkgs.bun;
+
twls = lib.getExe pkgs.tailwindcss-language-server;
+
in
+
pkgs.writeScript "tailwindcss-language-server-bun-helix" ''
+
#!${lib.getExe pkgs.bash} -euo
+
+
if ! ${fd} -H -I -E "node_modules" "package\\.json$" . | \
+
${xargs} ${grep} -q '"tailwindcss"'; then
+
+
exit 0
+
fi
+
+
exec ${bun} ${twls}
+
'';
+
args = [];
+
config = {provideFormatter = false;};
+
};
+
+
vscode-html-language-server = mkLspServer "vscode-html-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server" "--stdio"];
+
};
+
+
superhtml = mkLspServer "superhtml" {
+
command = lib.getExe pkgs.superhtml;
+
args = ["lsp"];
+
};
+
+
css-language-server = mkLspServer "css-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js" "--stdio"];
+
};
+
+
json-language-server = mkLspServer "json-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/bin/vscode-json-languageserver" "--stdio"];
+
};
+
+
vtsls = mkLspServer "vtsls" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vtsls}/bin/vtsls" "--stdio"];
+
};
+
+
svelte-language-server = mkLspServer "svelte-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.svelte-language-server}/lib/node_modules/svelte-language-server/bin/server.js" "--stdio"];
+
};
+
+
vue-language-server = mkLspServer "vue-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vue-language-server}/lib/language-tools/packages/language-server/bin/vue-language-server.js" "--stdio"];
+
};
+
+
bash-language-server = mkLspServer "bash-language-server" {
+
command = lib.getExe pkgs.bash-language-server;
+
args = ["start"];
+
};
+
+
fish-lsp = mkLspServer "fish-lsp" {
+
command = lib.getExe pkgs.fish-lsp;
+
args = ["start"];
+
};
+
+
nixd = mkLspServer "nixd" {
+
command = lib.getExe pkgs.nixd;
+
config.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
+
};
+
+
nil = mkLspServer "nil" {
+
command = lib.getExe pkgs.nil;
+
args = ["--stdio"];
+
};
+
+
marksman = mkLspServer "marksman" {
+
command = lib.getExe pkgs.marksman;
+
args = ["server"];
+
};
+
+
gopls = mkLspServer "gopls" {
+
command = lib.getExe pkgs.gopls;
+
args = ["serve"];
+
};
+
+
rust-analyzer = mkLspServer "rust-analyzer" {
+
command = lib.getExe pkgs.rust-analyzer;
+
};
+
+
zls = mkLspServer "zls" {
+
command = lib.getExe pkgs.zls;
+
};
+
+
glsl_analyzer = mkLspServer "glsl_analyzer" {
+
command = lib.getExe pkgs.glsl_analyzer;
+
};
+
+
lua-language-server = mkLspServer "lua-language-server" {
+
command = lib.getExe pkgs.lua-language-server;
+
};
+
+
gleam = mkLspServer "gleam" {
+
command = lib.getExe pkgs.gleam;
+
args = ["lsp"];
+
};
+
+
gdscript-language-server = mkLspServer "gdscript-language-server" {
+
command = lib.getExe pkgs.netcat;
+
args = ["127.0.0.1" "6005"];
+
config = {language-id = "gdscript";};
+
};
+
+
solargraph = mkLspServer "solargraph" {
+
command = lib.getExe pkgs.rubyPackages.solargraph;
+
args = ["stdio"];
+
};
+
+
#rubocop = mkLspServer "rubocop" {
+
# command = lib.getExe pkgs.rubocop;
+
#};
+
};
+
+
# Formatters
+
formatters = {
+
biome = mkFormatter "biome" {
+
type = "lsp";
+
};
+
+
biomeHtml = mkFormatter "biomeHtml" {
+
type = "external";
+
command = lib.getExe pkgs.biome;
+
args = ["format" "--use-server" "--html-formatter-enabled=true" "--stdin-file-path" "{buffer_path}"];
+
};
+
+
shfmt = mkFormatter "shfmt" {
+
type = "external";
+
command = lib.getExe pkgs.shfmt;
+
args = ["-i" "2"];
+
};
+
+
alejandra = mkFormatter "alejandra" {
+
type = "external";
+
command = lib.getExe pkgs.alejandra;
+
};
+
+
mdformat = mkFormatter "mdformat" {
+
type = "external";
+
command = lib.getExe pkgs.mdformat;
+
};
+
+
stylua = mkFormatter "stylua" {
+
type = "external";
+
command = lib.getExe pkgs.stylua;
+
};
+
+
gdscript-formatter = mkFormatter "gdscript-formatter" {
+
type = "external";
+
command = lib.getExe pkgs.gdscript-formatter;
+
};
+
+
prettier = mkFormatter "prettier" {
+
type = "external";
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.prettier}/bin/prettier.cjs" "--stdin-filepath" "{buffer_path}"];
+
};
+
};
+
+
# Languages
+
languages = {
+
html = mkLanguage "html" {
+
full-name = "HTML";
+
language-servers = ["vscode-html-language-server" "biome"];
+
zed-only-language-servers = ["!eslint" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
helix-formatter = "biomeHtml";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"html.formatter.enabled.biome" = true;
+
};
+
};
+
+
css = mkLanguage "css" {
+
full-name = "CSS";
+
language-servers = ["css-language-server" "biome"];
+
zed-only-language-servers = ["..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
javascript = mkLanguage "javascript" {
+
full-name = "JavaScript";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
typescript = mkLanguage "typescript" {
+
full-name = "TypeScript";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
jsx = mkLanguage "jsx" {
+
full-name = "JSX";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
tsx = mkLanguage "tsx" {
+
full-name = "TSX";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
svelte = mkLanguage "svelte" {
+
full-name = "Svelte";
+
language-servers = ["svelte-language-server" "vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
vue = mkLanguage "vue" {
+
full-name = "Vue.js";
+
language-servers = ["vue-language-server" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
json = mkLanguage "json" {
+
full-name = "JSON";
+
language-servers = ["json-language-server" "biome"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
};
+
};
+
+
jsonc = mkLanguage "jsonc" {
+
full-name = "JSONC";
+
language-servers = ["json-language-server" "biome"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
bash = mkLanguage "bash" {
+
full-name = "Shell Script";
+
file-types = ["sh" "bash" "dash" "ksh" "mksh"];
+
language-servers = ["bash-language-server"];
+
formatter = "shfmt";
+
};
+
+
fish = mkLanguage "fish" {
+
full-name = "Fish";
+
language-servers = ["fish-lsp"];
+
};
+
+
nix = mkLanguage "nix" {
+
full-name = "Nix";
+
language-servers = ["nixd" "nil"];
+
formatter = "alejandra";
+
};
+
+
markdown = mkLanguage "markdown" {
+
full-name = "Markdown";
+
language-servers = ["marksman"];
+
formatter = "prettier";
+
};
+
+
go = mkLanguage "go" {
+
full-name = "Go";
+
language-servers = ["gopls"];
+
};
+
+
rust = mkLanguage "rust" {
+
full-name = "Rust";
+
language-servers = ["rust-analyzer"];
+
};
+
+
zig = mkLanguage "zig" {
+
full-name = "Zig";
+
language-servers = ["zls"];
+
};
+
+
glsl = mkLanguage "glsl" {
+
full-name = "GLSL";
+
language-servers = ["glsl_analyzer"];
+
};
+
+
lua = mkLanguage "lua" {
+
full-name = "Lua";
+
language-servers = ["lua-language-server"];
+
formatter = "stylua";
+
};
+
+
gleam = mkLanguage "gleam" {
+
full-name = "Gleam";
+
language-servers = ["gleam"];
+
};
+
+
gdscript = mkLanguage "gdscript" {
+
full-name = "GDScript";
+
language-servers = ["gdscript-language-server"];
+
formatter = "gdscript-formatter";
+
};
+
+
#ruby = mkLanguage "ruby" {
+
# full-name = "Ruby";
+
# language-servers = ["solargraph" "rubocop"];
+
#};
+
};
+
};
+
}
+11
modules/home/snippets/git/default.nix
···
+
{lib, ...}: {
+
options.mySnippets.git = {
+
user = lib.mkOption {
+
type = lib.types.attrs;
+
default = {
+
name = "ayla";
+
email = "ayla-git.barcode041@silomails.com";
+
};
+
};
+
};
+
}
+24
modules/nixos/desktop/cosmic/default.nix
···
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}: {
+
options.myNixOS.desktop.cosmic.enable = lib.mkEnableOption "COSMIC desktop environment";
+
+
config = lib.mkIf config.myNixOS.desktop.cosmic.enable {
+
home-manager.sharedModules = [
+
{
+
config.myHome.desktop.cosmic.enable = true;
+
}
+
];
+
+
environment.cosmic.excludePackages = with pkgs; [
+
cosmic-store
+
];
+
+
services.desktopManager.cosmic.enable = true;
+
system.nixos.tags = ["cosmic"];
+
myNixOS.desktop.enable = true;
+
};
+
}
+5 -1
modules/nixos/desktop/default.nix
···
lib,
...
}: {
-
imports = [./gnome];
+
imports = [
+
./gnome
+
./plasma
+
./cosmic
+
];
options.myNixOS.desktop.enable = lib.mkOption {
default =
+9 -9
modules/nixos/desktop/gnome/default.nix
···
}
];
-
services = {
-
desktopManager.gnome.enable = true;
-
};
+
services.desktopManager.gnome.enable = true;
environment.gnome.excludePackages = with pkgs; [
decibels
···
i18n.inputMethod.type = "ibus";
security.pam.services.greetd.enableGnomeKeyring = true;
-
services.gnome.gcr-ssh-agent.enable = true;
+
services.gnome = {
+
gcr-ssh-agent.enable = true;
+
gnome-remote-desktop.enable = lib.mkForce false;
+
};
programs = {
kdeconnect = {
-
enable = true;
-
package = pkgs.gnomeExtensions.gsconnect;
+
enable = lib.mkDefault true;
+
package = lib.mkDefault pkgs.gnomeExtensions.gsconnect;
};
};
···
];
};
-
myNixOS = {
-
desktop.enable = true;
-
};
+
myNixOS.desktop.enable = true;
+
system.nixos.tags = ["gnome"];
#qt = {
# enable = true;
+27
modules/nixos/desktop/plasma/default.nix
···
+
{
+
pkgs,
+
lib,
+
config,
+
...
+
}: {
+
options.myNixOS.desktop.plasma.enable = lib.mkEnableOption "use kde plasma desktop environment";
+
+
config = lib.mkIf config.myNixOS.desktop.plasma.enable {
+
home-manager.sharedModules = [
+
{
+
config.myHome.desktop.plasma.enable = true;
+
}
+
];
+
+
environment.plasma6.excludePackages = with pkgs; [
+
kdePackages.kwallet
+
kdePackages.kwallet-pam
+
kdePackages.kwalletmanager
+
kdePackages.wacomtablet
+
];
+
+
services.desktopManager.plasma6.enable = true;
+
system.nixos.tags = ["plasma"];
+
myNixOS.desktop.enable = true;
+
};
+
}
-2
modules/nixos/profiles/workstation/default.nix
···
enableSystemSlice = true;
enableUserSlices = true;
};
-
# i hate these guys
-
coredump.enable = false;
};
zramSwap = {
+13 -1
modules/nixos/programs/nix/default.nix
···
config,
lib,
pkgs,
+
inputs,
...
-
}: {
+
}: let
+
flakeInputs = lib.filterAttrs (name: value: (lib.isType "flake" value) && (name != "self")) inputs;
+
in {
options.myNixOS.programs.nix.enable = lib.mkEnableOption "sane nix configuration";
config = lib.mkIf config.myNixOS.programs.nix.enable {
···
persistent = true;
randomizedDelaySec = "60min";
};
+
+
# https://github.com/isabelroses/dotfiles/blob/main/modules/base/nix/nix.nix#L34-L38
+
# pin the registry to avoid downloading and evaluating a new nixpkgs version everytime
+
registry =
+
(lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs)
+
// {
+
# https://github.com/NixOS/nixpkgs/pull/388090
+
nixpkgs = lib.mkForce {flake = inputs.nixpkgs;};
+
};
inherit (config.mySnippets.nix) settings;
};
+1
modules/nixos/services/default.nix
···
./qbittorrent
./radicale
./redlib
+
./sddm
./syncthing
./tailscale
./tangled-knot
+40
modules/nixos/services/sddm/default.nix
···
+
{
+
config,
+
lib,
+
...
+
}: {
+
options.myNixOS.services.sddm = {
+
enable = lib.mkEnableOption "use sddm";
+
+
autoLogin = lib.mkOption {
+
description = "User to autologin.";
+
default = null;
+
type = lib.types.nullOr lib.types.str;
+
};
+
};
+
+
config = lib.mkIf config.myNixOS.services.sddm.enable {
+
security.pam.services.sddm = {
+
enableGnomeKeyring = true;
+
gnupg.enable = true;
+
kwallet.enable = false;
+
};
+
+
services = {
+
displayManager = {
+
autoLogin = lib.mkIf (config.myNixOS.services.sddm.autoLogin != null) {
+
enable = true;
+
user = config.myNixOS.services.sddm.autoLogin;
+
};
+
+
sddm = {
+
enable = true;
+
wayland = {
+
enable = true;
+
compositor = "kwin";
+
};
+
};
+
};
+
};
+
};
+
}
+53
modules/snippets/nix/settings.nix
···
+
# https://github.com/isabelroses/dotfiles/blob/main/modules/base/nix/nix.nix
{lib, ...}: {
options = {
mySnippets.nix.settings = lib.mkOption {
···
"flakes"
"nix-command"
"recursive-nix"
+
+
# Allows Nix to automatically pick UIDs for builds, rather than creating nixbld* user accounts
+
# which is BEYOND annoying, which makes this a really nice feature to have
+
"auto-allocate-uids"
+
+
# allows Nix to execute builds inside cgroups
+
# remember you must also enable use-cgroups in the nix.conf or settings
+
"cgroups"
+
+
# enable the use of the fetchClosure built-in function in the Nix language.
+
"fetch-closure"
];
substituters = [
···
];
trusted-users = ["@admin" "@wheel" "nixbuild"];
+
+
# Free up to 20GiB whenever there is less than 5GB left.
+
# this setting is in bytes, so we multiply with 1024 by 3
+
min-free = 5 * 1024 * 1024 * 1024;
+
max-free = 20 * 1024 * 1024 * 1024;
+
+
# automatically optimise symlinks
+
# Disable auto-optimise-store because of this issue:
+
# https://github.com/NixOS/nix/issues/7273
+
# but we use lix which has a fix for this issue:
+
# https://gerrit.lix.systems/c/lix/+/2100
+
auto-optimise-store = true;
+
+
# we don't want to track the registry, but we do want to allow the usage
+
# of the `flake:` references, so we need to enable use-registries
+
use-registries = true;
+
flake-registry = "";
+
+
# let the system decide the number of max jobs
+
max-jobs = "auto";
+
+
# this defaults to true, however it slows down evaluation so maybe we should disable it
+
# some day, but we do need it for catppuccin/nix so maybe not too soon
+
allow-import-from-derivation = true;
+
+
# for direnv GC roots
+
keep-derivations = true;
+
keep-outputs = true;
+
+
# use xdg base directories for all the nix things
+
use-xdg-base-directories = true;
+
# don't warn me if the current working tree is dirty
+
# i don't need the warning because i'm working on it right now
+
warn-dirty = false;
+
+
# maximum number of parallel TCP connections used to fetch imports and binary caches, 0 means no limit
+
http-connections = 50;
+
+
# whether to accept nix configuration from a flake without prompting
+
# littrally a CVE waiting to happen <https://x.com/puckipedia/status/1693927716326703441>
+
accept-flake-config = false;
};
};
};