Regenerated
This commit is contained in:
+30
-38
@@ -1183,30 +1183,16 @@ in
|
||||
** =generated/moduled/terminals/starship.nix=
|
||||
This file sets up starship prompt
|
||||
#+BEGIN_SRC nix :tangle generated/modules/terminals/starship.nix :noweb tangle :mkdirp yes :eval never-html
|
||||
{ lib, config, pkgs, ... }:
|
||||
{ config, pkgs, lib, flakeRoot, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Paths
|
||||
starshipAssets = ../../../assets/system/conf/starship.toml;
|
||||
in
|
||||
{
|
||||
# Install Starship system-wide
|
||||
environment.systemPackages = [
|
||||
pkgs.starship
|
||||
];
|
||||
xdg.enable = true;
|
||||
|
||||
# Home Manager user settings
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.packages = [
|
||||
pkgs.starship
|
||||
];
|
||||
|
||||
# Copy the config into ~/.config
|
||||
home.file.".config/starship.toml".source = starshipAssets;
|
||||
};
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
}
|
||||
#+END_SRC
|
||||
@@ -1214,27 +1200,33 @@ in
|
||||
** =generated/modules/terminals/zsh.nix=
|
||||
This sets up the zsh in the terminal
|
||||
#+BEGIN_SRC nix :tangle generated/modules/terminals/zsh.nix :noweb tangle :mkdirp yes :eval never-html
|
||||
{ lib, pkgs, config, ... }:
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
################################################
|
||||
# System-wide installation of Zsh + Oh-My-Zsh
|
||||
################################################
|
||||
environment.systemPackages = [
|
||||
pkgs.zsh
|
||||
pkgs.oh-my-zsh
|
||||
];
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autocd = true;
|
||||
dotDir = "${config.xdg.configHome}/zsh";
|
||||
|
||||
################################################
|
||||
# Make Zsh the default shell for all users
|
||||
################################################
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
ohMyZsh = {
|
||||
enable = true;
|
||||
theme = "";
|
||||
plugins = [
|
||||
"git"
|
||||
"sudo"
|
||||
"extract"
|
||||
"colored-man-pages"
|
||||
"command-not-found"
|
||||
"history"
|
||||
"docker"
|
||||
"kubectl"
|
||||
];
|
||||
};
|
||||
|
||||
################################################
|
||||
# Disable Home Manager shell check warnings
|
||||
################################################
|
||||
users.users.henrov.ignoreShellProgramCheck = true;
|
||||
users.users.root.ignoreShellProgramCheck = true;
|
||||
autosuggestion.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
};
|
||||
}
|
||||
#+END_SRC
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
||||
{ pkgs, config, lib, flakeRoot, ... }:
|
||||
|
||||
let
|
||||
grubThemeDir = "/boot/grub/themes/catppuccin-mocha";
|
||||
grubThemeFile = "${grubThemeDir}/theme.txt";
|
||||
plymouthThemeDir = "/usr/share/plymouth/themes/catppuccin";
|
||||
in
|
||||
{
|
||||
boot = {
|
||||
initrd = {
|
||||
verbose = false;
|
||||
kernelModules = [];
|
||||
};
|
||||
|
||||
kernelPackages = pkgs.linuxPackages_latest;
|
||||
kernelParams = [ "quiet" "udev.log_level=3" "systemd.show_status=auto" ];
|
||||
consoleLogLevel = 3;
|
||||
|
||||
supportedFilesystems = [ "ntfs" ];
|
||||
|
||||
# Correct GRUB + UEFI configuration
|
||||
loader = {
|
||||
grub = {
|
||||
enable = true;
|
||||
efiSupport = true; # enable UEFI mode
|
||||
devices = [ "nodev" ]; # nodev for UEFI
|
||||
useOSProber = true;
|
||||
theme = grubThemeFile;
|
||||
};
|
||||
|
||||
timeout = 5;
|
||||
};
|
||||
|
||||
# Plymouth splashscreen
|
||||
plymouth = {
|
||||
enable = true;
|
||||
theme = "rings";
|
||||
themePackages = with pkgs; [
|
||||
(adi1090x-plymouth-themes.override {
|
||||
selected_themes = [ "rings" ];
|
||||
})
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Activation script: write Catppuccin GRUB theme
|
||||
system.activationScripts.grubTheme = {
|
||||
text = ''
|
||||
mkdir -p ${grubThemeDir}
|
||||
|
||||
cat > ${grubThemeFile} <<EOF
|
||||
# Catppuccin Mocha GRUB theme
|
||||
desktop-color = #1e1e2e
|
||||
normal-color = #cdd6f4
|
||||
selected-item-color = #f5e0dc
|
||||
selected-item-highlight-color = #f5c2e7
|
||||
EOF
|
||||
|
||||
if [ -f "${flakeRoot}/assets/system/theming/boot/background.png" ]; then
|
||||
cp "${flakeRoot}/assets/system/theming/boot/background.png" "${grubThemeDir}/background.png"
|
||||
fi
|
||||
|
||||
echo "GRUB Catppuccin Mocha theme installed."
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
{
|
||||
hostname,
|
||||
pkgs,
|
||||
lib,
|
||||
modulesPath,
|
||||
user,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
# (modulesPath + "/installer/scan/not-detected.nix")
|
||||
#../../hardware/hardware.nix
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
"xhci_pci"
|
||||
"nvme"
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
"rtsx_usb_sdmmc"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/811D-0676";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{ device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; }
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
{ lib, config, pkgs, inputs, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
modulesPath = ./generated/modules;
|
||||
|
||||
# Import all modules recursively
|
||||
importedModules = inputs.import-tree modulesPath;
|
||||
|
||||
# Evaluate all modules
|
||||
evaluatedModules =
|
||||
map (m:
|
||||
if builtins.isFunction m then m { inherit lib config pkgs; } else m
|
||||
) importedModules.imports;
|
||||
|
||||
# Attach names
|
||||
modulesWithNames =
|
||||
map (m: {
|
||||
name = if m ? _file then lib.removeSuffix ".nix" (builtins.baseNameOf m._file) else "unknown";
|
||||
value = m;
|
||||
}) evaluatedModules;
|
||||
|
||||
# Filter enabled modules from config file (optional)
|
||||
moduleSwitches = import ../../../assets/system/conf/modules.conf;
|
||||
enabledModules =
|
||||
builtins.filter (m: moduleSwitches.${m.name} or false) modulesWithNames;
|
||||
|
||||
# Collect Home Manager user attrsets
|
||||
hmUsersList = map (m: m.value._module.args.hmUsers or {}) enabledModules;
|
||||
|
||||
in {
|
||||
networking.hostName = "traveldroid";
|
||||
system.stateVersion = "26.05";
|
||||
|
||||
imports = [
|
||||
./boot.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Merge Home Manager user configurations
|
||||
home-manager.users = lib.mkMerge hmUsersList;
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
{ lib, config, pkgs, inputs, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Paths
|
||||
assetPath = ../../../assets/hyprland/conf/hypr;
|
||||
mainConfig = "${assetPath}/hyprland.conf";
|
||||
|
||||
# Determine Hyprland package with fallbacks
|
||||
hyprlandPkg =
|
||||
pkgs.hyprland or
|
||||
pkgs.hyprland-git or
|
||||
inputs.hyprland.packages.${pkgs.system}.default;
|
||||
|
||||
# Map all files in the asset folder
|
||||
hyprFiles =
|
||||
builtins.listToAttrs (
|
||||
map (f: {
|
||||
name = ".config/hypr/${f}";
|
||||
value = { source = "${assetPath}/${f}"; };
|
||||
}) (builtins.attrNames (builtins.readDir assetPath))
|
||||
);
|
||||
in
|
||||
{
|
||||
# System-wide package
|
||||
environment.systemPackages = [ hyprlandPkg ];
|
||||
|
||||
# Home Manager user settings
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.packages = [ hyprlandPkg ];
|
||||
|
||||
# Merge main config + all other files
|
||||
home.file = lib.mkMerge [
|
||||
hyprFiles
|
||||
{
|
||||
".config/hypr/hyprland.conf" = { source = mainConfig; };
|
||||
}
|
||||
];
|
||||
|
||||
# Optional module-specific settings
|
||||
settings.general."col.active_border" = "0xff97cbcd 0xff89b4fa";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
moduleName = "stylix";
|
||||
assetPath = ../../../assets/system/conf/${moduleName};
|
||||
|
||||
# Read all files in asset directory
|
||||
programFiles = builtins.readDir assetPath;
|
||||
|
||||
files = lib.genAttrs (builtins.attrNames programFiles) (name: {
|
||||
source = "${assetPath}/${name}";
|
||||
});
|
||||
|
||||
# Read optional stylix.conf
|
||||
stylixConfFile = "${assetPath}/stylix.conf";
|
||||
stylixConf =
|
||||
if builtins.pathExists stylixConfFile
|
||||
then builtins.readFile stylixConfFile
|
||||
else "";
|
||||
|
||||
# Cursor defaults
|
||||
cursorName = "phinger-cursors-light";
|
||||
cursorSize = 24;
|
||||
in
|
||||
{
|
||||
# System packages
|
||||
environment.systemPackages = [
|
||||
pkgs.feh
|
||||
pkgs.st
|
||||
];
|
||||
|
||||
# Home Manager user settings
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
|
||||
# Copy all stylix config files into ~/.config/stylix/
|
||||
xdg.configFile =
|
||||
lib.mapAttrs' (name: value: {
|
||||
name = "${moduleName}/${name}";
|
||||
value = { inherit (value) source; };
|
||||
}) files;
|
||||
|
||||
# Session variables
|
||||
home.sessionVariables = {
|
||||
STYLIX_CONF = "$HOME/.config/stylix/stylix.conf";
|
||||
|
||||
XCURSOR_THEME = cursorName;
|
||||
XCURSOR_SIZE = toString cursorSize;
|
||||
HYPRCURSOR_THEME = cursorName;
|
||||
HYPRCURSOR_SIZE = toString cursorSize;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
{ lib, config, pkgs, inputs, ... }:
|
||||
|
||||
let
|
||||
# Default user fallback
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Safe package reference with flake input fallback
|
||||
xdgPortalHyprlandPkg = pkgs.xdg-desktop-portal-hyprland or
|
||||
inputs.xdgPortalHyprland.packages.${pkgs.system}.default;
|
||||
in
|
||||
{
|
||||
# System-wide installation of XDG portal package
|
||||
environment.systemPackages = [
|
||||
xdgPortalHyprlandPkg
|
||||
];
|
||||
|
||||
# Home Manager user configuration
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.packages = [
|
||||
xdgPortalHyprlandPkg
|
||||
];
|
||||
|
||||
# Enable XDG portal for Hyprland
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [ xdgPortalHyprlandPkg ];
|
||||
config.hyprland = {
|
||||
"org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
# (NVF = Neovim/terminal flavor)
|
||||
stylix.targets.nvf.enable = true;
|
||||
# feh wallpaper integration
|
||||
stylix.targets.feh.enable = true;
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
moduleName = "kitty";
|
||||
|
||||
# Paths and files
|
||||
assetPath = ../../../assets/system/conf/${moduleName};
|
||||
programFiles = builtins.readDir assetPath;
|
||||
files = lib.genAttrs (builtins.attrNames programFiles) (name: {
|
||||
src = "${assetPath}/${name}";
|
||||
});
|
||||
in
|
||||
{
|
||||
# Install kitty system-wide
|
||||
environment.systemPackages = [ pkgs.kitty ];
|
||||
|
||||
# Home Manager user-specific configuration
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
programs.kitty.enable = true;
|
||||
|
||||
# Extra user config snippet
|
||||
programs.kitty.extraConfig = ''
|
||||
# Include the Catppuccin-Mocha theme
|
||||
include themes/Catppuccin-Mocha.conf
|
||||
'';
|
||||
|
||||
# Copy all asset files into ~/.config/kitty/
|
||||
home.file = lib.mkMerge (
|
||||
map (name: { ".config/${moduleName}/${name}" = { source = files.${name}.src; }; })
|
||||
(builtins.attrNames files)
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Paths
|
||||
starshipAssets = ../../../assets/system/conf/starship.toml;
|
||||
in
|
||||
{
|
||||
# Install Starship system-wide
|
||||
environment.systemPackages = [
|
||||
pkgs.starship
|
||||
];
|
||||
|
||||
# Home Manager user settings
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.packages = [
|
||||
pkgs.starship
|
||||
];
|
||||
|
||||
# Copy the config into ~/.config
|
||||
home.file.".config/starship.toml".source = starshipAssets;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
{
|
||||
################################################
|
||||
# System-wide installation of Zsh + Oh-My-Zsh
|
||||
################################################
|
||||
environment.systemPackages = [
|
||||
pkgs.zsh
|
||||
pkgs.oh-my-zsh
|
||||
];
|
||||
|
||||
################################################
|
||||
# Make Zsh the default shell for all users
|
||||
################################################
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
|
||||
################################################
|
||||
# Disable Home Manager shell check warnings
|
||||
################################################
|
||||
users.users.henrov.ignoreShellProgramCheck = true;
|
||||
users.users.root.ignoreShellProgramCheck = true;
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{ config, pkgs, lib, flakeRoot, ... }:
|
||||
|
||||
let
|
||||
# Default to the configured default user
|
||||
username = config.users.users.defaultUser or "henrov";
|
||||
homeDir = "/home/${username}";
|
||||
assetPath = "${flakeRoot}/assets/copy_2_home";
|
||||
in
|
||||
{
|
||||
# Ensure rsync is available system-wide
|
||||
environment.systemPackages = [ pkgs.rsync ];
|
||||
|
||||
# System service to copy assets to the user home at boot
|
||||
systemd.services.copyAssets = {
|
||||
description = "Copy assets to ${username}'s home directory";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
|
||||
serviceConfig.ExecStart = ''
|
||||
echo "Copying assets from ${assetPath} to ${homeDir} ..."
|
||||
|
||||
if [ ! -d "${assetPath}" ]; then
|
||||
echo "ERROR: ${assetPath} does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${homeDir}"
|
||||
chown ${username}:${username} "${homeDir}"
|
||||
|
||||
${pkgs.rsync}/bin/rsync -a --no-owner --no-group "${assetPath}/" "${homeDir}/"
|
||||
|
||||
echo "Done copying assets."
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
username = "henrov";
|
||||
in
|
||||
{
|
||||
# NixOS user
|
||||
users.users.${username} = {
|
||||
isNormalUser = true;
|
||||
home = "/home/${username}";
|
||||
hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/";
|
||||
extraGroups = [ "wheel" "networkmanager" ];
|
||||
};
|
||||
|
||||
# Home Manager user definition
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.username = username;
|
||||
home.homeDirectory = "/home/${username}";
|
||||
home.stateVersion = "26.05";
|
||||
|
||||
# Example: user packages
|
||||
home.packages = [ pkgs.git pkgs.vim ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
;;; package --- early init -*- lexical-binding: t -*-
|
||||
;;; Commentary:
|
||||
;;; Prevents white flash and better Emacs defaults
|
||||
;;; Code:
|
||||
(set-language-environment "UTF-8")
|
||||
(setq-default
|
||||
default-frame-alist
|
||||
'((background-color . "#1e1e2e")
|
||||
(bottom-divider-width . 1) ; Thin horizontal window divider
|
||||
(foreground-color . "#bac2de") ; Default foreground color
|
||||
(fullscreen . maximized) ; Maximize the window by default
|
||||
(horizontal-scroll-bars . nil) ; No horizontal scroll-bars
|
||||
(left-fringe . 8) ; Thin left fringe
|
||||
(menu-bar-lines . 0) ; No menu bar
|
||||
(right-divider-width . 1) ; Thin vertical window divider
|
||||
(right-fringe . 8) ; Thin right fringe
|
||||
(tool-bar-lines . 0) ; No tool bar
|
||||
(undecorated . t) ; Remove extraneous X decorations
|
||||
(vertical-scroll-bars . nil)) ; No vertical scroll-bars
|
||||
user-full-name "Henrov henrov" ; ME!
|
||||
;; memory configuration
|
||||
;; Higher garbage collection threshold, prevents frequent gc locks, reset later
|
||||
gc-cons-threshold most-positive-fixnum
|
||||
;; Ignore warnings for (obsolete) elisp compilations
|
||||
byte-compile-warnings '(not obsolete)
|
||||
;; And other log types completely
|
||||
warning-suppress-log-types '((comp) (bytecomp))
|
||||
;; Large files are okay in the new millenium.
|
||||
large-file-warning-threshold 100000000
|
||||
;; dont show garbage collection messages at startup, will reset later
|
||||
garbage-collection-messages nil
|
||||
;; native compilation
|
||||
package-native-compile t
|
||||
native-comp-warning-on-missing-source nil
|
||||
native-comp-async-report-warnings-errors 'silent
|
||||
;; Read more based on system pipe capacity
|
||||
read-process-output-max (max (* 10240 10240) read-process-output-max)
|
||||
;; scroll configuration
|
||||
scroll-margin 0 ; Lets scroll to the end of the margin
|
||||
scroll-conservatively 100000 ; Never recenter the window
|
||||
scroll-preserve-screen-position 1 ; Scrolling back and forth
|
||||
;; frame config
|
||||
;; Improve emacs startup time by not resizing to adjust for custom settings
|
||||
frame-inhibit-implied-resize t
|
||||
;; Dont resize based on character height / width but to exact pixels
|
||||
frame-resize-pixelwise t
|
||||
;; backups & files
|
||||
backup-directory-alist '(("." . "~/.backups/")) ; Don't clutter
|
||||
backup-by-copying t ; Don't clobber symlinks
|
||||
create-lockfiles nil ; Don't have temp files
|
||||
delete-old-versions t ; Cleanup automatically
|
||||
kept-new-versions 6 ; Update every few times
|
||||
kept-old-versions 2 ; And cleanup even more
|
||||
version-control t ; Version them backups
|
||||
delete-by-moving-to-trash t ; Dont delete, send to trash instead
|
||||
;; startup
|
||||
inhibit-startup-screen t ; I have already done the tutorial. Twice
|
||||
inhibit-startup-message t ; I know I am ready
|
||||
inhibit-startup-echo-area-message t ; Yep, still know it
|
||||
initial-scratch-message nil ; I know it is the scratch buffer!
|
||||
initial-buffer-choice nil
|
||||
inhibit-startup-buffer-menu t
|
||||
inhibit-x-resources t
|
||||
initial-major-mode 'fundamental-mode
|
||||
pgtk-wait-for-event-timeout 0.001 ; faster child frames
|
||||
ad-redefinition-action 'accept ; dont care about legacy things being redefined
|
||||
inhibit-compacting-font-caches t
|
||||
;; tabs
|
||||
tab-width 4 ; Always tab 4 spaces.
|
||||
indent-tabs-mode nil ; Never use actual tabs.
|
||||
;; rendering
|
||||
cursor-in-non-selected-windows nil ; dont render cursors other windows
|
||||
;; packages
|
||||
use-package-always-defer t
|
||||
load-prefer-newer t
|
||||
default-input-method nil
|
||||
use-dialog-box nil
|
||||
use-file-dialog nil
|
||||
use-package-expand-minimally t
|
||||
package-enable-at-startup nil
|
||||
use-package-enable-imenu-support t
|
||||
auto-mode-case-fold nil ; No second pass of case-insensitive search over auto-mode-alist.
|
||||
package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||
("gnu" . "https://elpa.gnu.org/packages/")
|
||||
("nongnu" . "https://elpa.nongnu.org/nongnu/")
|
||||
("melpa-stable" . "https://stable.melpa.org/packages/"))
|
||||
package-archive-priorities '(("gnu" . 99)
|
||||
("nongnu" . 80)
|
||||
("melpa" . 70)
|
||||
("melpa-stable" . 50))
|
||||
)
|
||||
;;; early-init.el ends here
|
||||
@@ -1,101 +0,0 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
let
|
||||
moduleName = "emacs";
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Paths to your init files (relative to this module)
|
||||
emacsAssets = ../../../assets/system/conf/emacs;
|
||||
initFile = "${emacsAssets}/init.el";
|
||||
earlyInitFile = "${emacsAssets}/early-init.el";
|
||||
|
||||
# Toggle for this module
|
||||
enableProgram = config.enableEmacs or false;
|
||||
in
|
||||
{
|
||||
# Top-level toggle option
|
||||
options.enableEmacs = lib.mkEnableOption "Enable Emacs configuration";
|
||||
|
||||
config = lib.mkIf enableProgram {
|
||||
|
||||
# Minimal system-wide Emacs package
|
||||
environment.systemPackages = [
|
||||
pkgs.emacs-pgtk.override { withTreeSitter = true; }
|
||||
];
|
||||
|
||||
# Home Manager Emacs config
|
||||
home-manager.users.${username} = {
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
package = pkgs.emacs-pgtk.override { withTreeSitter = true; };
|
||||
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
# Core dev and language support
|
||||
manualPackages.treesit-grammars.with-all-grammars
|
||||
rust-mode
|
||||
rustic
|
||||
nix-mode
|
||||
hcl-mode
|
||||
|
||||
# UI & workflow
|
||||
nerd-icons
|
||||
doom-modeline
|
||||
diminish
|
||||
eldoc
|
||||
eldoc-box
|
||||
pulsar
|
||||
which-key
|
||||
avy
|
||||
consult
|
||||
vertico
|
||||
marginalia
|
||||
crux
|
||||
shell-pop
|
||||
|
||||
# Completion/snippets
|
||||
nerd-icons-corfu
|
||||
corfu
|
||||
cape
|
||||
orderless
|
||||
yasnippet
|
||||
yasnippet-snippets
|
||||
|
||||
# Utilities
|
||||
rg
|
||||
exec-path-from-shell
|
||||
eat
|
||||
f
|
||||
gptel
|
||||
nixpkgs-fmt
|
||||
envrc
|
||||
|
||||
# Theming
|
||||
catppuccin-theme
|
||||
|
||||
# Git
|
||||
magit
|
||||
|
||||
# Editing/workflow
|
||||
expreg
|
||||
vundo
|
||||
puni
|
||||
|
||||
# Error/side panels
|
||||
sideline
|
||||
sideline-flymake
|
||||
sideline-eglot
|
||||
];
|
||||
|
||||
# Load your init files from assets
|
||||
initFile = initFile;
|
||||
earlyInitFile = earlyInitFile;
|
||||
};
|
||||
|
||||
# Useful session variables
|
||||
home.sessionVariables = {
|
||||
EDITOR = "emacs";
|
||||
XDG_SCREENSHOTS_DIR = "~/screenshots";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,400 +0,0 @@
|
||||
;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;;; Simple Emacs setup I carry everywhere
|
||||
|
||||
;;; Code:
|
||||
(setq custom-file (locate-user-emacs-file "custom.el"))
|
||||
(load custom-file 'noerror) ;; no error on missing custom file
|
||||
|
||||
(require 'package)
|
||||
(package-initialize)
|
||||
|
||||
(defun reset-custom-vars ()
|
||||
"Resets the custom variables that were set to crazy numbers"
|
||||
(setopt gc-cons-threshold (* 1024 1024 100))
|
||||
(setopt garbage-collection-messages t))
|
||||
|
||||
(use-package emacs
|
||||
:custom
|
||||
(native-comp-async-query-on-exit t)
|
||||
(read-answer-short t)
|
||||
(use-short-answers t)
|
||||
(enable-recursive-minibuffers t)
|
||||
(which-func-update-delay 1.0)
|
||||
(visible-bell nil)
|
||||
(custom-buffer-done-kill t)
|
||||
(whitespace-line-column nil)
|
||||
(x-underline-at-descent-line t)
|
||||
(imenu-auto-rescan t)
|
||||
(uniquify-buffer-name-style 'forward)
|
||||
(confirm-nonexistent-file-or-buffer nil)
|
||||
(create-lockfiles nil)
|
||||
(make-backup-files nil)
|
||||
(kill-do-not-save-duplicates t)
|
||||
(sentence-end-double-space nil)
|
||||
(treesit-enabled-modes t)
|
||||
:init
|
||||
;; base visual
|
||||
(menu-bar-mode -1) ;; no menu bar
|
||||
(toggle-scroll-bar -1) ;; no scroll bar
|
||||
(tool-bar-mode -1) ;; no tool bar either
|
||||
(blink-cursor-mode -1) ;; stop blinking
|
||||
|
||||
;; font of the century
|
||||
(set-frame-font "Aporetic Sans Mono 12" nil t)
|
||||
|
||||
:bind
|
||||
(("C-<wheel-up>" . pixel-scroll-precision) ; dont zoom in please, just scroll
|
||||
("C-<wheel-down>" . pixel-scroll-precision) ; dont zoom in either, just scroll
|
||||
("C-x k" . kill-current-buffer)) ; kill the buffer, dont ask
|
||||
:hook
|
||||
(text-mode . delete-trailing-whitespace-mode)
|
||||
(prog-mode . delete-trailing-whitespace-mode)
|
||||
(after-init . global-display-line-numbers-mode) ;; always show line numbers
|
||||
(after-init . column-number-mode) ;; column number in the mode line
|
||||
(after-init . size-indication-mode) ;; file size in the mode line
|
||||
(after-init . pixel-scroll-precision-mode) ;; smooth mouse scroll
|
||||
(after-init . electric-pair-mode) ;; i mean ... parens should auto create
|
||||
(after-init . reset-custom-vars)
|
||||
)
|
||||
|
||||
(use-package autorevert
|
||||
:ensure nil
|
||||
:custom
|
||||
(auto-revert-interval 3)
|
||||
(auto-revert-remote-files nil)
|
||||
(auto-revert-use-notify t)
|
||||
(auto-revert-avoid-polling nil)
|
||||
(auto-revert-verbose t)
|
||||
:hook
|
||||
(after-init . global-auto-revert-mode))
|
||||
|
||||
(use-package recentf
|
||||
:ensure nil
|
||||
:commands (recentf-mode recentf-cleanup)
|
||||
:hook
|
||||
(after-init . recentf-mode)
|
||||
:custom
|
||||
(recentf-auto-cleanup 'never)
|
||||
(recentf-exclude
|
||||
(list "\\.tar$" "\\.tbz2$" "\\.tbz$" "\\.tgz$" "\\.bz2$"
|
||||
"\\.bz$" "\\.gz$" "\\.gzip$" "\\.xz$" "\\.zip$"
|
||||
"\\.7z$" "\\.rar$"
|
||||
"COMMIT_EDITMSG\\'"
|
||||
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
||||
"-autoloads\\.el$" "autoload\\.el$"))
|
||||
|
||||
:config
|
||||
;; A cleanup depth of -90 ensures that `recentf-cleanup' runs before
|
||||
;; `recentf-save-list', allowing stale entries to be removed before the list
|
||||
;; is saved by `recentf-save-list', which is automatically added to
|
||||
;; `kill-emacs-hook' by `recentf-mode'.
|
||||
(add-hook 'kill-emacs-hook #'recentf-cleanup -90))
|
||||
|
||||
(use-package savehist
|
||||
:ensure nil
|
||||
:commands (savehist-mode savehist-save)
|
||||
:hook
|
||||
(after-init . savehist-mode)
|
||||
:custom
|
||||
(savehist-autosave-interval 600)
|
||||
(savehist-additional-variables
|
||||
'(kill-ring ; clipboard
|
||||
register-alist ; macros
|
||||
mark-ring global-mark-ring ; marks
|
||||
search-ring regexp-search-ring)))
|
||||
|
||||
(use-package hl-line
|
||||
:ensure nil
|
||||
:custom
|
||||
(hl-line-sticky-flag nil)
|
||||
(global-hl-line-sticky-flag nil)
|
||||
:hook
|
||||
(after-init . global-hl-line-mode))
|
||||
|
||||
(use-package saveplace
|
||||
:ensure nil
|
||||
:commands (save-place-mode save-place-local-mode)
|
||||
:hook
|
||||
(after-init . save-place-mode)
|
||||
:custom
|
||||
(save-place-limit 400))
|
||||
|
||||
(use-package nerd-icons
|
||||
:custom
|
||||
;; disable bright icon colors
|
||||
(nerd-icons-color-icons nil))hells.nix
|
||||
|
||||
(use-package doom-modeline
|
||||
:custom
|
||||
(inhibit-compacting-font-caches t) ;; speed
|
||||
(doom-modeline-buffer-file-name-style 'relative-from-project)
|
||||
(doom-modeline-major-mode-icon nil) ;; distracting icons, no thank you
|
||||
(doom-modeline-buffer-encoding nil) ;; everything is utf-8 anyway
|
||||
(doom-modeline-buffer-state-icon nil) ;; the filename already shows me
|
||||
(doom-modeline-lsp nil) ;; lsp state is too distracting, too often
|
||||
:hook (after-init . doom-modeline-mode))
|
||||
|
||||
(load-theme 'catppuccin :no-confirm)
|
||||
|
||||
(use-package diminish :demand t) ;; declutter the modeline
|
||||
(use-package eldoc
|
||||
:diminish eldoc-mode
|
||||
:custom
|
||||
(eldoc-echo-area-use-multiline-p nil)) ;; docs for everything
|
||||
|
||||
(use-package eldoc-box
|
||||
:defer t
|
||||
:config
|
||||
(set-face-background 'eldoc-box-border (catppuccin-color 'green))
|
||||
(set-face-background 'eldoc-box-body (catppuccin-color 'base))
|
||||
:bind
|
||||
(("M-h" . eldoc-box-help-at-point)))
|
||||
|
||||
(use-package pulsar
|
||||
:commands pulsar-global-mode pulsar-recenter-top pulsar-reveal-entry
|
||||
:init
|
||||
(defface pulsar-catppuccin
|
||||
`((default :extend t)
|
||||
(((class color) (min-colors 88) (background light))
|
||||
:background ,(catppuccin-color 'sapphire))
|
||||
(((class color) (min-colors 88) (background dark))
|
||||
:background ,(catppuccin-color 'sapphire))
|
||||
(t :inverse-video t))
|
||||
"Alternative nord face for `pulsar-face'."
|
||||
:group 'pulsar-faces)
|
||||
:custom
|
||||
(pulsar-face 'pulsar-catppuccin)
|
||||
:hook
|
||||
(after-init . pulsar-global-mode))
|
||||
|
||||
(use-package which-key
|
||||
:commands which-key-mode
|
||||
:diminish which-key-mode
|
||||
:hook
|
||||
(after-init . which-key-mode))
|
||||
|
||||
(use-package expreg
|
||||
:bind ("M-m" . expreg-expand))
|
||||
|
||||
(use-package vundo) ;; undo tree
|
||||
|
||||
;; better structured editing
|
||||
(use-package puni
|
||||
:commands puni-global-mode
|
||||
:hook
|
||||
(after-init . puni-global-mode))
|
||||
|
||||
(use-package avy
|
||||
:bind
|
||||
("M-i" . avy-goto-char-2)
|
||||
:custom
|
||||
(avy-background t))
|
||||
|
||||
(use-package consult
|
||||
:bind
|
||||
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
|
||||
("M-y" . consult-yank-pop) ;; orig. yank-pop
|
||||
("M-g M-g" . consult-goto-line) ;; orig. goto-line
|
||||
("M-g i" . consult-imenu) ;; consult version is interactive
|
||||
("M-g r" . consult-ripgrep) ;; find in project also works
|
||||
:custom
|
||||
(consult-narrow-key "<"))
|
||||
|
||||
(use-package vertico
|
||||
:commands vertico-mode
|
||||
:custom
|
||||
(read-file-name-completion-ignore-case t)
|
||||
(read-buffer-completion-ignore-case t)
|
||||
(completion-ignore-case t)
|
||||
(enable-recursive-minibuffers t)
|
||||
(minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))
|
||||
:init
|
||||
(vertico-mode)
|
||||
:hook
|
||||
(minibuffer-setup-hook . cursor-intangible-mode))
|
||||
|
||||
(use-package marginalia
|
||||
:commands marginalia-mode
|
||||
:hook (after-init . marginalia-mode))
|
||||
|
||||
(use-package crux
|
||||
:bind
|
||||
("C-c M-e" . crux-find-user-init-file)
|
||||
("C-c C-w" . crux-transpose-windows)
|
||||
("C-c M-d" . crux-find-current-directory-dir-locals-file)
|
||||
("C-a" . crux-move-beginning-of-line))
|
||||
|
||||
(use-package magit
|
||||
:bind (("C-M-g" . magit-status)))
|
||||
|
||||
(use-package nerd-icons-corfu
|
||||
:commands nerd-icons-corfu-formatter
|
||||
:defines corfu-margin-formatters)
|
||||
|
||||
(use-package corfu
|
||||
:commands global-corfu-mode
|
||||
:custom
|
||||
(corfu-cycle t)
|
||||
(corfu-auto t)
|
||||
(corfu-auto-delay 1)
|
||||
(corfu-auto-prefix 3)
|
||||
(corfu-separator ?_)
|
||||
:hook
|
||||
(after-init . global-corfu-mode)
|
||||
:config
|
||||
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
||||
|
||||
(use-package cape)
|
||||
|
||||
(use-package orderless
|
||||
:custom
|
||||
(completion-styles '(orderless partial-completion basic))
|
||||
(completion-category-defaults nil)
|
||||
(completion-category-overrides nil))
|
||||
|
||||
(use-package yasnippet
|
||||
:commands yas-global-mode
|
||||
:diminish yas-minor-mode
|
||||
:hook
|
||||
(after-init . yas-global-mode))
|
||||
|
||||
(use-package yasnippet-snippets :after yasnippet)
|
||||
|
||||
(use-package exec-path-from-shell
|
||||
:commands exec-path-from-shell-initialize
|
||||
:custom
|
||||
(exec-path-from-shell-arguments nil)
|
||||
:hook
|
||||
(after-init . exec-path-from-shell-initialize))
|
||||
|
||||
(use-package nixpkgs-fmt
|
||||
:custom
|
||||
(nixpkgs-fmt-command "nixfmt"))
|
||||
|
||||
(use-package eat
|
||||
:bind
|
||||
(("C-c e p" . eat-project)
|
||||
("C-c e t" . eat)))
|
||||
|
||||
(use-package f :demand t)
|
||||
|
||||
(use-package envrc
|
||||
:commands envrc-global-mode
|
||||
:hook
|
||||
(after-init . envrc-global-mode))
|
||||
|
||||
(use-package gptel
|
||||
:commands gptel-make-anthropic f-read-text
|
||||
:config
|
||||
(gptel-make-anthropic "Claude"
|
||||
:stream t :key (f-read-text "/run/secrets/claude_key")))
|
||||
|
||||
(use-package sideline-flymake)
|
||||
(use-package sideline-eglot)
|
||||
(use-package sideline
|
||||
:custom
|
||||
(sideline-backends-right '(sideline-flymake sideline-eglot))
|
||||
:hook
|
||||
(eglot-managed-mode . sideline-mode)
|
||||
(flymake-mode . sideline-mode))
|
||||
|
||||
(use-package eglot
|
||||
:custom
|
||||
(eglot-extend-to-xref t)
|
||||
(eglot-ignored-server-capabilities '(:inlayHintProvider))
|
||||
(jsonrpc-event-hook nil)
|
||||
:hook
|
||||
(eglot-managed-mode . eldoc-box-hover-mode)
|
||||
(before-save . eldoc-format-buffer)
|
||||
:bind
|
||||
(:map eglot-mode-map
|
||||
("C-c l a" . eglot-code-actions)
|
||||
("C-c l r" . eglot-rename)
|
||||
("C-c l h" . eldoc)
|
||||
("C-c l g" . xref-find-references)
|
||||
("C-c l w" . eglot-reconnect)))
|
||||
|
||||
(use-package proced
|
||||
:custom
|
||||
(proced-auto-update-flag t)
|
||||
(proced-auto-update-interval 3)
|
||||
(proced-enable-color-flag t)
|
||||
(proced-show-remote-processes t))
|
||||
|
||||
(use-package org
|
||||
:ensure t
|
||||
:defer t
|
||||
:commands (org-mode org-capture org-agenda)
|
||||
:init
|
||||
(defvar org-journal-file "~/nextcloud/org/journal.org")
|
||||
(defvar org-archive-file "~/nextcloud/org/archive.org")
|
||||
(defvar org-notes-file "~/nextcloud/org/notes.org")
|
||||
(defvar org-inbox-file "~/nextcloud/org/inbox.org")
|
||||
(defvar org-work-file "~/nextcloud/org/work.org")
|
||||
(defun my/org-capture-project-target-heading ()
|
||||
"Determine Org target headings from the current file's project path.
|
||||
|
||||
This function assumes a directory structure like '~/projects/COMPANY/PROJECT/'.
|
||||
It extracts 'COMPANY' and 'PROJECT' to use as nested headlines
|
||||
for an Org capture template.
|
||||
|
||||
If the current buffer is not visi
|
||||
ting a file within such a
|
||||
project structure, it returns nil, causing capture to default to
|
||||
the top of the file."
|
||||
(when-let* ((path (buffer-file-name))) ; Ensure we are in a file-visiting buffer
|
||||
(let ((path-parts (split-string path "/" t " ")))
|
||||
(when-let* ((projects-pos (cl-position "projects" path-parts :test #'string=))
|
||||
(company (nth (+ 1 projects-pos) path-parts))
|
||||
(project (nth (+ 2 projects-pos) path-parts)))
|
||||
;; Return a list of headlines for Org to find or create.
|
||||
(list company project)))))
|
||||
:bind
|
||||
(("C-c c" . org-capture)
|
||||
("C-c i" . org-store-link)
|
||||
("C-c a" . org-agenda)
|
||||
:map org-mode-map
|
||||
("C-c t" . org-toggle-inline-images)
|
||||
("C-c l" . org-toggle-link-display))
|
||||
:custom
|
||||
(org-agenda-files (list org-inbox-file org-journal-file))
|
||||
(org-directory "~/nextcloud/org")
|
||||
(org-default-notes-file org-inbox-file)
|
||||
(org-archive-location (concat org-archive-file "::* From %s"))
|
||||
(org-log-done 'time)
|
||||
(org-log-into-drawer t)
|
||||
(org-hide-emphasis-markers t)
|
||||
(org-src-fontify-natively t)
|
||||
(org-src-tab-acts-natively t)
|
||||
(org-capture-templates '(("t" "todo" entry (file org-inbox-file)
|
||||
"* todo %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n)")
|
||||
("j" "Journal" entry (file+olp+datetree org-journal-file)
|
||||
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
||||
("n" "Note" entry (file org-notes-file)
|
||||
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
||||
("p" "Project Task" item
|
||||
(file+function org-work-file my/org-capture-project-target-heading)
|
||||
"* todo %? \n CLOCK: %U"
|
||||
))
|
||||
)
|
||||
:config
|
||||
;; Enable syntax highlighting in code blocks
|
||||
(add-hook 'org-mode-hook 'turn-on-font-lock)
|
||||
(add-hook 'org-mode-hook 'org-indent-mode))
|
||||
|
||||
;; extras
|
||||
(use-package comp-run
|
||||
:ensure nil
|
||||
:config
|
||||
(push "tramp-loaddefs.el.gz" native-comp-jit-compilation-deny-list)
|
||||
(push "cl-loaddefs.el.gz" native-comp-jit-compilation-deny-list))
|
||||
|
||||
(use-package rustic
|
||||
:custom
|
||||
(rustic-lsp-client 'eglot))
|
||||
|
||||
(provide 'init)
|
||||
|
||||
;;; init.el ends here
|
||||
@@ -1,66 +0,0 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
let
|
||||
# Module name
|
||||
moduleName = "flatpaks";
|
||||
|
||||
# Top-level toggle for this module
|
||||
enableProgram = config.enableFlatpaks or false;
|
||||
|
||||
# Path to your Flatpak list
|
||||
assetPath = ../../../assets/system/apps/flatpaks.conf;
|
||||
|
||||
# Resolve user safely
|
||||
username = config.defaultUser or "henrov";
|
||||
in
|
||||
{
|
||||
# --- Top-level toggle option ---
|
||||
options.enableFlatpaks = lib.mkEnableOption "Enable automatic Flatpak installation";
|
||||
|
||||
# --- Config only applied if enabled ---
|
||||
config = lib.mkIf enableProgram {
|
||||
|
||||
# Deploy the Flatpak conf file
|
||||
environment.etc."flatpak/flatpaks.conf".source = assetPath;
|
||||
|
||||
# Enable system Flatpak service
|
||||
services.flatpak.enable = true;
|
||||
xdg.portal.enable = true;
|
||||
|
||||
# Systemd service to install Flatpaks from the list
|
||||
systemd.services."${moduleName}-sync" = {
|
||||
description = "Install Flatpak apps listed in flatpaks.conf";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = ''
|
||||
set -euo pipefail
|
||||
CONF="${assetPath}"
|
||||
|
||||
# Add Flathub if not present
|
||||
if ! flatpak remotes --system --columns=name | grep -qx flathub; then
|
||||
flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
fi
|
||||
|
||||
# Install every Flatpak listed in the conf file
|
||||
while IFS= read -r app || [ -n "$app" ]; do
|
||||
app=$(echo "$app" | sed 's/#.*//;s/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
if [ -n "$app" ]; then
|
||||
if ! flatpak info --system "$app" >/dev/null 2>&1; then
|
||||
flatpak install --system -y --noninteractive flathub "$app"
|
||||
fi
|
||||
fi
|
||||
done < "$CONF"
|
||||
'';
|
||||
};
|
||||
|
||||
restartTriggers = [ assetPath ];
|
||||
|
||||
# Include only the packages needed for this service
|
||||
path = [ pkgs.flatpak pkgs.coreutils pkgs.gnugrep pkgs.gnused ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
let
|
||||
enableProgram = config.enableThunar or false;
|
||||
username = config.defaultUser or "henrov";
|
||||
in
|
||||
{
|
||||
# Top-level toggle
|
||||
options.enableThunar = lib.mkEnableOption "Enable Thunar file manager";
|
||||
|
||||
# Only apply config if enabled
|
||||
config = lib.mkIf enableProgram {
|
||||
# Install Thunar and related packages system-wide
|
||||
environment.systemPackages = [
|
||||
pkgs.thunar
|
||||
pkgs.thunar-plugins
|
||||
pkgs.xarchiver
|
||||
];
|
||||
|
||||
# Remove invalid top-level 'home' reference
|
||||
# If you want sessionVariables, define them in Home Manager instead
|
||||
# Example for Home Manager:
|
||||
# home-manager.users.${username}.sessionVariables = {
|
||||
# FILE_MANAGER = "thunar";
|
||||
# USERNAME = username;
|
||||
# };
|
||||
};
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
# --- Program definition ---
|
||||
programName = "wofi";
|
||||
|
||||
# Path to assets
|
||||
assetPath = ../../../assets/system/conf/${programName};
|
||||
|
||||
# Generate file mappings
|
||||
programFiles =
|
||||
if builtins.pathExists assetPath then builtins.readDir assetPath else {};
|
||||
files = lib.genAttrs (builtins.attrNames programFiles) (name: {
|
||||
src = "${assetPath}/${name}";
|
||||
});
|
||||
|
||||
# Top-level toggle for this module
|
||||
enableProgram = config.enableWofi or false;
|
||||
|
||||
# Default user
|
||||
username = config.defaultUser or "henrov";
|
||||
in
|
||||
{
|
||||
# --- Module option ---
|
||||
options.enableWofi = lib.mkEnableOption "Enable Wofi terminal launcher";
|
||||
|
||||
# --- Config ---
|
||||
config = lib.mkIf enableProgram {
|
||||
|
||||
# --- Deploy assets to ~/.config/wofi ---
|
||||
environment.etc."${programName}".source = assetPath;
|
||||
|
||||
# --- Optional systemd service to sync config ---
|
||||
systemd.services."${programName}-sync" = {
|
||||
description = "Sync ${programName} configuration files";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = ''
|
||||
set -euo pipefail
|
||||
if [ -d "${assetPath}" ]; then
|
||||
for f in ${lib.concatStringsSep " " (builtins.attrNames files)}; do
|
||||
mkdir -p "/home/${username}/.config/${programName}"
|
||||
cp -u "${assetPath}/$f" "/home/${username}/.config/${programName}/$f"
|
||||
done
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
restartTriggers = [ assetPath ];
|
||||
path = [];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
# --- Program definition ---
|
||||
programName = "zenbrowser";
|
||||
|
||||
# Assets (optional, empty if no config)
|
||||
assetPath =
|
||||
if builtins.pathExists ../../../assets/system/conf/${programName}
|
||||
then ../../../assets/system/conf/${programName}
|
||||
else null;
|
||||
|
||||
programFiles =
|
||||
if assetPath != null then builtins.readDir assetPath else {};
|
||||
|
||||
files = lib.genAttrs (builtins.attrNames programFiles) (name: {
|
||||
src = "${assetPath}/${name}";
|
||||
});
|
||||
|
||||
# Top-level toggle for this module
|
||||
enableProgram = config.enableZenBrowser or false;
|
||||
|
||||
# Default user fallback
|
||||
username = config.defaultUser or "henrov";
|
||||
in
|
||||
{
|
||||
# --- Option ---
|
||||
options.enableZenBrowser = lib.mkEnableOption "Install Zen Browser";
|
||||
|
||||
# --- Config ---
|
||||
config = lib.mkIf enableProgram {
|
||||
|
||||
# --- Deploy assets (if any) ---
|
||||
environment.etc."${programName}".source = assetPath;
|
||||
|
||||
# --- System packages ---
|
||||
environment.systemPackages = [ pkgs.zen-browser ];
|
||||
|
||||
# --- Example systemd service to sync assets ---
|
||||
systemd.services."${programName}-sync" = {
|
||||
description = "Sync ${programName} configuration files";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = ''
|
||||
set -euo pipefail
|
||||
if [ -d "${assetPath}" ]; then
|
||||
for f in ${lib.concatStringsSep " " (builtins.attrNames files)}; do
|
||||
cp -u "${assetPath}/$f" "/home/${username}/.config/${programName}/$f"
|
||||
done
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
restartTriggers = [ assetPath ];
|
||||
path = [];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
{
|
||||
options.enableFonts = lib.mkEnableOption "Enable nerd fonts";
|
||||
|
||||
config = lib.mkIf (config.enableFonts or false) {
|
||||
fonts.packages = with pkgs; [
|
||||
nerd-fonts.iosevka
|
||||
nerd-fonts.fira-code
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
# --- Module variables ---
|
||||
moduleName = "waybar";
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Assets directory (self-contained)
|
||||
assetPath = ../../../assets/system/conf/${moduleName};
|
||||
|
||||
# Read required config files
|
||||
waybarConfig = "${assetPath}/waybar.conf";
|
||||
waybarStyle = "${assetPath}/style.css";
|
||||
|
||||
# Top-level toggle
|
||||
enableProgram = config.enableWaybar or false;
|
||||
in
|
||||
{
|
||||
# --- Option ---
|
||||
options.enableWaybar =
|
||||
lib.mkEnableOption "Enable Waybar status bar";
|
||||
|
||||
# --- Config ---
|
||||
config = lib.mkIf enableProgram {
|
||||
|
||||
# Install Waybar (symbolic reference expected to be resolved elsewhere)
|
||||
environment.systemPackages = [
|
||||
"waybar"
|
||||
];
|
||||
|
||||
# Deploy only required files to ~/.config/waybar
|
||||
home-manager.users.${username}.xdg.configFile = {
|
||||
|
||||
"waybar/config".source =
|
||||
if builtins.pathExists waybarConfig
|
||||
then waybarConfig
|
||||
else null;
|
||||
|
||||
"waybar/style.css".source =
|
||||
if builtins.pathExists waybarStyle
|
||||
then waybarStyle
|
||||
else null;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
services.dbus = lib.mkForce {
|
||||
enable = true; # Force this to be true
|
||||
};
|
||||
|
||||
# Configure dbus-broker via its configuration file
|
||||
environment.etc."dbus-broker/launch.conf".text = ''
|
||||
[General]
|
||||
LogLevel=warning
|
||||
MaxConnectionsPerUser=2048
|
||||
'';
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
{ lib, config, pkgs,... }:
|
||||
|
||||
let
|
||||
coreEnabled = config.mySystem.system.core.enable or false;
|
||||
in
|
||||
{
|
||||
options.mySystem.system.locale.enable =
|
||||
lib.mkEnableOption "Network settings";
|
||||
|
||||
config = lib.mkIf (coreEnabled || config.mySystem.system.locale.enable) {
|
||||
|
||||
networking = {
|
||||
useDHCP = lib.mkDefault true;
|
||||
networkmanager.enable = true;
|
||||
networkmanager.wifi.backend = "iwd";
|
||||
wireless.iwd.enable = true;
|
||||
wireless.userControlled.enable = true;
|
||||
firewall = {
|
||||
enable = true;
|
||||
# KDE Connect: discovery + encrypted connections
|
||||
allowedTCPPortRanges = [
|
||||
{
|
||||
from = 1714;
|
||||
to = 1764;
|
||||
}
|
||||
];
|
||||
allowedUDPPortRanges = [
|
||||
{
|
||||
from = 1714;
|
||||
to = 1764;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Install NetworkManager
|
||||
environment.systemPackages = with pkgs; [
|
||||
networkmanager
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{ lib, config, pkgs, inputs, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Wayland-specific packages
|
||||
uwsmPkg = pkgs.uwsm or inputs.uwsm.packages.${pkgs.system}.default;
|
||||
in
|
||||
{
|
||||
# System packages
|
||||
environment.systemPackages = [ uwsmPkg ];
|
||||
|
||||
# Enable Hyprland at system level
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
|
||||
# Home Manager user settings
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.packages = [ uwsmPkg ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{ lib, config, pkgs, inputs, ... }:
|
||||
|
||||
let
|
||||
# Default username fallback
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Asset folder for configs
|
||||
assetPath = ../../../assets/<myModuleName>/conf;
|
||||
|
||||
# Main configuration file
|
||||
mainConfig = "${assetPath}/<mainConfigFile>";
|
||||
|
||||
# Determine the package: prefer Nixpkgs, fallback to -git, fallback to flake input
|
||||
myPkg =
|
||||
pkgs.<myPackage> or
|
||||
pkgs.<myPackage>-git or
|
||||
inputs.<myPackage>.packages.${pkgs.system}.default;
|
||||
in
|
||||
{
|
||||
# Install system-wide
|
||||
environment.systemPackages = [ myPkg ];
|
||||
|
||||
# Home Manager user settings
|
||||
_module.args.hmUsers = {
|
||||
${username} = {
|
||||
home.packages = [ myPkg ];
|
||||
|
||||
# Copy main config into user's home
|
||||
home.file.".config/<myModuleName>/<mainConfigFile>".source = mainConfig;
|
||||
|
||||
# Optional module-specific settings
|
||||
settings.general = {
|
||||
# Example placeholder
|
||||
"example.setting" = "value";
|
||||
};
|
||||
|
||||
# Optional: you can add more files dynamically from assetPath if needed
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
{ pkgs, user, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
gtk3 # GTK target
|
||||
gtk4 # GTK target
|
||||
];
|
||||
# Stylix GTK target
|
||||
stylix.targets.gtk.enable = true;
|
||||
|
||||
home-manager.users.${user.username} = {
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = "Catppuccin-Mocha-Standard-Blue-Dark";
|
||||
package = pkgs.magnetic-catppuccin-gtk;
|
||||
};
|
||||
iconTheme = {
|
||||
name = "Papirus-Dark";
|
||||
package = pkgs.papirus-icon-theme;
|
||||
};
|
||||
gtk3.extraConfig = {
|
||||
gtk-application-prefer-dark-theme = 1;
|
||||
};
|
||||
gtk4.extraConfig = {
|
||||
gtk-application-prefer-dark-theme = 1;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
# Enable Bluetooth hardware and daemon
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
packages = with pkgs; [ bluez ];
|
||||
};
|
||||
|
||||
# Enable Bluetooth audio support in PipeWire
|
||||
services.pipewire = {
|
||||
config.pulse = {
|
||||
bluez5.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Optional: Additional Bluetooth settings
|
||||
hardware.bluetooth.extraConfig = ''
|
||||
AutoEnable=true
|
||||
DiscoverableTimeout=0
|
||||
PairableTimeout=0
|
||||
'';
|
||||
|
||||
# Install a graphical Bluetooth manager (optional)
|
||||
environment.systemPackages = with pkgs; [
|
||||
blueman
|
||||
];
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
coreEnabled = config.mySystem.system.core.enable or false;
|
||||
in
|
||||
{
|
||||
options.mySystem.system.locale.enable =
|
||||
lib.mkEnableOption "Home-Manager settings";
|
||||
|
||||
config = lib.mkIf (coreEnabled || config.mySystem.system.locale.enable) {
|
||||
|
||||
# --- Home Manager Base ---
|
||||
home-manager = {
|
||||
backupFileExtension = "backup";
|
||||
|
||||
users.henrov = {
|
||||
home.sessionVariables = {
|
||||
TERMINAL = "kitty";
|
||||
EDITOR = "emacs";
|
||||
BROWSER = "zen";
|
||||
};
|
||||
|
||||
home.stateVersion = "26.05";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
coreEnabled = config.mySystem.system.core.enable or false;
|
||||
in
|
||||
{
|
||||
# Top-level option for this module
|
||||
options.mySystem.system.locale.enable =
|
||||
lib.mkEnableOption "Enable Nix & Flake specific settings";
|
||||
|
||||
# Top-level container for all custom program configs (your myPrograms idea)
|
||||
options.myPrograms = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.any;
|
||||
default = {};
|
||||
description = "Container for all custom program configurations";
|
||||
};
|
||||
|
||||
# Apply the configuration only if core or locale is enabled
|
||||
config = lib.mkIf (coreEnabled || config.mySystem.system.locale.enable) {
|
||||
nix.settings = {
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
download-buffer-size = 536870912; # 512 MB
|
||||
cores = 2;
|
||||
max-jobs = 1;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{ pkgs, user, ... } :
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
tuigreet
|
||||
];
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a • %h | %F'";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{ lib, config, ... }:
|
||||
|
||||
let
|
||||
coreEnabled = config.mySystem.system.core.enable or false;
|
||||
in
|
||||
{
|
||||
options.mySystem.system.locale.enable =
|
||||
lib.mkEnableOption "Services settings (printing / audio)";
|
||||
|
||||
config = lib.mkIf (coreEnabled || config.mySystem.system.locale.enable) {
|
||||
|
||||
# --- Services (Printing & Audio) ---
|
||||
services.printing.enable = true;
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user