Droidnix: A Dendritic NixOS + Home Manager Configuration NixOS Configuration Structure
-Table of Contents
--
-
- Shortcuts -
- Introduction intro - - -
- Root Level -
- Generated Structure - - -
- The Assets Folder assets - - -
- The Actual Code code
-
-
-
flake.nix
-
- - First the nix-files that flake really needs and that do not fit wel in the hierarchical structure
-
-
-
generated/out_of_tree/users/top.nix
-generated/out_of_tree/users/user.nix
-generated/out_of_tree/users/henrov.nix
-generated/out_of_tree/terminal_shell/top.nix
-generated/out_of_tree/terminal_shell/devshell.nix
-generated/out_of_tree/machines/traveldroid/top.nix
-generated/out_of_tree/machines/traveldroid/hardware-configuration.nix
-generated/out_of_tree/machines/traveldroid/boot.nix
-generated/out_of_tree/machines/traveldroid/machine.nix
-generated/out_of_tree/machines/traveldroid/dbus.nix
-generated/out_of_tree/machines/traveldroid/networking.nix
-generated/out_of_tree/machines/traveldroid/session.nix
-generated/out_of_tree/machines/traveldroid/bluetooth.nix
-generated/out_of_tree/machines/traveldroid/audio.nix
-generated/out_of_tree/machines/traveldroid/xdg.nix
-
- - Now we reach the top of the hierarchy which will call all other imports
-
-
-
generated/top.nix
-generated/hyprland/hyprland.nix
-generated/hyprland/animations_effects/top.nix
-generated/hyprland/decorations/top.nix
-generated/hyprland/notifications/top.nix
-generated/hyprland/statusbar_tray/top.nix
-generated/hyprland/task_window_workspace_switcher/top.nix
-generated/hyprland/window_rules/top.nix
-generated/system/top.nix
-generated/system/applications/top.nix
-generated/system/applications/packages.nix
-generated/system/applications/flatpaks.nix
-generated/system/core/top.nix
-generated/system/core/gtk.nix
-generated/system/core/fonts.nix
-generated/system/core/eww.nix
-generated/system/core/waybar.nix
-generated/system/core/login-tuigreeter.nix
-generated/system/core/wayland.nix
-generated/system/development/top.nix
-generated/system/system_management/top.nix
-generated/system/applications/accessibility/top.nix
-generated/system/applications/file_management/top.nix
-generated/system/applications/file_management/thunar.nix
-generated/system/applications/gaming/top.nix
-generated/system/applications/media_playback_editing/top.nix
-generated/system/applications/office_productivity/top.nix
-generated/system/applications/terminal_shell/top.nix
-generated/system/applications/terminal_shell/kitty.nix
-generated/system/applications/terminal_shell/starship.nix
-generated/system/applications/terminal_shell/zsh.nix
-generated/system/applications/terminal_shell/emacs.nix
-generated/system/applications/terminal_shell/early-init.el
-generated/system/applications/terminal_shell/init.el
-generated/system/development/databases/top.nix
-generated/system/development/devops_ci_cd/top.nix
-generated/system/development/programming_languages/top.nix
-generated/system/development/virtualization/top.nix
-generated/system/development/web_development/top.nix
-generated/system/system_management/audio/top.nix
-generated/system/system_management/backups/top.nix
-generated/system/system_management/bluetooth/top.nix
-generated/system/system_management/disk_management/top.nix
-generated/system/system_management/hardware_sensors/top.nix
-generated/system/system_management/logging_monitoring/top.nix
-generated/system/system_management/login_manager/top.nix
-generated/system/system_management/monitor_setup/top.nix
-generated/system/system_management/networking/top.nix
-generated/system/system_management/power_management/top.nix
-generated/system/system_management/printers_scanners/top.nix
-generated/system/system_management/security/top.nix
-generated/system/system_management/system_updates/top.nix
-generated/system/task_launcher/top.nix
-generated/system/task_launcher/wofi.nix
-
-
Shortcuts
--Introduction -The Assets Folder -The Actual Code -
- --— -
-Introduction intro
-What is Droidnix
-
-Droidnix is a modular, declarative NixOS + Home Manager configuration system. It allows users to choose between Hyprland and Mangowc as their window manager, with shared and WM-specific configurations managed via Emacs Org and Nix Flakes. The project is designed for reproducibility, maintainability, and cross-machine compatibility.
-
Goals, project Structure, import hierarchy
--This project uses a modular NixOS configuration with Hyprland and MangoWC support, designed for literate programming and cross-device reusability. -The Droidnix repository is organized into two main parts: -
--
-
.assets/: Static, non-generated files (e.g., configs, scripts, themes).
-- Generated folders (
system,hyprland,mangowc): NixOS and Home Manager configurations, generated from Org files.
-
Root Level
--
-
flake.nixis the entry point and imports: --
-
generated/system/
-generated/hyprland/
-- Machine-specific configurations from
assets/machines/
-
-
Generated Structure
-
-The generated/ directory contains all generated configurations, divided into three main groups: system, hyprland, and mangowc.
-
System (generated/system/)
--This directory contains system-wide configurations that are independent of the window manager. -
-Applications (applications/)
--
-
file_management/: Configurations for file managers and storage solutions.
-gaming/: Settings for gaming-related software.
-office_productivity/: Configurations for office software.
-media_playback_editing/: Settings for media playback and editing software.
-terminal_shell/: Configurations for terminal emulators and shells.
-
Development (development/)
--
-
databases/: Settings for local databases.
-devops_ci_cd/: Configurations for DevOps tools.
-programming_languages/: Settings for programming languages and their runtimes.
-virtualization/: Configurations for virtualization and containerization tools.
-web_development/: Settings for web development.
-
System Management (system_management/)
--
-
backups/: Settings for backup software.
-bluetooth/: Configurations for Bluetooth devices and services.
-power_management/: Settings for power management.
-audio/: Configurations for audio.
-hardware_sensors/: Settings for hardware monitoring.
-logging_monitoring/: Configurations for system logging and monitoring.
-login_manager/: Settings for the login manager.
-monitor_setup/: Configurations for display settings.
-networking/: Settings for networking.
-printers_scanners/: Configurations for printers and scanners.
-disk_management/: Settings for disk management.
-security/: Security-related configurations.
-system_updates/: Settings for system updates and package management.
-
Hyprland (generated/hyprland/)
--This directory contains configurations specific to Hyprland. -
- --
-
animations_effects/: Settings for window animations and visual effects.
-decorations/: Configurations for window decorations.
-keyboard_binds/: Keyboard shortcuts for Hyprland.
-notifications/: Settings for notifications.
-statusbar_tray/: Configurations for the status bar and system tray.
-task_launcher/: Settings for task launchers.
-task_window_workspace_switcher/: Configurations for switching between windows and workspaces.
-window_rules/: Rules for window behavior.
-
-<<TREE>> --
First Setup
--
-
- Clone this repository. -
- Run the setup script:
./setup_droidnix.sh.
- - Edit
.assets/system/conf/base.confto choose your window manager (wm = "hyprland"orwm = "mangowc").
- - Tangle this Org file to generate Nix configurations:
C-c C-v tin Emacs or use this:emacs README.org --batch -f org-babel-tangle && emacs --batch --eval "(setq org-html-htmlize-output-type nil)" README.org -f org-html-export-to-html
- - Build and switch:
sudo nixos-rebuild switch --flake .#<hostname>.
-
-— -
-The Assets Folder assets
-
-The .assets/ folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.
-
.assets/system/
--This folder contains files shared across both window managers, such as wallpapers, shell configs, and system scripts. -
- --
-
conf/base.conf: Defines the window manager choice and other global settings.
-scripts/: System-wide scripts (e.g., utilities, helpers).
-
.assets/hyprland/
--Hyprland-specific assets, including configs, themes, and scripts. -
- --
-
conf/: Hyprland configuration files (e.g.,hyprland.conf).
-themes/: Hyprland-specific theme scripts.
-scripts/: Hyprland-specific scripts.
-
.assets/mangowc/
--Mangowc-specific assets, including configs, themes, and scripts. -
- --
-
conf/: Mangowc configuration files.
-themes/: Mangowc-specific theme scripts.
-scripts/: Mangowc-specific scripts.
-
.assets/machines/
-
-Machine-specific NixOS configurations (e.g., configuration.nix for maindroid and traveldroid).
-
-— -
-The Actual Code code
--This section contains the Org blocks for tangling Nix code into the generated folders. -
-flake.nix
--The Nix flake definition for Droidnix. -
-{
- description = "Droidnix: A dendritic NixOS + Home Manager configuration";
-
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
- home-manager = {
- url = "github:nix-community/home-manager";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- catppuccin = {
- url = "github:catppuccin/nix";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- emacs-overlay = {
- url = "github:nix-community/emacs-overlay";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- zen-browser = {
- url = "github:youwen5/zen-browser-flake";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- hyprland.url = "github:hyprwm/Hyprland";
- };
-
-outputs =
- inputs@{
- self,
- nixpkgs,
- home-manager,
- emacs-overlay,
- catppuccin,
- zen-browser,
- hyprland,
- ...
- }:
- let
- lib = nixpkgs.lib;
- system = "x86_64-linux";
- user = import ./generated/out_of_tree/users/henrov.nix;
- machines = [
- "traveldroid"
- "maindroid"
- ];
- flakeRoot = ./.; # Define flakeRoot here
- in
- {
- nixosConfigurations = lib.genAttrs machines (
- machine:
- lib.nixosSystem {
- inherit system;
- modules = [
- # Import machine-specific configurations
- ./generated/out_of_tree/machines/traveldroid/top.nix
- # Catppuccin theme module
- catppuccin.nixosModules.catppuccin
- # Anchoring all the other nixes
- ./generated/top.nix
- # Home Manager module
- inputs.home-manager.nixosModules.home-manager
- {
- home-manager.useGlobalPkgs = true;
- home-manager.useUserPackages = true;
- home-manager.extraSpecialArgs = { inherit user inputs flakeRoot; };
- }
- ];
- specialArgs = { inherit user inputs flakeRoot; };
- }
- );
-
- homeConfigurations = lib.genAttrs (map (machine: "${user.username}@${machine}") machines) (
- userMachine:
- home-manager.lib.homeManagerConfiguration {
- inherit system;
- configuration = import ./user.nix { inherit inputs user flakeRoot; };
- extraSpecialArgs = { inherit user inputs flakeRoot; };
- }
- );
-
- devShells.${system}.default = import ./generated/out_of_tree/terminal_shell/devshell.nix {
- inherit (nixpkgs.legacyPackages.${system}) mkShell;
- };
- };
-}
-
-First the nix-files that flake really needs and that do not fit wel in the hierarchical structure
-generated/out_of_tree/users/top.nix
--The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure. -
-{ config, pkgs, lib, ... }:
-{
- imports = [
- ./user.nix
- ];
-}
-
-generated/out_of_tree/users/user.nix
--This is the default user, just search and replace henrov another name if you want to change -
-{
- config,
- pkgs,
- lib,
- inputs,
- ...
-}:
-
-let
- user = import ./henrov.nix;
-in
-{
- home-manager.users.${user.username} = {
- home.stateVersion = "25.11";
- home.username = user.username;
- home.homeDirectory = user.homeDirectory;
- home.packages = with pkgs; [
- direnv
- git-extras
- ];
- };
-
- # Ensure the user is in the necessary groups
- users.users.${config.users.users.${user.username}.username} = {
- extraGroups = [ "networkmanager" ];
-}
-
-generated/out_of_tree/users/henrov.nix
--This is the default user, just search and replace henrov another name if you want to change -
-{
- username = "henrov";
- hashedPassword = "$6$ISAmsPLyFi7idYXr$VmZsq.zMsyh1irSkyDNqtorNXG0oEHbbMVqTii1t8bymvrQ5ZQmbdi4OiBNeNYe/huHGrojXM.3TST2fTLz0T.";
- homeDirectory = "/home/henrov";
- stateVersion = "25.11";
- locale = "nl_NL.UTF-8";
-}
-
-generated/out_of_tree/terminal_shell/top.nix
--This code defines a Nix shell environment (also called a "devShell") that you can enter using the nix develop command. When you enter this shell, Nix will provide the tools and dependencies listed in buildInputs. -
-{
- config,
- pkgs,
- lib,
- user,
- inputs,
- flakeRoot,
- ...
-}:
-
-{
- imports = [
- ./devshell.nix
- inputs.home-manager.nixosModules.home-manager
- ];
-}
-
-generated/out_of_tree/terminal_shell/devshell.nix
--This code defines a Nix shell environment (also called a "devShell") that you can enter using the nix develop command. When you enter this shell, Nix will provide the tools and dependencies listed in buildInputs. -
-{ mkShell, ... }:
-mkShell {
- buildInputs = with import <nixpkgs> {}; [
- nil
- nixfmt-rfc-style
- ];
-}
-
-generated/out_of_tree/machines/traveldroid/top.nix
--This is the top of the machine hierarchy -
-{
- config,
- pkgs,
- lib,
- user,
- inputs,
- flakeRoot,
- ...
-}:
-
-{
- imports = [
- ./boot.nix
- ./hardware-configuration.nix
- ./machine.nix
- ./dbus.nix
- ./audio.nix
- ./xdg.nix
- ./session.nix
- ./networking.nix
- inputs.home-manager.nixosModules.home-manager
- ];
-}
-
-generated/out_of_tree/machines/traveldroid/hardware-configuration.nix
--
-
- Boot into NixOS Live ISO or your installed system. -
- Open a terminal. -
- Run: <code>sudo nixos-generate-config –root /mnt</code> (Omit –root /mnt if already running NixOS.) -
{
- 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;
-}
-
-generated/out_of_tree/machines/traveldroid/boot.nix
--This file has most of the settings the control how the computer boots up. -
-{ pkgs, ... } :
-{
- boot = {
- initrd = {
- verbose = false; # its a lot of logs. dont need it, unless we do.
- kernelModules = [ ]; # no kernel modules on boot
- };
-
- extraModulePackages = [ ]; # no extra packages on boot either
- kernelPackages = pkgs.linuxPackages_latest; # latest greatest linux kernel
- kernelParams = [ "silent" ]; # quiet those logs
-
- consoleLogLevel = 0; # quiten more logs
- plymouth.enable = true; # graphical boot animation instead
-
- supportedFilesystems = [ "ntfs" ]; # should see the ntfs (windows)
-
- loader = {
- systemd-boot.enable = true; # systemd-boot
- systemd-boot.configurationLimit = 10;
- efi.canTouchEfiVariables = true; # allow editing efi to edit the boot loader
- timeout = 5; # grub timeout to make a selection
- };
- };
-}
-
-generated/out_of_tree/machines/traveldroid/machine.nix
--This is the top if the machine hierarchy -
-{
- config,
- pkgs,
- lib,
- user,
- inputs,
- flakeRoot,
- ...
-}:
-
-{
- options = {
- wm = lib.mkOption {
- type = lib.types.str;
- default = "hyprland";
- description = "Type of window manager to use";
- };
- };
-
- config = {
- # Minimal settings that must be defined here
- networking.hostName = "traveldroid";
- wm.type = "hyprland";
-
- # User configuration
- users.users.${user.username} = {
- isNormalUser = true;
- extraGroups = [
- "wheel"
- "networkmanager"
- ];
- hashedPassword = user.hashedPassword;
- home = user.homeDirectory;
- };
- # Optional: Enable auto-login for testing
- services.getty.autologinUser = user.username;
- };
-}
-
-generated/out_of_tree/machines/traveldroid/dbus.nix
--This sets the dbus implementation -
-{ 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
- '';
-}
-
-generated/out_of_tree/machines/traveldroid/networking.nix
--This sets the networking. -
-{
- config,
- pkgs,
- lib,
- ...
-}:
-
-{
- 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 and wofi
- environment.systemPackages = with pkgs; [
- networkmanager
- wofi
- ];
-}
-
-generated/out_of_tree/machines/traveldroid/session.nix
--This sets the session variables -
-{ config, pkgs, user, ... }:
-{
- environment.sessionVariables = {
- XDG_SESSION_TYPE = "wayland";
- XDG_CURRENT_DESKTOP = "Hyprland";
- XCURSOR_SIZE = "24";
- GTK_ENABLE_DARK_MODE = "1";
- GTK_THEME = "Catppuccin-Mocha-Standard-Blue-Dark";
- GTK_ICON_THEME = "Papirus-Dark";
- # Use this instead of GTK_APPLICATION_PREFER_DARK_THEME for newer GTK apps:
- GTK_THEME_VARIANT = "dark";
- # For Qt apps (if any):
- QT_STYLE_OVERRIDE = "gtk2";
- # For Zen Browser (Firefox fork):
- MOZ_ENABLE_WAYLAND = "1";
- GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/glib-2.0/schemas";
- };
-
- # Add other session-wide variables here (e.g., QT_QPA_PLATFORM, SDL_VIDEODRIVER)
-}
-
-generated/out_of_tree/machines/traveldroid/bluetooth.nix
--This sets the bluetooth implementation -
-{ 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
- ];
-}
-
-generated/out_of_tree/machines/traveldroid/audio.nix
--This sets audiosystem for this machine -
-{ config, pkgs, ... }:
-{
- services.pipewire = {
- enable = true;
- alsa.enable = true; # ALSA compatibility
- pulse.enable = true; # PulseAudio compatibility
- wireplumber.enable = true; # Session manager for PipeWire
- };
-
- # Realtime privileges for pro audio (optional)
- security.rtkit.enable = true;
-}
-
-generated/out_of_tree/machines/traveldroid/xdg.nix
--This sets the XDG implementation -
-{ config, pkgs, ... }:
-{
- xdg.portal = {
- enable = true;
- config.system.default = [ "hyprland" "gtk" ];
- };
-}
-
-
-Now we reach the top of the hierarchy which will call all other imports
-generated/top.nix
--The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure. -
-{ config, pkgs, lib, ... }:
-{
- imports = [
- ./system/top.nix
- ./hyprland/top.nix
- # ./mangowc/top.nix
- ];
-}
-
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./hyprland.nix
- ./animations_effects/top.nix
- ./decorations/top.nix
- ./notifications/top.nix
- ./statusbar_tray/top.nix
- ./task_window_workspace_switcher/top.nix
- ./window_rules/top.nix
- ];
-}
-
-generated/hyprland/hyprland.nix
--The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure. -
-{
- config,
- pkgs,
- lib,
- user,
- flakeRoot,
- ...
-}:
-
-let
- hyprlandFiles = builtins.attrNames (builtins.readDir "${flakeRoot}/assets/hyprland/conf/hypr");
- # Filter out hyprland.conf from the list of files to symlink
- otherHyprlandFiles = lib.filter (name: name != "hyprland.conf") hyprlandFiles;
- # Generate xdg.configFile entries for all files except hyprland.conf
- otherConfigs = lib.genAttrs otherHyprlandFiles (name: {
- target = "hypr/${name}";
- source = "${flakeRoot}/assets/hyprland/conf/hypr/${name}";
- });
-in
-{
- programs.hyprland = {
- enable = true;
- };
-
- home-manager.users.${user.username} = {
- home.stateVersion = "25.11";
- home.username = user.username;
- home.homeDirectory =
- config.home-manager.users.${user.username}.homeDirectory or "/home/${user.username}";
-
- wayland.windowManager.hyprland = {
- enable = true;
- };
-
- # Merge all xdg.configFile definitions
- xdg.configFile = otherConfigs // {
- "hypr/hyprland.conf".text = ''
- ${builtins.readFile "${flakeRoot}/assets/hyprland/conf/hypr/hyprland.conf"}
- # Your manual settings will go below this line and will not be overwritten
- '';
- "hypr/.keep".text = "";
- };
- };
-}
-
-generated/hyprland/animations_effects/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/hyprland/decorations/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/hyprland/notifications/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/hyprland/statusbar_tray/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/hyprland/task_window_workspace_switcher/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/hyprland/window_rules/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./applications/top.nix
- ./core/top.nix
- ./development/top.nix
- ./system_management/top.nix
- ];
- # .. put any code here
-}
-
-generated/system/applications/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./packages.nix
- ./flatpaks.nix
- ./accessibility/top.nix
- ./file_management/top.nix
- ./gaming/top.nix
- ./media_playback_editing/top.nix
- ./office_productivity/top.nix
- ./terminal_shell/top.nix
- ];
- nixpkgs.config.allowUnfree = true;
-}
-
-generated/system/applications/packages.nix
--This will import all packages listed in ./assets/system/apps/packlages.conf -
-{ config, lib, pkgs, flakeRoot, inputs, ... }:
-let
- packagesConfPath = "${flakeRoot}/assets/system/apps/packages.conf";
- raw = builtins.readFile packagesConfPath;
- # IMPORTANT: explicit "\n" so we never accidentally split into characters
- rawLines = lib.splitString "\n" raw;
- # Guard: if we accidentally split into characters, rawLines length ~= stringLength raw
- _guard = assert !(
- builtins.stringLength raw > 1 &&
- builtins.length rawLines == builtins.stringLength raw
- ); true;
- cleanLine = l:
- let
- noCR = lib.replaceStrings [ "\r" ] [ "" ] l;
- noInlineComment = lib.head (lib.splitString "#" noCR);
- in
- lib.strings.trim noInlineComment;
- entries =
- builtins.filter (l: l != "")
- (map cleanLine rawLines);
- resolvePkg = name:
- let
- parts = lib.splitString "." name;
- found = lib.attrByPath parts null pkgs;
- in
- if found == null then
- throw ''
- packages.nix: package not found in pkgs
- Token : ${builtins.toJSON name}
- packages.conf : ${toString packagesConfPath}
- Hint : check the attribute name on search.nixos.org/packages
- ''
- else
- found;
- packages = builtins.seq _guard (map resolvePkg entries);
- zenBrowser =
- inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
-in
-{
- environment.systemPackages =
- packages
- ++ [ zenBrowser ];
-}
-
-
-generated/system/applications/flatpaks.nix
--This will import all packages listed in ./assets/system/apps/flatpaks.conf -
-{
- config,
- pkgs,
- lib,
- flakeRoot,
- ...
-}:
-let
- moduleName = "install-flatpaks";
- flatpakConfPath = "${flakeRoot}/assets/system/apps/flatpaks.conf";
- raw = builtins.readFile flatpakConfPath;
- # Explicit "\n" so we never accidentally split into characters
- rawLines = lib.splitString "\n" raw;
-
- # Guard: if we accidentally split into characters, rawLines length ~= stringLength raw
- _guard =
- assert !(builtins.stringLength raw > 1 && builtins.length rawLines == builtins.stringLength raw);
- true;
-
- cleanLine =
- l:
- let
- noCR = lib.replaceStrings [ "\r" ] [ "" ] l;
- noInlineComment = lib.head (lib.splitString "#" noCR);
- in
- lib.strings.trim noInlineComment;
-
- entries = builtins.filter (l: l != "") (map cleanLine rawLines);
-
- # Flatpak app IDs are reverse-DNS style like org.example.App (at least 2 dots).
- # We'll validate and fail early with a clear message.
- dotCount = s: builtins.length (lib.splitString "." s) - 1;
-
- isValidId = s: (dotCount s) >= 2; # matches the error you're seeing: "at least 2 periods"
-
- _validate = builtins.seq _guard (
- builtins.map (
- id:
- if isValidId id then
- true
- else
- throw ''
- ${moduleName}: invalid Flatpak ID in flatpaks.conf (needs reverse-DNS with at least 2 dots)
-
- Token : ${builtins.toJSON id}
- flatpaks.conf : ${toString flatpakConfPath}
-
- Fix: remove stray tokens/headers, or comment them out with '#'.
- ''
- ) entries
- );
-
- # Use validated entries
- flatpakApps = builtins.seq _validate entries;
-
- syncFlatpaks = pkgs.writeShellScript "sync-flatpaks" ''
- set -euo pipefail
-
- # Use the deployed config path (matches environment.etc below)
- CONF="/etc/flatpak/flatpaks.conf"
- if [[ -f "$CONF" ]]; then
- echo "flatpak-sync: using $CONF"
- else
- echo "flatpak-sync: WARNING: $CONF not found, using embedded list"
- fi
-
- 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
-
- desired_apps=(
- ${lib.concatStringsSep "\n" (map (a: ''"${a}"'') flatpakApps)}
- )
-
- for app in "''${desired_apps[@]}"; do
- if ! flatpak info --system "$app" >/dev/null 2>&1; then
- flatpak install --system -y --noninteractive flathub "$app"
- fi
- done
- '';
-in
-{
- services.flatpak.enable = true;
-
- xdg.portal = {
- enable = true;
- };
-
- # Deploy the config file for runtime visibility/debugging
- environment.etc."flatpak/flatpaks.conf".source = lib.mkForce flatpakConfPath;
-
- systemd.services.flatpak-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 = syncFlatpaks;
- };
-
- restartTriggers = [ flatpakConfPath ];
- path = [
- pkgs.flatpak
- pkgs.coreutils
- pkgs.gnugrep
- pkgs.gnused
- ];
- };
-}
-
-
-generated/system/core/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./wayland.nix
- #./eww.nix
- ./waybar.nix
- ./login-tuigreeter.nix
- #./login-lightdm.nix
- ./fonts.nix
- ./gtk.nix
- ];
-}
-
-generated/system/core/gtk.nix
--I use the Catppuccin almost everywhere. The nix module integrates almost automatically everywhere (except gtk). -You'll notice the color values in multiple places outside this as well. -
-{ pkgs, user, ... }:
-{
- 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;
- };
- };
-
- };
-}
-
-generated/system/core/fonts.nix
--This file installs and configures fonts -
-{ config, pkgs, ... }:
-{
- fonts.packages = with pkgs; [
- pkgs.nerd-fonts.iosevka
- ];
-}
-
-generated/system/core/eww.nix
--This file installs and configures eww -
-{ lib, config, pkgs, flakeRoot, user, ... }:
-let
- ewwConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/eww";
- # Dynamically read all files in assets/system/conf/eww/
- ewwConfs = lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/system/conf/eww")) (name: {
- text = builtins.readFile "${flakeRoot}/assets/system/conf/eww/${name}";
- });
-in
-{
- environment.systemPackages = with pkgs; [ eww ];
-
- home-manager.users.${user.username} = {
- home.file = {
- "${ewwConfigDir}" = {
- source = "${flakeRoot}/assets/system/conf/eww";
- recursive = true;
- };
- };
-
- home.sessionVariables = {
- EWW_BIN = "${pkgs.eww}/bin/eww";
- };
-
- # Start eww with Hyprland/MangoWC
- wayland.windowManager.hyprland.settings = lib.mkForce {
- exec-once = [ "eww daemon" ];
- exec = [ "eww open-many ${ewwConfigDir}/widgets" ]; # Adjust as needed
- };
- };
-}
-
-generated/system/core/waybar.nix
--This file installs and configures waybar -
-{ lib, pkgs, config, flakeRoot, ... }:
-let
- username = "henrov"; # Replace with your actual username
- waybar-config = pkgs.writeText "waybar-config" (builtins.readFile (flakeRoot + "/assets/system/conf/waybar/config"));
- waybar-style = pkgs.writeText "waybar-style" (builtins.readFile (flakeRoot + "/assets/system/conf/waybar/style.css"));
-in
-{
- programs.waybar = {
- enable = true;
- package = pkgs.waybar;
- };
-
- systemd.user.services.waybar = {
- description = "Waybar (status bar for Wayland)";
- wantedBy = [ "graphical-session.target" ];
- after = [ "graphical-session.target" ];
- serviceConfig = {
- ExecStart = "${config.programs.waybar.package}/bin/waybar -c ${waybar-config} -s ${waybar-style}";
- Restart = "on-failure";
- RestartSec = "5s";
- };
- };
-
- # Create symlinks for config and style
- system.activationScripts.waybarSetup = lib.mkAfter ''
- mkdir -p /home/${username}/.config/waybar
- ln -sf ${waybar-config} /home/${username}/.config/waybar/config
- ln -sf ${waybar-style} /home/${username}/.config/waybar/style.css
- chown -R ${username}:users /home/${username}/.config/waybar
- '';
-}
-
-generated/system/core/login-tuigreeter.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ 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'";
- };
-};
-};
-}
-
-generated/system/core/wayland.nix
--This file sets up wayland -
-{ config, pkgs, lib, user, ... }:
-{
- home-manager.users.${user.username} = {
- xdg.portal = {
- enable = true;
- extraPortals = with pkgs; [ xdg-desktop-portal-hyprland ];
- config.hyprland = {
- "org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
- };
- };
-
- home.packages = with pkgs; [
- uwsm
- ];
- };
-}
-
-generated/system/development/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./databases/top.nix
- ./devops_ci_cd/top.nix
- ./programming_languages/top.nix
- ./virtualization/top.nix
- ./web_development/top.nix
- ];
- # .. put any code here
-}
-
-generated/system/system_management/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./audio/top.nix
- ./backups/top.nix
- ./bluetooth/top.nix
- ./disk_management/top.nix
- ./hardware_sensors/top.nix
- ./logging_monitoring/top.nix
- ./login_manager/top.nix
- ./monitor_setup/top.nix
- ./networking/top.nix
- ./power_management/top.nix
- ./printers_scanners/top.nix
- ./security/top.nix
- ./system_updates/top.nix
- ];
- # .. put any code here
-}
-
-generated/system/applications/accessibility/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/applications/file_management/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./thunar.nix
- ];
-}
-
-generated/system/applications/file_management/thunar.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{
- config,
- pkgs,
- lib,
- ...
-}:
-
-let
- username = "henrov"; # vervang door je echte gebruikersnaam
-in
-{
- home-manager.users.${username} = {
-
- # Thunar and plugins
- home.packages = with pkgs; [
- thunar
- thunar-volman
- thunar-archive-plugin
- thunar-media-tags-plugin
- tumbler
- ffmpegthumbnailer
- gvfs
- xdg-utils
- ];
-
- # Default file manager
- xdg.mimeApps = {
- defaultApplications = {
- "inode/directory" = "Thunar.desktop";
- };
- };
- };
-}
-
-generated/system/applications/gaming/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/applications/media_playback_editing/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/applications/office_productivity/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/applications/terminal_shell/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./kitty.nix
- ./starship.nix
- ./zsh.nix
- ./emacs.nix
- ];
- # .. put any code here
-}
-
-generated/system/applications/terminal_shell/kitty.nix
--This file sets up Kitty terminal -
-{ config, pkgs, lib, user, flakeRoot, ... }:
-let
- kittyConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/kitty";
-in
-{
- home-manager.users.${user.username} = {
- programs.kitty = {
- enable = true;
- };
-
- # Copy the actual kitty.conf (not a symlink)
- xdg.configFile."kitty/kitty.conf".text = lib.concatStringsSep "\n" [
- (builtins.readFile "${flakeRoot}/assets/system/conf/kitty/kitty.conf")
- ];
-
- # Copy the theme file
- xdg.configFile."kitty/Catppuccin-Mocha.conf".source = "${flakeRoot}/assets/system/conf/kitty/Catppuccin-Mocha.conf";
- };
-}
-
-generated/system/applications/terminal_shell/starship.nix
--This file sets up starship prompt -
-{
- lib,
- config,
- pkgs,
- flakeRoot,
- ...
-}:
-let
- starshipConfig = lib.importTOML (flakeRoot + "/assets/system/conf/starship.toml");
-in
-{
- programs.starship = {
- enable = true;
- settings = starshipConfig;
- };
-}
-
-generated/system/applications/terminal_shell/zsh.nix
--This sets up the zsh terminal -
-{
- lib,
- config,
- pkgs,
- ...
-}:
-
-{
- # --- NixOS Configuration ---
- environment.systemPackages = with pkgs; [
- zsh
- git
- docker
- ];
-
- # --- Home Manager Configuration ---
- home-manager.users.henrov = {
- programs.zsh = {
- enable = true;
- enableCompletion = true;
-
- # Enable oh-my-zsh and use its plugins
- oh-my-zsh = {
- enable = true;
- plugins = [
- "git"
- "docker"
- "direnv"
- "zsh-autosuggestions"
- "zsh-syntax-highlighting"
- "zsh-completions"
- "zsh-history-substring-search"
- ];
- theme = "agnoster"; # Fallback, overridden below
- };
-
- # Source Nixpkgs-provided plugins explicitly
- initContent = ''
- # Source plugins installed by Nix
- source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
- source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
- source ${pkgs.zsh-history-substring-search}/share/zsh-history-substring-search/zsh-history-substring-search.zsh
-
- # Catppuccin Mocha theme for oh-my-zsh
- local mocha_base="#1E1E2E"
- local mocha_surface0="#313244"
- local mocha_text="#CDD6F4"
- local mocha_lavender="#B4BEFE"
- local mocha_blue="#89B4FA"
- local mocha_sapphire="#74C7EC"
- local mocha_teal="#94E2D5"
- local mocha_green="#A6E3A1"
- local mocha_yellow="#F9E2AF"
- local mocha_peach="#FAB387"
- local mocha_maroon="#EBA0AC"
- local mocha_red="#F38BA8"
- local mocha_mauve="#CBA6F7"
- local mocha_pink="#F5C2E7"
- local mocha_flamingo="#F2CDCD"
- local mocha_rosewater="#F5E0DC"
-
- # Prompt
- PROMPT='%{$fg[$mocha_blue]%}%n%{$reset_color%}@%{$fg[$mocha_peach]%}%m%{$reset_color%} %{$fg[$mocha_lavender]%}%~%{$reset_color%} %{$fg[$mocha_red]%}$%{$reset_color%} '
- RPROMPT='%{$fg[$mocha_green]%}%T%{$reset_color%}'
-
- # Git prompt
- ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[$mocha_yellow]%}(%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[$mocha_yellow]%})%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[$mocha_red]%}✗%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[$mocha_green]%}✓%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[$mocha_blue]%}⇡%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg[$mocha_blue]%}⇣%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[$mocha_pink]%}?%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[$mocha_sapphire]%}+%{$reset_color%}"
- ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg[$mocha_red]%}!%{$reset_color%}"
-
- # Virtualenv/pyenv
- ZSH_THEME_VIRTUAL_ENV_PREFIX="(%{$fg[$mocha_teal]%}"
- ZSH_THEME_VIRTUAL_ENV_SUFFIX="%{$reset_color%})"
-
- # Right prompt with Git status
- RPROMPT='$(git_prompt_info) %{$fg[$mocha_green]%}%T%{$reset_color%}'
-
- # Set the custom theme
- ZSH_THEME="catppuccin-mocha"
- '';
- };
-
- # Home Manager packages (optional)
- home.packages = with pkgs; [
- direnv
- git-extras
- ];
- };
-}
-
-generated/system/applications/terminal_shell/emacs.nix
--This sets up the emacs terminal -
-{ pkgs, ... }:
-
-{
- # NixOS Configuration
- environment.systemPackages = with pkgs; [
- # Add system-wide packages here, if any
- ];
-
- # Home Manager Configuration for the user 'henrov'
- home-manager.users.henrov = {
- programs.emacs = {
- enable = true;
- package = pkgs.emacs-pgtk.override { withTreeSitter = true; };
-
- # Group related packages for clarity and easier maintenance
- extraPackages = epkgs: with epkgs; [
- # Tree-sitter and language support
- manualPackages.treesit-grammars.with-all-grammars
- rust-mode
- rustic
- nix-mode
- hcl-mode
-
- # UI/UX and navigation
- nerd-icons
- doom-modeline
- diminish
- eldoc
- eldoc-box
- pulsar
- which-key
- avy
- consult
- vertico
- marginalia
- crux
- shell-pop
-
- # Completion and snippets
- nerd-icons-corfu
- corfu
- cape
- orderless
- yasnippet
- yasnippet-snippets
-
- # Utilities and tools
- rg
- exec-path-from-shell
- eat
- f
- gptel
- nixpkgs-fmt
- envrc
-
- # Theming
- catppuccin-theme
-
- # Git
- magit
-
- # Editing and workflow
- expreg
- vundo
- puni
-
- # Error and side panel support
- sideline
- sideline-flymake
- sideline-eglot
- ];
- };
-
- # Home Manager session variables
- home.sessionVariables = {
- EDITOR = "emacs";
- XDG_SCREENSHOTS_DIR = "~/screenshots";
- };
- /*
- # Home Manager file management
- home.file = {
- "emacs/early-init.el" = {
- source = ./early-init.el;
- target = ".emacs.d/early-init.el";
- };
- "emacs/init.el" = {
- source = ./init.el;
- target = ".emacs.d/init.el";
- };
- };
- */
- };
-}
-
-
-generated/system/applications/terminal_shell/early-init.el
--This helps set up the emacs terminal -
-;;; 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
-
-generated/system/applications/terminal_shell/init.el
--This helps set up the emacs terminal -
-;;; 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
-
-
-generated/system/development/databases/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/development/devops_ci_cd/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/development/programming_languages/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/development/virtualization/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/development/web_development/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/audio/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/backups/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/bluetooth/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/disk_management/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/hardware_sensors/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/logging_monitoring/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/login_manager/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/monitor_setup/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/networking/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/power_management/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/printers_scanners/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/security/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/system_management/system_updates/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- # No subfolders to import
- ];
- # .. put any code here
-}
-
-generated/system/task_launcher/top.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{ config, pkgs, lib, user, inputs, flakeRoot,... }:
-{
- imports = [
- ./wofi.nix
- ];
- # .. put any code here
-}
-
-generated/system/task_launcher/wofi.nix
--This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder -
-{
- lib,
- config,
- pkgs,
- flakeRoot,
- user,
- ...
-}:
-
-let
- wofiConfigDir = "${config.home-manager.users.${user.username}.xdg.configHome}/wofi";
- # Dynamically read all files in assets/hyprland/conf/wofi/
- wofiConfs =
- lib.genAttrs (builtins.attrNames (builtins.readDir "${flakeRoot}/assets/system/conf/wofi"))
- (name: {
- text = builtins.readFile "${flakeRoot}/assets/system/conf/wofi/${name}";
- });
-in
-{
- environment.systemPackages = with pkgs; [
- wofi
- ];
-
- home-manager.users.${user.username} = {
- home.file = {
- # Map the files to their target paths in ~/.config/wofi/
- "${wofiConfigDir}/config" = wofiConfs."wofi.conf"; # Use the actual filename
- "${wofiConfigDir}/style.css" = wofiConfs."theming.css"; # Use the actual filename
- };
-
- home.sessionVariables = {
- WOFI_CONFIG = "${wofiConfigDir}/config";
- WOFI_STYLE = "${wofiConfigDir}/style.css";
- };
- };
-}
-
-