#+title: Droidnix: A Dendritic NixOS + Home Manager Configuration #+author: Henro Veijer #+options: toc:t num:nil htmlize:nil #+language: en #+html_head: #+HTML_HEAD: #+HTML_HEAD: * Shortcuts [[#introduction][Introduction]] [[#the-assets-folder][The Assets Folder]] [[#the-actual-code][The Actual Code]] [[#the-config-files][The Config Files]] --- * Introduction :intro: :PROPERTIES: :CUSTOM_ID: introduction :END: ** 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. *** Installed components: **** Core **** Hyprland **** Mangowc *** 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: 1. =.assets/=: Static, non-generated files (e.g., configs, scripts, themes). 2. Generated folders (=system=, =hyprland=, =mangowc=): NixOS and Home Manager configurations, generated from Org files. #+title: NixOS Configuration Structure * Root Level - =flake.nix= is the entry point and imports: - =generated/assets/= - =generated//modules/= - =generated/hosts/= * Generated Structure The =generated/= directory contains all generated configurations, divided into three main groups: =system=, =hyprland=, and =mangowc=. ** First Setup 1. Clone this repository. 2. Run the setup script: =./setup_droid=. 3. Edit =.assets/traveldroid/conf/base.conf= to choose your window manager (=wm = "hyprland"= or =wm = "mangowc"=). 4. Tangle this Org file to generate Nix configurations: =C-c C-v t= in 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= 5. Build and switch: =sudo nixos-rebuild switch --flake .#=. --- * The Assets Folder :assets: :PROPERTIES: :CUSTOM_ID: the-assets-folder :END: The =.assets/= folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly. * The Actual Code :code: :PROPERTIES: :CUSTOM_ID: the-actual-code :END: This section contains the Org blocks for tangling Nix code into the generated folders. ** =flake.nix= The Nix flake definition for Droidnix. #+BEGIN_SRC nix :tangle flake.nix :noweb tangle :mkdirp yes :eval never-html { 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"; }; import-tree.url = "github:vic/import-tree"; stylix = { url = "github:nix-community/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; zen-browser = { url = "github:youwen5/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; hyprland.url = "github:hyprwm/Hyprland"; }; outputs = { self, nixpkgs, home-manager, import-tree, stylix, hyprland, zen-browser, ... }: let system = "x86_64-linux"; flakeRoot = self; in { nixosConfigurations = { traveldroid = nixpkgs.lib.nixosSystem { inherit system; modules = [ ./generated/hosts/traveldroid/host.nix ]; specialArgs = { inherit flakeRoot; inherit home-manager import-tree stylix hyprland zen-browser; }; }; }; }; } #+END_SRC ** =generated/hosts/traveldroid/host.nix= #+BEGIN_SRC nix :tangle generated/hosts/traveldroid/host.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }: let hostname = "traveldroid"; modulesPath = "${flakeRoot}/generated/modules/${hostname}"; usersPath = "${flakeRoot}/generated/users"; hostModules = import-tree modulesPath; globalUsers = import-tree usersPath; allModules = hostModules.imports ++ globalUsers.imports; in { ################################# # Core system config ################################# networking.hostName = hostname; system.stateVersion = "26.05"; ################################# # Imports ################################# imports = [ ./boot.nix ./hardware-configuration.nix # REQUIRED for Home Manager home-manager.nixosModules.home-manager ] ++ allModules; ################################# # Home Manager integration ################################# home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; # Install dconf for the system/user environment.systemPackages = [ pkgs.dconf ]; # Ensure Home Manager writes dconf safely programs.dconf.enable = true; } #+END_SRC ** =generated/hosts/traveldroid/hardware-configuration.nix= 1. Boot into NixOS Live ISO or your installed system. 2. Open a terminal. 3. Run: sudo nixos-generate-config --root /mnt (Omit --root /mnt if already running NixOS.) #+BEGIN_SRC nix :tangle generated/hosts/traveldroid/hardware-configuration.nix :noweb tangle :mkdirp yes :eval never-html { 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; } #+END_SRC ** =generated/hosts/traveldroid/boot.nix= #+BEGIN_SRC nix :tangle generated/hosts/traveldroid/boot.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, lib, flakeRoot, ... }: { boot.loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = true; efi.efiSysMountPoint = "/boot"; timeout = 5; }; boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelParams = [ "quiet" "splash" "udev.log_level=3" "rd.systemd.show_status=false" ]; boot.consoleLogLevel = 0; #boot.initrd.systemd.enable = true; boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_usb_sdmmc" ]; boot.kernelModules = [ "kvm-intel" ]; boot.plymouth = { enable = true; /* theme = "rings"; themePackages = [ (pkgs.adi1090x-plymouth-themes.override { selected_themes = [ "rings" ]; }) ];*/ }; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; } #+END_SRC * Following are the imported modules * generated/traveldroid/modules/apps ** =generated/modules/traveldroid/apps/packages.nix= This installs a list of apps #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/packages.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, ... }: let ################################# # Read package list from config file ################################# packagesConfPath = "${flakeRoot}/assets/traveldroid/conf/packages.conf"; raw = builtins.readFile packagesConfPath; rawLines = lib.splitString "\n" raw; # Guard against splitting into characters accidentally _guard = assert !(builtins.stringLength raw > 1 && builtins.length rawLines == builtins.stringLength raw); true; # Clean each line: remove CRs, comments, trim whitespace cleanLine = line: let noCR = lib.replaceStrings [ "\r" ] [ "" ] line; noInlineComment = lib.head (lib.splitString "#" noCR); in lib.strings.trim noInlineComment; # Filter out empty lines entries = builtins.filter (l: l != "") (map cleanLine rawLines); # Resolve attribute paths in pkgs 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 : ${packagesConfPath} Hint : check the attribute name on search.nixos.org/packages '') else found; # Final system-wide package list packages = builtins.seq _guard (map resolvePkg entries); in { ################################# # Allow unfree packages globally ################################# nixpkgs.config = { allowUnfree = true; }; ################################# # System packages ################################# environment.systemPackages = packages; } #+END_SRC ** =generated/modules/traveldroid/apps/kitty.nix= This file sets up Kitty terminal #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/kitty.nix :noweb tangle :mkdirp yes :eval never-html { lib, pkgs, config, flakeRoot... }: let ################################# # Determine default username ################################# username = config.defaultUser or "henrov"; moduleName = "kitty"; ################################# # Paths to assets ################################# assetPath = "${flakeRoot}/.config/kitty"; programFiles = builtins.readDir assetPath; # Convert asset files into a nix attribute set files = lib.genAttrs (builtins.attrNames programFiles) (name: { source = "${assetPath}/${name}"; }); in { ################################# # System-wide packages ################################# environment.systemPackages = [ pkgs.kitty ]; ################################# # Home Manager user configuration ################################# _module.args.hmUsers = { ${username} = { # Enable Kitty through Home Manager programs.kitty.enable = true; # Extra user-specific config snippet programs.kitty.extraConfig = '' # Include the Catppuccin-Mocha theme include themes/Catppuccin-Mocha.conf ''; # Map all asset files into ~/.config/kitty/ home.file = lib.mkMerge ( map (name: { ".config/${moduleName}/${name}" = { source = files.${name}.source; }; }) (builtins.attrNames files) ); }; }; } #+END_SRC ** =generated/modules/traveldroid/apps/starship.nix= This file sets up starship prompt #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/starship.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, ... }: let # Default username fallback username = config.defaultUser or "henrov"; # Path to the starship config in assets starshipConfSrc = "${flakeRoot}/generated/.config/starship.toml"; in { ################################# # Enable Starship system-wide ################################# environment.systemPackages = [ pkgs.starship ]; ################################# # Home Manager user configuration ################################# _module.args.hmUsers = { ${username} = { programs.starship = { enable = true; }; # Copy the starship.toml from assets to ~/.config/starship.toml home.file = { ".config/starship.toml" = { source = starshipConfSrc; }; }; }; }; } #+END_SRC ** =generated/modules/traveldroid/apps/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 #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/thunar.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, config, lib, ... }: let # Resolve the default username from host config username = config.defaultUser or "henrov"; in { ############################ # System-level packages ############################ environment.systemPackages = with pkgs; [ thunar # main file manager thunar-archive-plugin # zip, tar, rar, 7z support thunar-volman # auto-mount removable drives gvfs # support for external drives and network shares xarchiver # optional GUI archive manager ]; ############################ # Home Manager user-level configuration ############################ # Direct assignment to the user avoids recursiveUpdate issues home-manager.users."${username}" = { home.stateVersion = "26.05"; # required home.sessionVariables = { FILE_MANAGER = "thunar"; USERNAME = username; }; }; } #+END_SRC ** =generated/modules/traveldroid/apps/wofi.nix= This is the install for Wofi, the launcher #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/wofi.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, home-manager, ... }: let programName = "wofi"; username = config.defaultUser or "henrov"; assetPath = "${flakeRoot}/assets/traveldroid/conf/${programName}"; # Read all files in the asset directory if it exists assetFiles = if builtins.pathExists assetPath then builtins.attrNames (builtins.readDir assetPath) else []; # Convert files to Home Manager xdg config entries wofiFiles = lib.genAttrs assetFiles (f: { name = if f == "wofi.conf" then ".config/wofi/config" else if f == "theming.css" then ".config/wofi/style.css" else ".config/wofi/${f}"; value = { source = "${assetPath}/${f}"; }; }); in { # Install Wofi via system packages environment.systemPackages = [ pkgs.wofi ]; # Home Manager configuration _module.args.hmUsers = { ${username} = { home.packages = [ pkgs.wofi ]; # Deploy all files to ~/.config/wofi/ home.file = lib.mkMerge wofiFiles; }; }; } #+END_SRC ** =generated/modules/traveldroid/apps/zenbrowser.nix= This installs zen browser #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/zenbrowser.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, lib, zen-browser, ... }: let # Grab the Zen Browser package for this host system zenBrowser = zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default; in { environment.systemPackages = [ zenBrowser ]; } #+END_SRC ** =generated/modules/traveldroid/apps/zsh.nix= This sets up the zsh in the terminal #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/zsh.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, lib, ... }: { programs.zsh = { enable = true; enableCompletion = true; # autocd = true; # dotDir = "${config.xdg.configHome}/zsh"; ohMyZsh = { enable = true; theme = ""; plugins = [ "git" "sudo" "extract" "colored-man-pages" "command-not-found" "history" "docker" "kubectl" ]; }; autosuggestions.enable = true; syntaxHighlighting.enable = true; }; } #+END_SRC ** =generated/modules/traveldroid/apps/emacs/emacs.nix= This installs emacs #+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/emacs/emacs.nix :noweb tangle :mkdirp yes :eval never-html { lib, pkgs, flakeRoot, home-manager, config, ... }: let username = config.defaultUser or "henrov"; emacsPkg = pkgs.emacs-pgtk.override { withTreeSitter = true; }; emacsExtraPackages = epkgs: [ epkgs.manualPackages.treesit-grammars.with-all-grammars epkgs.nerd-icons epkgs.doom-modeline epkgs.diminish epkgs.eldoc epkgs.pulsar epkgs.which-key epkgs.expreg epkgs.vundo epkgs.puni epkgs.avy epkgs.consult epkgs.vertico epkgs.marginalia epkgs.crux epkgs.magit epkgs.nerd-icons-corfu epkgs.corfu epkgs.cape epkgs.orderless epkgs.yasnippet epkgs.yasnippet-snippets epkgs.rg epkgs.exec-path-from-shell epkgs.eat epkgs.rust-mode epkgs.rustic epkgs.nix-mode epkgs.hcl-mode epkgs.shell-pop epkgs.envrc epkgs.nixpkgs-fmt epkgs.f epkgs.gptel epkgs.catppuccin-theme epkgs.eldoc-box epkgs.sideline epkgs.sideline-flymake epkgs.sideline-eglot ]; # Emacs config files earlyInitFile = "${flakeRoot}/assets/traveldroid/conf/emacs/early-init.el"; initFile = "${flakeRoot}/assets/traveldroid/conf/emacs/init.el"; in { _module.args.hmUsers = { ${username} = { home.packages = [ emacsPkg ]; home.sessionVariables = { EDITOR = "emacs"; XDG_SCREENSHOTS_DIR = "~/screenshots"; }; programs.emacs = { enable = true; package = emacsPkg; extraPackages = emacsExtraPackages; }; home.file = { ".emacs.d/early-init.el" = { source = earlyInitFile; }; ".emacs.d/init.el" = { source = initFile; }; }; }; }; } #+END_SRC * generated/modules/traveldroid/desktop ** =generated/modules/traveldroid/desktop/fonts.nix= This file installs and configures fonts #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/fonts.nix :noweb tangle :mkdirp yes :eval never-html { lib, pkgs, config, ... }: { fonts.packages = with pkgs; [ nerd-fonts.iosevka nerd-fonts.fira-code nerd-fonts.jetbrains-mono ]; } #+END_SRC ** =generated/modules/traveldroid/desktop/gtk.nix= Setting up GTK #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/gtk.nix :noweb tangle :mkdirp yes :eval never-html { pkgs, config, lib, ... }: let username = config.defaultUser or "henrov"; in { environment.systemPackages = with pkgs; [ gtk3 gtk4 ]; home-manager.users."${username}" = { gtk = { enable = true; }; }; } #+END_SRC ** =generated/modules/traveldroid/desktop/hyprland.nix= Setting up Hyprland #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/hyprland.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, home-manager, inputs, ... }: let username = config.defaultUser or "henrov"; assetPath = "${flakeRoot}/assets/traveldroid/conf/hypr/"; # Read all files in the asset directory assetFiles = builtins.attrNames (builtins.readDir assetPath); # Convert files to Home Manager xdg config entries hyprFiles = lib.genAttrs assetFiles (f: { # Destination path in home directory name = ".config/hypr/${f}"; # Source file path value = { source = "${assetPath}/${f}"; }; }); # Determine Hyprland package hyprlandPkg = pkgs.hyprland or pkgs.hyprland-git or inputs.hyprland.packages.${pkgs.system}.default; in { environment.systemPackages = [ hyprlandPkg ]; _module.args.hmUsers = { ${username} = { home.packages = [ hyprlandPkg ]; # Merge all files in the asset folder into ~/.config/hypr/ home.file = lib.mkMerge hyprFiles; # Optional: Hyprland settings settings.general."col.active_border" = "0xff97cbcd 0xff89b4fa"; }; }; } #+END_SRC ** =generated/modules/traveldroid/desktop/wallpaper.nix= Setting up wallpaper engine + wallpaper gui #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/wallpaper.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, lib, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "/home/${username}"; wallpaperDst = "${homeDir}/Wallpapers"; scriptSrc = "${flakeRoot}/assets/traveldroid/Wallpapers/set-wallpapers-per-workspace.sh"; in { ############################ # Packages ############################ environment.systemPackages = with pkgs; [ swww waypaper jq ]; ############################ # Copy Wallpapers and Script ############################ systemd.user.services.copyWallpapers = { description = "Copy Wallpapers and script to home"; after = [ "network.target" ]; serviceConfig.Type = "oneshot"; serviceConfig.ExecStart = '' mkdir -p ${wallpaperDst} cp -r ${flakeRoot}/assets/traveldroid/Wallpapers/* ${wallpaperDst}/ chown -R ${username}:${username} ${wallpaperDst} chmod +x ${wallpaperDst}/set-wallpapers-per-workspace.sh ''; enable = true; }; ############################ # Auto-run script at login ############################ systemd.user.services.wallpaperPerWorkspace = { description = "Set wallpapers per workspace on login"; after = [ "copyWallpapers.service" ]; wants = [ "copyWallpapers.service" ]; serviceConfig.Type = "oneshot"; serviceConfig.ExecStart = "${wallpaperDst}/set-wallpapers-per-workspace.sh"; enable = true; }; } #+END_SRC ** =generated/modules/traveldroid/desktop/stylix.nix= #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/stylix.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, stylix, ... }: let username = config.defaultUser or "henrov"; moduleName = "stylix"; assetPath = "${flakeRoot}/assets/traveldroid/conf/${moduleName}"; assetFiles = builtins.attrNames (builtins.readDir assetPath); # Same pattern as hyprland.nix (IMPORTANT) stylixFiles = lib.genAttrs assetFiles (f: { name = ".config/${moduleName}/${f}"; value = { source = "${assetPath}/${f}"; }; }); stylixConfFile = "${assetPath}/stylix.conf"; stylixConf = if builtins.pathExists stylixConfFile then builtins.readFile stylixConfFile else ""; cursorName = "phinger-cursors-light"; cursorSize = 24; in { ################################# # Enable Stylix module ################################# imports = [ stylix.nixosModules.stylix ]; ################################# # System packages ################################# environment.systemPackages = [ pkgs.feh pkgs.st ]; ################################# # Stylix system config ################################# stylix = { enable = true; base16Scheme = "${flakeRoot}/assets/traveldroid/theming/stylix/catppuccin-mocha.yaml"; polarity = "dark"; targets = { gtk.enable = true; qt.enable = true; }; # Define FULL cursor set OR remove entirely cursor = { name = cursorName; package = pkgs.phinger-cursors; size = cursorSize; }; }; ################################# # Home Manager ################################# _module.args.hmUsers = { "${username}" = { home.file = lib.mkMerge [ stylixFiles { ".config/${moduleName}/stylix.conf".text = stylixConf; } ]; home.sessionVariables = { STYLIX_CONF = "$HOME/.config/stylix/stylix.conf"; XCURSOR_THEME = cursorName; XCURSOR_SIZE = toString cursorSize; HYPRCURSOR_THEME = cursorName; HYPRCURSOR_SIZE = toString cursorSize; }; gtk.theme.name = lib.mkForce "Catppuccin-Mocha-Standard-Blue-Dark"; }; }; } #+END_SRC ** =generated/modules/traveldroid/desktop/waybar.nix= This file installs and configures waybar #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/waybar.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, ... }: let # Use the config option defaultUser directly, fallback to "henrov" username = config.defaultUser or "henrov"; assetPath = "${flakeRoot}/assets/traveldroid/conf/waybar"; in { # Install Waybar system-wide environment.systemPackages = [ pkgs.waybar ]; # Home Manager user definition: only define what you need home-manager.users = { ${username} = { home.file = { ".config/waybar/config" = { source = "${assetPath}/config"; force = true; # <-- allow overwrite }; ".config/waybar/style.css" = { source = "${assetPath}/style.css"; force = true; # <-- allow overwrite }; }; }; }; # Systemd user service for Waybar systemd.user.services.waybar = { description = "Waybar for Hyprland"; after = [ "graphical-session.target" ]; serviceConfig = { ExecStart = "${pkgs.waybar}/bin/waybar"; Restart = "always"; Environment = '' WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"} XDG_CURRENT_DESKTOP=Hyprland ''; }; wantedBy = [ "default.target" ]; }; } #+END_SRC ** =generated/modules/traveldroid/desktop/wayland.nix= #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/wayland.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, ... }: { ################################# # Core Wayland packages ################################# environment.systemPackages = with pkgs; [ wayland wl-clipboard # optional but commonly used for copy/paste ]; ################################# # Optional: enable graphics stack ################################# hardware.graphics.enable = true; ################################# # Optional session variables for Wayland ################################# environment.sessionVariables = { # Forces some apps to use Wayland NIXOS_OZONE_WL = "1"; }; } #+END_SRC ** =generated/modules/traveldroid/desktop/xdg.nix= This sets the XDG implementation #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/xdg.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, inputs, ... }: let ################################# # Default username fallback ################################# username = config.defaultUser or "henrov"; ################################# # Determine XDG portal package ################################# xdgPortalHyprlandPkg = pkgs.xdg-desktop-portal-hyprland or inputs.xdgPortalHyprland.packages.${pkgs.system}.default; in { ################################# # System-wide packages ################################# environment.systemPackages = [ xdgPortalHyprlandPkg ]; ################################# # Home Manager user config ################################# _module.args.hmUsers = { ${username} = { home.packages = [ xdgPortalHyprlandPkg ]; # Enable XDG portal integration for Hyprland xdg.portal = { enable = true; extraPortals = [ xdgPortalHyprlandPkg ]; config.hyprland = { "org.freedesktop.impl.portal.Screencast" = [ "hyprland" ]; }; }; }; }; } #+END_SRC * generated/modules/traveldroid/system ** =generated/modules/traveldroid/system/bluetooth.nix= #+BEGIN_SRC nix :tangle generated/modules/traveldroid/system/bluetooth.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, flakeRoot, home-manager, ... }: let username = config.defaultUser or "henrov"; in { ############################ # Bluetooth daemon ############################ hardware.bluetooth = { enable = true; powerOnBoot = true; package = pkgs.bluez; # singular, not a list }; ############################ # GUI Bluetooth manager ############################ environment.systemPackages = with pkgs; [ blueman ]; ############################ # Optional Home Manager integration ############################ _module.args.hmUsers = lib.mkIf (home-manager != null) { ${username} = { # If you want a graphical tray or manager accessible in user session home.packages = [ pkgs.blueman ]; # Example: could drop any config files for blueman here home.file = {}; }; }; } #+END_SRC ** =generated/modules/traveldroid/system/dbus.nix= This sets the dbus implementation #+BEGIN_SRC nix :tangle generated/modules/traveldroid/system/dbus.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, ... }: { # Enable classic D-Bus service services.dbus.enable = true; # Use default dbus package (classic D-Bus) services.dbus.dbusPackage = pkgs.dbus; # Include some essential system packages so shell and tools exist environment.systemPackages = with pkgs; [ bashInteractive coreutils ]; # Do not attempt to wrap dbus-daemon-launch-helper manually # No extra security.wrappers needed } #+END_SRC ** =generated/modules/traveldroid/system/login-tuigreet.nix= This sets up tuigreeter which is not fancy but imo fits the aesthetic I am aiming for #+BEGIN_SRC nix :tangle generated/modules/traveldroid/system/login-tuigreet.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, lib, ... }: let tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet"; sessionsDir = "${pkgs.hyprland}/share/wayland-sessions"; in { ################################# # Greetd (tuigreet) ################################# services.greetd = { enable = true; settings = { default_session = { command = '' ${tuigreetBin} \ --time \ --remember \ --remember-session \ --sessions ${sessionsDir} \ --cmd "start-hyprland" ''; user = "greeter"; }; }; }; ################################# # Fix TTY / boot noise issues ################################# systemd.services.greetd.serviceConfig = { Type = "idle"; StandardInput = "tty"; StandardOutput = "tty"; StandardError = "journal"; # Prevent boot log spam on tty TTYReset = true; TTYVHangup = true; TTYVTDisallocate = true; }; } #+END_SRC ** =generated/modules/traveldroid/system/networking.nix= This sets the networking. #+BEGIN_SRC nix :tangle generated/modules/traveldroid/system/networking.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, ... }: { ################################# # Networking core ################################# networking = { # Let DHCP be default unless overridden elsewhere useDHCP = lib.mkDefault true; # Hostname comes from host.nix, do NOT redefine here ################################# # NetworkManager (primary stack) ################################# networkmanager = { enable = true; # Use iwd backend for WiFi wifi.backend = "iwd"; }; ################################# # iwd (WiFi daemon) ################################# wireless.iwd = { enable = true; # Allow user control via NM / CLI settings.General.EnableNetworkConfiguration = true; }; ################################# # Firewall ################################# firewall = { enable = true; # KDE Connect support allowedTCPPortRanges = [ { from = 1714; to = 1764; } ]; allowedUDPPortRanges = [ { from = 1714; to = 1764; } ]; }; }; ################################# # System packages ################################# environment.systemPackages = [ pkgs.networkmanager ]; } #+END_SRC ** =generated/modules/traveldroid/system/nix.nix= #+BEGIN_SRC nix :tangle generated/modules/traveldroid/system/nix.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, ... }: { nix.settings = { experimental-features = [ "nix-command" "flakes" ]; download-buffer-size = 536870912; # 512 MB cores = 2; max-jobs = 1; }; } #+END_SRC * generated/users ** =generated/users/copy_config_2_config.nix= This copies stuff to the user home-folder #+BEGIN_SRC nix :tangle generated/users/copy_config_2_config.nix :noweb tangle :mkdirp yes :eval never-html { config, pkgs, lib, flakeRoot, ... }: let username = config.users.users.defaultUser or "henrov"; configDir = "/home/${username}/.config"; assetPath = "${flakeRoot}/.config"; in { environment.systemPackages = [ pkgs.rsync ]; systemd.services.copyAssets = { description = "Copy assets to ${username}'s .config directory"; wantedBy = [ "multi-user.target" ]; # oneshot service runs once at boot serviceConfig.Type = "oneshot"; # Always use /bin/sh -c for multi-line commands serviceConfig.ExecStart = '' /bin/sh -c ' echo "Copying assets from ${assetPath} to ${configDir} ..." if [ ! -d "${assetPath}" ]; then echo "ERROR: ${assetPath} does not exist" exit 1 fi mkdir -p "${configDir}" chown -R u+rwx ${username}:${username} "${configDir}" ${pkgs.rsync}/bin/rsync -a --no-owner --no-group "${assetPath}/" "${configDir}/" # Fix .config permissions mkdir -p "${configDir}" chown -R ${username}:${username} "${configDir}" chmod -R u+rwx "${configDir}" echo "Done copying config files." ' ''; }; } #+END_SRC ** =generated/users/henrov.nix= This is the default user, just search and replace henrov another name if you want to change #+BEGIN_SRC nix :tangle generated/users/henrov.nix :noweb tangle :mkdirp yes :eval never-html { lib, config, pkgs, ... }: let username = "henrov"; in { ################################# # NixOS system 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"; home.packages = [ # add packages here ]; home.file = { # Activation to ensure the directory is writable before symlinks home.activation.fixStylixPermissions = lib.hm.dag.entryAfter ["writeBoundary"] '' mkdir -p $HOME/.config chmod -R u+rwx $HOME/.config ''; }; }; }; } #+END_SRC * These are all the prepared config files :PROPERTIES: :CUSTOM_ID: he-config-files :END: ** =.config/hypr/animations.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/animations.conf :noweb tangle :mkdirp yes :eval never-html # ./assets/conf/desktop/hypr/animations.conf animations { enabled = yes bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% animation = border, 1, 10, default animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } #+END_SRC ** =.config/hypr/behaviour.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/behaviour.conf :noweb tangle :mkdirp yes :eval never-html # Keyboard and mouse settings input { kb_layout = us kb_options = ctrl:nocaps sensitivity = -0.5 accel_profile = adaptive scroll_factor = 0.5 } # Scrolling modifier settings input { scroll_main_mod = alt scroll_main_mod_invert = no scroll_per_border = yes } # Touchpad settings (applies to all touchpads) input:touchpad:* { natural_scroll = yes scroll_factor = 0.5 } # Focus settings focus { follow_mouse = yes new_windows = smart } # Miscellaneous settings misc { resize_step = 10 10 anim_resize_friction = 0.1 } #+END_SRC ** =.config/hypr/bindings.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/bindings.conf :noweb tangle :mkdirp yes :eval never-html $mainMod = SUPER # use walker to show exec menu # bind = $mainMod, Space , exec, walker # bind = $mainMod, P, pseudo # bind = $mainMod, T, togglesplit # grimblast # bind = $mainMod SHIFT, P, exec, grimblast -n -f copysave active # bind = $mainMod SHIFT, A, exec, grimblast -n -f copysave area # bind = $mainMod ALT, P, exec, grimblast -n -f copysave output # bind = $mainMod CTRL, P, exec, grimblast -n -f copysave screen # Terminal / launcher / kill / reload bind = $mainMod, E, exec, thunar bind = $mainMod, RETURN, exec, kitty bind = $mainMod, Space, exec, wofi --show drun bind = ALT, Space, exec, wofi --show drun bind = $mainMod, Q, killactive, bind = $mainMod SHIFT, Q, exit, bind = $mainMod SHIFT, R, exec, hyprctl reload # Switch windows bind = ALT, TAB, cyclenext, # bind = ALT SHIFT, TAB, cyclenext prev # switch layouts # Hyprscrolling bind = $mainMod, period, layoutmsg, move +col bind = $mainMod, comma, layoutmsg, swapcol l # Make / break a tab-group (stack) bind = $mainMod, S, togglegroup # Cycle tabs in the group bind = $mainMod, L, changegroupactive, f bind = $mainMod, H, changegroupactive, b bind = $mainMod, T, exec, ~/.config/hypr/scripts/layout-selector.sh # Focus movement bind = $mainMod, H, movefocus, l bind = $mainMod, L, movefocus, r bind = $mainMod, K, movefocus, u bind = $mainMod, J, movefocus, d bind = $mainMod, left, movefocus, l bind = $mainMod, right, movefocus, r bind = $mainMod, up, movefocus, u bind = $mainMod, down, movefocus, d # Move windows bind = $mainMod SHIFT, H, movewindow, l bind = $mainMod SHIFT, L, movewindow, r bind = $mainMod SHIFT, K, movewindow, u bind = $mainMod SHIFT, J, movewindow, d bind = $mainMod SHIFT, left, movewindow, l bind = $mainMod SHIFT, right, movewindow, r bind = $mainMod SHIFT, up, movewindow, u bind = $mainMod SHIFT, down, movewindow, d # Resize windows bind = $mainMod CTRL, H, resizeactive, -30 0 bind = $mainMod CTRL, L, resizeactive, 30 0 bind = $mainMod CTRL, K, resizeactive, 0 -30 bind = $mainMod CTRL, J, resizeactive, 0 30 # Floating / fullscreen bind = $mainMod, V, togglefloating, bind = $mainMod, F, fullscreen, 0 bind = $mainMod SHIFT, F, fullscreen, 1 # Workspaces bind = $mainMod, 1, workspace, 1 bind = $mainMod, 2, workspace, 2 bind = $mainMod, 3, workspace, 3 bind = $mainMod, 4, workspace, 4 bind = $mainMod, 5, workspace, 5 bind = $mainMod, 6, workspace, 6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 8, workspace, 8 bind = $mainMod, 9, workspace, 9 bind = $mainMod, 0, workspace, 10 bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Cycle workspaces bind = $mainMod, mouse_down, workspace, e+1 bind = $mainMod, mouse_up, workspace, e-1 # Mouse drag bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow ######################### # Screenshots ######################### bind = $mainMod SHIFT, s, exec, grim -g "$(slurp)" - | wl-copy bind = , XF86Screenshot, exec, grim - | wl-copy ######################### # Audio (pamixer) ######################### bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 bind = , XF86AudioLowerVolume, exec, pamixer -d 5 bind = , XF86AudioMute, exec, pamixer -t bind = , XF86AudioMicMute, exec, pamixer --default-source -t ######################### # Media (playerctl) ######################### bind = , XF86AudioPlay, exec, playerctl play-pause bind = , XF86AudioPause, exec, playerctl pause bind = , XF86AudioNext, exec, playerctl next bind = , XF86AudioPrev, exec, playerctl previous bind = , XF86AudioStop, exec, playerctl stop ######################### # Brightness (brightnessctl) ######################### bind = , XF86MonBrightnessUp, exec, brightnessctl set +10% bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%- bind = , XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10% bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%- ######################### # Power / session ######################### bind = , XF86Sleep, exec, systemctl suspend bind = , XF86PowerOff, exec, systemctl poweroff bind = , XF86WakeUp, exec, systemctl suspend bind = $mainMod, L, exec, loginctl lock-session # bind = $mainMod, X, exec, ~/.config/hypr/scripts/powermenu.sh ######################### # Laptop lid settings ######################### bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/lid-action.sh bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/lid-restore.sh ######################### # Start apps ######################### bind = CTRL ALT, B, exec, flatpak run eu.betterbird.Betterbird bind = CTRL ALT, S, exec, spotify bind = $mainMod, Z, exec, zeditor bind = $mainMod, W, exec, zen #+END_SRC ** =.config/hypr/exec-once.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/exec-once.conf :noweb tangle :mkdirp yes :eval never-html exec-once = dbus-update-activation-environment --systemd --all exec-once = hypridle exec-once = hyprpolkitagent exec-once = systemd-run --user --scope --unit=elephant elephant exec-once = bash -c "sleep 5 && waybar" #+END_SRC ** =.config/hypr/hypridle.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/hypridle.conf :noweb tangle :mkdirp yes :eval never-html general { lock_cmd = hyprlock after_sleep_cmd = hyprctl dispatch dpms on ignore_dbus_inhibit = false } listener { timeout = 600 on-timeout = hyprlock } listener { timeout = 900 on-timeout = hyprctl dispatch dpms off on-resume = hyprctl dispatch dpms on } #+END_SRC ** =.config/hypr/hyprland.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/hyprland.conf :noweb tangle :mkdirp yes :eval never-html source = ./theming.conf source = ./animations.conf source = ./bindings.conf # source = ./behaviour.conf source = ./exec-once.conf source = ./layer-rules.conf source = ./layout.conf source = ./monitor-rules.conf # source = ./window-rules.conf # source = ./workspace-rules.conf exec-once = /nix/store/c9cnbxhxbagj7gfpc1g5hl4x4f8dzayv-dbus-1.16.2/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target decoration { shadow { color=rgba(1e1e2e99) } } general { col.active_border=0xff97cbcd 0xff89b4fa col.inactive_border=rgb(45475a) } group { groupbar { col.active=rgb(89b4fa) col.inactive=rgb(45475a) text_color=rgb(cdd6f4) } col.border_active=rgb(89b4fa) col.border_inactive=rgb(45475a) col.border_locked_active=rgb(94e2d5) } misc { background_color=rgb(1e1e2e) } #+END_SRC ** =.config/hypr/hyprlock.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/hyprlock.conf :noweb tangle :mkdirp yes :eval never-html # ~/.config/hypr/hyprlock.conf general { grace = 2 ignore_empty_input = true } background { path = ~/.config/hypr/lock.png blur_passes = 2 blur_size = 6 } input-field { size = 320, 60 outline_thickness = 2 dots_size = 0.25 dots_spacing = 0.20 fade_on_empty = true placeholder_text = "Password" position = 0, -120 halign = center valign = center } label { text = $TIME font_size = 72 position = 0, 120 halign = center valign = center } #+END_SRC ** =.config/hypr/layer-rules.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/layer-rules.conf :noweb tangle :mkdirp yes :eval never-html layerrule = blur on, ignore_alpha 1, match:namespace waybar layerrule = xray 1, match:namespace waybar layerrule = blur on, ignore_alpha 1, match:namespace walker layerrule = xray 1, match:namespace walker layerrule = blur on, ignore_alpha 1, match:namespace swaync-control-center layerrule = blur on, ignore_alpha 1, match:namespace swaync-notification-window #+END_SRC ** =.config/hypr/layout.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/layout.conf :noweb tangle :mkdirp yes :eval never-html workspace_layouts = dwindle, master, scrolling, monocle #+END_SRC ** =.config/hypr/monitor-rules.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/monitor-rules.conf :noweb tangle :mkdirp yes :eval never-html # Default portable monitor rule monitor=DP-1,3840x1080@144,1920x0,1 #+END_SRC ** =.config/hypr/scripts/layout-selector.sh= These are the config files for .config/hypr/scripts #+BEGIN_SRC bash :tangle generated/.config/hypr/scripts/layout-selector.sh :noweb tangle :mkdirp yes :eval never-html #!/usr/bin/env bash # layout-selector.sh # Select a workspace layout using Wofi, shows description, applies with layoutmsg # Define layouts and descriptions declare -A LAYOUTS=( [dwindle]="舘 Dwindle: Auto-tiling, windows shrink progressively" [master]=" Master: One main window, others stacked" [scrolling]=" Scrolling: Vertical list, scroll through windows" [monocle]=" Monocle: One window fills the screen" [floating]=" Floating: Free move & resize" ) ORDER=(dwindle master scrolling monocle floating) # Prepare Wofi menu: show "layoutname: description" MENU_ITEMS=() for key in "${ORDER[@]}"; do MENU_ITEMS+=("$key: ${LAYOUTS[$key]}") done # Show selection menu via Wofi CHOICE=$(printf '%s\n' "${MENU_ITEMS[@]}" | wofi --dmenu --prompt "Select Layout") # Exit if cancelled [ -z "$CHOICE" ] && exit 0 # Extract layout name from selection (before colon) LAYOUT_NAME="${CHOICE%%:*}" # Apply layout via layoutmsg hyprctl dispatch layoutmsg setlayout "$LAYOUT_NAME" # Show OSD feedback hyprctl dispatch oSD "Layout: $LAYOUT_NAME" 2000 #+END_SRC ** =.config/hypr/theming.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/theming.conf :noweb tangle :mkdirp yes :eval never-html # Hyprland Catppuccin Mocha Theme (solid colors) # Colors $base = #1e1e2e $mantle = #181825 $surface0 = #313244 $surface1 = #45475a $surface2 = #585b70 $text = #cdd6f4 $rosewater = #f5e0dc $lavender = #b4befe $red = #f38ba8 $peach = #fab387 $yellow = #f9e2af $green = #a6e3a1 $teal = #94e2d5 $blue = #89b4fa $mauve = #cba6f7 $flamingo = #f2cdcd $inactive = #595959aa # General theming general { gaps_in = 2 gaps_out = 4 border_size = 4 layout = scrolling resize_on_border = true extend_border_grab_area = 20 # Solid-color borders col.active_border = rgb(FFFF00) #col.active_border = #a6e3a1 #col.inactive_border = #595959aa } # Window decorations decoration { rounding = 8 } #+END_SRC ** =.config/hypr/window-rules.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/window-rules.conf :noweb tangle :mkdirp yes :eval never-html # Floating and centering nm-connection-editor windowrule = float, nm-connection-editor windowrule = move center, nm-connection-editor windowrule = size 900 700, nm-connection-editor # Center all new windows by default windowrule = center, ^(.*) # Example: Float specific apps (uncomment to use) windowrule = float, ^(pavucontrol)$ # Make Wofi windows blurred windowrulev2 = floatclass:Wofi,blur:15 windowrulev2 = floatclass:Wofi,floating:true windowrulev2 = floatclass:Wofi,opacity:0.9,blur:15 #+END_SRC ** =.config/hypr/workspace-rules.conf= These are the config files for .config/hypr #+BEGIN_SRC conf :tangle generated/.config/hypr/workspace-rules.conf :noweb tangle :mkdirp yes :eval never-html # Workspace definitions (modern syntax) workspace = 1 workspace = 2 workspace = 3 workspace = 4 workspace = 5 # Auto-launch apps on specific workspaces (use `exec` with `workspace` rule) exec-once = kitty, workspace 1 exec-once = flatpak run app.betterbird.zen, workspace 2 exec-once = zen, workspace 3 # Force a specific layout for a workspace workspace 1, layout:dwindle workspace 2, layout:master workspace 3, layout:msg # Set workspace persistence workspace 1, persistent:true workspace 2, persistent:true # Move specific apps to workspaces automatically windowrule = move workspace 1, ^(kitty)$ windowrule = move workspace 2, ^(zen)$ windowrule = move workspace 3, ^(libreoffice)$ # Workspace behavior workspace { cycle_move_empty = no } #+END_SRC ** =.config/kitty/Catppuccin-Mocha.conf= These are the config files for .config/kitty #+BEGIN_SRC conf :tangle generated/.config/kitty/Catppuccin-Mocha.conf :noweb tangle :mkdirp yes :eval never-html # vim:ft=kitty ## name: Catppuccin Kitty Mocha ## author: Catppuccin Org ## license: MIT ## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf ## blurb: Soothing pastel theme for the high-spirited! # The basic colors foreground #cdd6f4 background #1e1e2e selection_foreground #1e1e2e selection_background #f5e0dc # Cursor colors cursor #f5e0dc cursor_text_color #1e1e2e # Scrollbar colors scrollbar_handle_color #9399b2 scrollbar_track_color #45475a # URL color when hovering with mouse url_color #f5e0dc # Kitty window border colors active_border_color #b4befe inactive_border_color #6c7086 bell_border_color #f9e2af # OS Window titlebar colors wayland_titlebar_color system macos_titlebar_color system # Tab bar colors active_tab_foreground #11111b active_tab_background #cba6f7 inactive_tab_foreground #cdd6f4 inactive_tab_background #181825 tab_bar_background #11111b # Colors for marks (marked text in the terminal) mark1_foreground #1e1e2e mark1_background #b4befe mark2_foreground #1e1e2e mark2_background #cba6f7 mark3_foreground #1e1e2e mark3_background #74c7ec # The 16 terminal colors # black color0 #45475a color8 #585b70 # red color1 #f38ba8 color9 #f38ba8 # green color2 #a6e3a1 color10 #a6e3a1 # yellow color3 #f9e2af color11 #f9e2af # blue color4 #89b4fa color12 #89b4fa # magenta color5 #f5c2e7 color13 #f5c2e7 # cyan color6 #94e2d5 color14 #94e2d5 # white color7 #bac2de color15 #a6adc8 #+END_SRC ** =.config/kitty/kitty.conf= These are the config files for .config/kitty #+BEGIN_SRC conf :tangle generated/.config/kitty/kitty.conf :noweb tangle :mkdirp yes :eval never-html # Generated by Home Manager. # See https://sw.kovidgoyal.net/kitty/conf.html shell_integration no-rc include Catppuccin-Mocha.conf map ctrl+shift+v paste_from_clipboard map ctrl+shift+c copy_to_clipboard background_opacity 0.2 background_blur 1 dynamic_background_opacity yes font_family FiraCode Nerd Font font_size 10.0 #+END_SRC ** =.config/microsoft-edge-dev/NativeMessagingHosts/com.1password.1password.json= These are the config files for .config/microsoft-edge-dev/NativeMessagingHosts #+BEGIN_SRC json :tangle generated/.config/microsoft-edge-dev/NativeMessagingHosts/com.1password.1password.json :noweb tangle :mkdirp yes :eval never-html { "name": "com.1password.1password", "description": "1Password BrowserSupport", "path": "/run/wrappers/bin/1Password-BrowserSupport", "type": "stdio", "allowed_origins": [ "chrome-extension://hjlinigoblmkhjejkmbegnoaljkphmgo/", "chrome-extension://bkpbhnjcbehoklfkljkkbbmipaphipgl/", "chrome-extension://gejiddohjgogedgjnonbofjigllpkmbf/", "chrome-extension://khgocmkkpikpnmmkgmdnfckapcdkgfaf/", "chrome-extension://aeblfdkhhhdcdjpifhhbdiojplfjncoa/", "chrome-extension://dppgmdbiimibapkepcbdbmkaabgiofem/" ] }#+END_SRC ** =.config/starship.toml= These are the config files for .config #+BEGIN_SRC toml :tangle generated/.config/starship.toml :noweb tangle :mkdirp yes :eval never-html "$schema" = 'https://starship.rs/config-schema.json' format = """ [](red)\ $os\ $username\ [](bg:peach fg:red)\ $directory\ [](bg:yellow fg:peach)\ $git_branch\ $git_status\ [](fg:yellow bg:green)\ $c\ $rust\ $golang\ $nodejs\ $php\ $java\ $kotlin\ $haskell\ $python\ [](fg:green bg:sapphire)\ $conda\ [](fg:sapphire bg:lavender)\ $time\ [ ](fg:lavender)\ $cmd_duration\ $line_break\ $character""" palette = 'catppuccin_mocha' [os] disabled = false style = "bg:red fg:crust" [os.symbols] Windows = "" Ubuntu = "󰕈" SUSE = "" Raspbian = "󰐿" Mint = "󰣭" Macos = "󰀵" Manjaro = "" Linux = "󰌽" Gentoo = "󰣨" Fedora = "󰣛" Alpine = "" Amazon = "" Android = "" AOSC = "" Arch = "󰣇" Artix = "󰣇" CentOS = "" Debian = "󰣚" Redhat = "󱄛" RedHatEnterprise = "󱄛" [username] show_always = true style_user = "bg:red fg:crust" style_root = "bg:red fg:crust" format = '[ $user]($style)' [directory] style = "bg:peach fg:crust" format = "[ $path ]($style)" truncation_length = 3 truncation_symbol = "…/" [directory.substitutions] "Documents" = "󰈙 " "Downloads" = " " "Music" = "󰝚 " "Pictures" = " " "Developer" = "󰲋 " [git_branch] symbol = "" style = "bg:yellow" format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)' [git_status] style = "bg:yellow" format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)' [nodejs] symbol = "" style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [c] symbol = " " style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [rust] symbol = "" style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [golang] symbol = "" style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [php] symbol = "" style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [java] symbol = " " style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [kotlin] symbol = "" style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [haskell] symbol = "" style = "bg:green" format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' [python] symbol = "" style = "bg:green" format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)' [docker_context] symbol = "" style = "bg:sapphire" format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)' [conda] symbol = "  " style = "fg:crust bg:sapphire" format = '[$symbol$environment ]($style)' ignore_base = false [time] disabled = false time_format = "%R" style = "bg:lavender" format = '[[  $time ](fg:crust bg:lavender)]($style)' [line_break] disabled = false [character] disabled = false success_symbol = '[❯](bold fg:green)' error_symbol = '[❯](bold fg:red)' vimcmd_symbol = '[❮](bold fg:green)' vimcmd_replace_one_symbol = '[❮](bold fg:lavender)' vimcmd_replace_symbol = '[❮](bold fg:lavender)' vimcmd_visual_symbol = '[❮](bold fg:yellow)' [cmd_duration] show_milliseconds = true format = " in $duration " style = "bg:lavender" disabled = false show_notifications = true min_time_to_notify = 45000 [palettes.catppuccin_mocha] rosewater = "#f5e0dc" flamingo = "#f2cdcd" pink = "#f5c2e7" mauve = "#cba6f7" red = "#f38ba8" maroon = "#eba0ac" peach = "#fab387" yellow = "#f9e2af" green = "#a6e3a1" teal = "#94e2d5" sky = "#89dceb" sapphire = "#74c7ec" blue = "#89b4fa" lavender = "#b4befe" text = "#cdd6f4" subtext1 = "#bac2de" subtext0 = "#a6adc8" overlay2 = "#9399b2" overlay1 = "#7f849c" overlay0 = "#6c7086" surface2 = "#585b70" surface1 = "#45475a" surface0 = "#313244" base = "#1e1e2e" mantle = "#181825" crust = "#11111b" [palettes.catppuccin_frappe] rosewater = "#f2d5cf" flamingo = "#eebebe" pink = "#f4b8e4" mauve = "#ca9ee6" red = "#e78284" maroon = "#ea999c" peach = "#ef9f76" yellow = "#e5c890" green = "#a6d189" teal = "#81c8be" sky = "#99d1db" sapphire = "#85c1dc" blue = "#8caaee" lavender = "#babbf1" text = "#c6d0f5" subtext1 = "#b5bfe2" subtext0 = "#a5adce" overlay2 = "#949cbb" overlay1 = "#838ba7" overlay0 = "#737994" surface2 = "#626880" surface1 = "#51576d" surface0 = "#414559" base = "#303446" mantle = "#292c3c" crust = "#232634" [palettes.catppuccin_latte] rosewater = "#dc8a78" flamingo = "#dd7878" pink = "#ea76cb" mauve = "#8839ef" red = "#d20f39" maroon = "#e64553" peach = "#fe640b" yellow = "#df8e1d" green = "#40a02b" teal = "#179299" sky = "#04a5e5" sapphire = "#209fb5" blue = "#1e66f5" lavender = "#7287fd" text = "#4c4f69" subtext1 = "#5c5f77" subtext0 = "#6c6f85" overlay2 = "#7c7f93" overlay1 = "#8c8fa1" overlay0 = "#9ca0b0" surface2 = "#acb0be" surface1 = "#bcc0cc" surface0 = "#ccd0da" base = "#eff1f5" mantle = "#e6e9ef" crust = "#dce0e8" [palettes.catppuccin_macchiato] rosewater = "#f4dbd6" flamingo = "#f0c6c6" pink = "#f5bde6" mauve = "#c6a0f6" red = "#ed8796" maroon = "#ee99a0" peach = "#f5a97f" yellow = "#eed49f" green = "#a6da95" teal = "#8bd5ca" sky = "#91d7e3" sapphire = "#7dc4e4" blue = "#8aadf4" lavender = "#b7bdf8" text = "#cad3f5" subtext1 = "#b8c0e0" subtext0 = "#a5adcb" overlay2 = "#939ab7" overlay1 = "#8087a2" overlay0 = "#6e738d" surface2 = "#5b6078" surface1 = "#494d64" surface0 = "#363a4f" base = "#24273a" mantle = "#1e2030" crust = "#181926" #+END_SRC ** =.config/stylix/palette.json= These are the config files for .config/stylix #+BEGIN_SRC json :tangle generated/.config/stylix/palette.json :noweb tangle :mkdirp yes :eval never-html { "base00": "1e1e2e", "base01": "181825", "base02": "313244", "base03": "45475a", "base04": "585b70", "base05": "cdd6f4", "base06": "f5e0dc", "base07": "b4befe", "base08": "f38ba8", "base09": "fab387", "base0A": "f9e2af", "base0B": "a6e3a1", "base0C": "94e2d5", "base0D": "89b4fa", "base0E": "cba6f7", "base0F": "f2cdcd", "author": "https://github.com/catppuccin/catppuccin", "scheme": "Catppuccin Mocha", "slug": "catppuccin-mocha" } #+END_SRC ** =.config/walker/config.toml= These are the config files for .config/walker #+BEGIN_SRC toml :tangle generated/.config/walker/config.toml :noweb tangle :mkdirp yes :eval never-html # Walker UI layout/theme config (Catppuccin Mocha tuned) theme = "frosted" debug = true [ui] css = "home/henrov/themes/frosted/walker.css" [ui.anchors] top = true left = true right = true bottom = false # don't stretch to full height; keeps it as a panel [ui.window] h_align = "fill" v_align = "fill" [ui.window.box] h_align = "center" # Single source of truth for the main content width width = 520 [ui.window.box.margins] top = 140 [ui.window.box.bar] orientation = "horizontal" position = "end" [ui.window.box.bar.entry] h_align = "fill" h_expand = true [ui.window.box.bar.entry.icon] h_align = "center" h_expand = false pixel_size = 22 theme = "" # leave empty to inherit your system icon theme (Papirus etc.) # --- AI scroll area (match main width, reduce hardcoding) --- [ui.window.box.ai_scroll] name = "aiScroll" h_align = "fill" v_align = "fill" min_width = 520 width = 520 max_height = 260 height = 260 [ui.window.box.ai_scroll.margins] top = 10 [ui.window.box.ai_scroll.list] name = "aiList" orientation = "vertical" width = 520 spacing = 10 [ui.window.box.ai_scroll.list.item] name = "aiItem" h_align = "fill" v_align = "fill" x_align = 0 y_align = 0 wrap = true # --- Main results list --- [ui.window.box.scroll.list] # Catppuccin Mocha accent (pick one): # - teal: #94e2d5 # - blue: #89b4fa marker_color = "#89b4fa" max_height = 360 min_width = 520 max_width = 520 width = 520 [ui.window.box.scroll.list.margins] top = 10 [ui.window.box.scroll.list.item.activation_label] h_align = "fill" v_align = "fill" width = 22 x_align = 0.5 y_align = 0.5 [ui.window.box.scroll.list.item.icon] pixel_size = 24 theme = "" # inherit system icon theme # --- Search row (icons + input) --- [ui.window.box.search.prompt] name = "prompt" icon = "edit-find" theme = "" pixel_size = 18 h_align = "center" v_align = "center" [ui.window.box.search.clear] name = "clear" icon = "edit-clear" theme = "" pixel_size = 18 h_align = "center" v_align = "center" [ui.window.box.search.input] h_align = "fill" h_expand = true icons = true [ui.window.box.search.spinner] hide = true #+END_SRC ** =.config/walker/themes/frosted/default.css= These are the config files for .config/walker/themes/frosted #+BEGIN_SRC css :tangle generated/.config/walker/themes/frosted/default.css :noweb tangle :mkdirp yes :eval never-html /* AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN. */ @define-color foreground rgba(255, 255, 255, 0.8); @define-color background hsla(240, 12.7%, 13.9%, 0.98); @define-color color1 hsl(172, 100%, 25.3%); /* AUTO GENERATED. DO NOT EDIT. CHANGES WILL BE OVERWRITTEN. */ #window, #box, #aiScroll, #aiList, #search, #password, #input, #prompt, #clear, #typeahead, #list, child, scrollbar, slider, #item, #text, #label, #bar, #sub, #activationlabel { all: unset; } #cfgerr { background: rgba(255, 0, 0, 0.4); margin-top: 20px; padding: 8px; font-size: 1.2em; } #window { color: @foreground; } #box { border-radius: 2px; background: @background; padding: 32px; border: 1px solid lighter(@background); box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); } #search { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.22); background: lighter(@background); padding: 8px; } #prompt { margin-left: 4px; margin-right: 12px; color: @foreground; opacity: 0.2; } #clear { color: @foreground; opacity: 0.8; } #password, #input, #typeahead { border-radius: 2px; } #input { background: none; } #password { } #spinner { padding: 8px; } #typeahead { color: @foreground; opacity: 0.8; } #input placeholder { opacity: 0.5; } #list { } child { padding: 8px; border-radius: 2px; } child:selected, child:hover { background: alpha(@color1, 0.4); } #item { } #icon { margin-right: 8px; } #text { } #label { font-weight: 500; } #sub { opacity: 0.5; font-size: 0.8em; } #activationlabel { } #bar { } .barentry { } .activation #activationlabel { } .activation #text, .activation #icon, .activation #search { opacity: 0.5; } .aiItem { padding: 10px; border-radius: 2px; color: @foreground; background: @background; } .aiItem.user { padding-left: 0; padding-right: 0; } .aiItem.assistant { background: lighter(@background); } #+END_SRC ** =.config/walker/themes/frosted/style.css= These are the config files for .config/walker/themes/frosted #+BEGIN_SRC css :tangle generated/.config/walker/themes/frosted/style.css :noweb tangle :mkdirp yes :eval never-html /* Catppuccin Mocha Walker Theme — Frosted Glass */ @import "default.css"; /* --- Palette --- */ /* glass layers: low alpha + slightly cool tint */ @define-color base rgba(220, 230, 255, 0.15); @define-color mantle rgba(24, 24, 37, 0.55); /* was opaque */ @define-color crust rgba(17, 17, 27, 0.80); @define-color text #cdd6f4; @define-color subtext0 #a6adc8; @define-color subtext1 #bac2de; /* use these as “edge lights” more than solid fills */ @define-color surface0 rgba(49, 50, 68, 0.35); @define-color surface1 rgba(69, 71, 90, 0.40); @define-color surface2 rgba(88, 91, 112, 0.45); @define-color overlay0 rgba(108, 112, 134, 0.70); @define-color overlay1 rgba(127, 132, 156, 0.85); @define-color overlay2 rgba(147, 153, 178, 0.90); @define-color blue #89b4fa; @define-color lavender #b4befe; @define-color mauve #cba6f7; @define-color green #a6e3a1; @define-color red #f38ba8; @define-color peach #fab387; @define-color yellow #f9e2af; /* --- Walker expected tokens --- */ @define-color foreground @text; /* very transparent base to let compositor blur show through */ @define-color background: rgba(26, 26, 40, 0.75); /* selection tint */ @define-color color1 @blue; /* --- Reset --- */ #window, #box, #aiScroll, #aiList, #search, #password, #input, #prompt, #clear, #typeahead, #list, child, scrollbar, slider, #item, #text, #label, #bar, #sub, #activationlabel { all: unset; } /* --- Error --- */ #cfgerr { background: alpha(@red, 0.35); margin-top: 20px; padding: 10px; border-radius: 10px; border: 1px solid alpha(@red, 0.3); font-size: 1.1em; } /* --- Window --- */ #window { color: @foreground; } /* --- Main container (frosted glass card) --- */ #box { border-radius: 18px; background: @background; border: 1px solid alpha(@text, 0.08); box-shadow: inset 0 1px 0 alpha(@text, 0.04), 0 8px 18px alpha(@crust, 0.4); padding: 28px; } /* --- Search “pill” --- */ #search { background: rgba(49, 50, 68, 0.22); padding: 10px 12px; border-radius: 14px; border: 1px solid alpha(@text, 0.1); box-shadow: inset 0 1px 0 alpha(@text, 0.06), 0 6px 16px alpha(@crust, 0.35); } #prompt { margin-left: 6px; margin-right: 12px; color: alpha(@overlay1, 0.9); } #clear { color: alpha(@overlay2, 0.9); } /* --- Inputs --- */ #password, #input, #typeahead { border-radius: 10px; } #input { background: none; } #typeahead { color: alpha(@subtext1, 0.85); } #input placeholder { color: alpha(@overlay0, 0.75); } /* --- List items --- */ child { padding: 10px 12px; border-radius: 14px; background: @background; border: 1px solid alpha(@text, 0.05); } /* Hover / Selection: brighter glass + tinted glow */ child:selected, child:hover { background: rgba(22, 22, 34, 0.8); border: 1px solid alpha(@text, 0.08); box-shadow: inset 0 1px 0 alpha(@text, 0.05), 0 6px 14px alpha(@crust, 0.35); } /* --- Text --- */ #label { font-weight: 600; } #sub { color: alpha(@subtext0, 0.85); font-size: 0.85em; } /* --- Activation --- */ .activation #text, .activation #icon, .activation #search { opacity: 0.55; } /* --- AI Panel --- */ .aiItem { padding: 12px; border-radius: 14px; color: @foreground; /* glass tile */ background: rgba(24, 24, 37, 0.3); border: 1px solid rgba(255, 255, 255, 0.05); box-shadow: inset 0 1px 0 alpha(@text, 0.05); } .aiItem.assistant { background: rgba(49, 50, 68, 0.22); } #+END_SRC ** =.config/waybar/style.css= These are the config files for .config/waybar #+BEGIN_SRC css :tangle generated/.config/waybar/style.css :noweb tangle :mkdirp yes :eval never-html /* --- Hyprland palette (ported) --- */ @define-color base rgba(30, 30, 46, 1.0); /* 1e1e2eff */ @define-color inactive rgba(89, 89, 89, 0.667); /* 595959aa */ @define-color blue rgba(51, 204, 255, 0.933); /* 33ccffee */ @define-color green rgba(0, 255, 153, 0.933); /* 00ff99ee */ /* extra colors you referenced but didn’t define */ @define-color text rgba(255, 255, 255, 1.0); @define-color surface1 rgba(255, 255, 255, 0.08); @define-color subtext1 rgba(255, 255, 255, 0.35); @define-color red rgba(255, 0, 0, 0.90); @define-color overlay1 rgba(255, 255, 255, 0.35); @define-color yellow rgba(255, 215, 0, 0.95); * { font-family: Aporetic Sans Mono, Iosevka Nerd Font, Roboto, Helvetica, Arial, sans-serif; font-size: 13px; } window#waybar { background-color: transparent; color: @text; transition-property: background-color; border-bottom: 0px solid rgba(0, 0, 0, 0); transition-duration: 0.5s; } #workspaces button { padding: 0px 1px; min-width: 80px; background-color: transparent; color: @text; border: 2px solid @inactive; border-radius: 10px; } #custom-notifications.empty { color: @overlay1; } #custom-notifications.unread { color: @yellow; } #workspaces button:hover { background-color: @surface1; color: @text; } #workspaces button.active { padding: 0px 1px; min-width: 80px; color: @text; border-radius: 10px; font-weight: bold; border: 1px solid transparent; background: linear-gradient(rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.15)) padding-box, linear-gradient(45deg, @blue, @green) border-box; } #custom-hyprscroll_overflow.overflow { padding: 0px 1px; min-width: 80px; color: @text; border-radius: 10px; font-weight: bold; border: 1px dashed transparent; background: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05)) padding-box, linear-gradient(45deg, @blue, @green) border-box; } #custom-hyprscroll_overflow.overflow { background: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05)) padding-box, linear-gradient(45deg, @blue, @green) border-box; } #custom-hyprscroll_overflow.hidden { padding: 0; margin: 0; min-width: 0; border: 0; background: transparent; opacity: 0; } #clock, #idle_inhibitor, #battery, #cpu, #memory, #temperature, #network, #pulseaudio, #tray { margin: 0 5px; padding: 0 2px; } #idle_inhibitor.activated { background-color: @green; } #battery.charging { color: @green; } @keyframes blink { to { background-color: #ffffff; color: black; } } #battery.warning:not(.charging) { color: white; animation-name: blink; animation-duration: 0.5s; animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; } #window, #workspaces { margin: 0 4px; } .modules-left > widget:first-child > #workspaces { margin-left: 0; } .modules-right > widget:last-child > #workspaces { margin-right: 0; } #network.disconnected { background-color: @red; } #temperature.critical { background-color: @red; } /* ========================================================= * Notifications * ========================================================= */ #custom-notifications { margin: 0 4px; padding: 0 4px; min-width: 0; } #custom-notifications.empty { color: @overlay1; } #custom-notifications.unread { color: @yellow; } /* ========================================================= * Hyprscroll overflow indicator (custom/hyprscroll_overflow) * States: .ok, .overflow, .error * ========================================================= */ /* Default (no overflow): subtle pill, still hoverable for tooltip */ #custom-hyprscroll_overflow.ok { padding: 0px 1px; min-width: 80px; color: @subtext1; border-radius: 10px; /* subtle outline so you know it's there */ border: 1px solid rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.03); } /* Make it feel interactive (hover) */ #custom-hyprscroll_overflow.ok:hover { color: @text; background-color: @surface1; border: 1px solid rgba(255, 255, 255, 0.18); } /* Overflow state: you already have this; keep it. Optional: add hover tweak so it "pops" a bit. */ #custom-hyprscroll_overflow.overflow:hover { background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.1)) padding-box, linear-gradient(45deg, @blue, @green) border-box; } /* Error state: clear but not screaming */ #custom-hyprscroll_overflow.error { padding: 0px 1px; min-width: 80px; color: @text; border-radius: 10px; border: 1px solid rgba(255, 0, 0, 0.55); background: rgba(255, 0, 0, 0.15); font-weight: bold; } /* Optional: if you keep .hidden in the script for any reason */ #custom-hyprscroll_overflow.hidden { padding: 0; margin: 0; min-width: 0; border: 0; background: transparent; opacity: 0; } #+END_SRC ** =.config/waypaper/config.ini= These are the config files for .config/waypaper #+BEGIN_SRC conf :tangle generated/.config/waypaper/config.ini :noweb tangle :mkdirp yes :eval never-html [Settings] language = en backend = swww folder = ~/Wallpapers/pictures monitors = All wallpaper = ~/Wallpapers/pictures/13.jpg show_path_in_tooltip = True fill = fill sort = name color = #ffffff subfolders = False all_subfolders = False show_hidden = False show_gifs_only = False zen_mode = False post_command = number_of_columns = 3 swww_transition_type = any swww_transition_step = 63 swww_transition_angle = 0 swww_transition_duration = 2 swww_transition_fps = 60 mpvpaper_sound = False mpvpaper_options = use_xdg_state = False stylesheet = /home/henrov/.config/waypaper/style.css keybindings = ~/.config/waypaper/keybindings.ini #+END_SRC ** =.config/wofi/style.css= These are the config files for .config/wofi #+BEGIN_SRC css :tangle generated/.config/wofi/style.css :noweb tangle :mkdirp yes :eval never-html /* Catppuccin Mocha theme for Wofi with transparency and rounded corners */ @define-color base rgba(30, 30, 46, 0.9); /* Added transparency */ @define-color surface0 rgba(49, 50, 68, 0.95); /* Added transparency */ @define-color surface1 #45475A; @define-color surface2 #585B70; @define-color text #CDD6F4; @define-color lavender #B4BEFE; @define-color blue #89B4FA; @define-color sapphire #74C7EC; @define-color teal #94E2D5; @define-color green #A6E3A1; @define-color yellow #F9E2AF; @define-color peach #FAB387; @define-color maroon #EBA0AC; @define-color red #F38BA8; @define-color mauve #CBA6F7; @define-color pink #F5C2E7; @define-color flamingo #F2CDCD; @define-color rosewater #F5E0DC; * { background-color: transparent; color: @text; font-family: "JetBrainsMono Nerd Font", monospace; font-size: 12pt; } #main { background-color: @base; border: 1px solid @surface0; border-radius: 10px; /* Rounded corners */ padding: 20px; box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); } #input { background-color: @surface0; color: @text; border: 1px solid @surface1; border-radius: 10px; /* Rounded corners */ padding: 5px 10px; margin-bottom: 10px; } #entry { background-color: rgba( 200, 200, 200, 0.2 ); /* very light grey, very transparent */ color: @text; border-radius: 10px; padding: 5px 10px; margin: 2px 0; } #entry:focus { background-color: @surface1; color: @lavender; border-radius: 10px; /* Rounded corners */ } #entry:selected { background-color: @surface2; color: @text; border-radius: 10px; /* Rounded corners */ } #scrollbar { background-color: @surface0; border-radius: 10px; /* Rounded corners */ width: 8px; } #scrollbar.handle { background-color: @blue; border-radius: 10px; /* Rounded corners */ } #+END_SRC ** =.config/zed/settings.json= These are the config files for .config/zed #+BEGIN_SRC json :tangle generated/.config/zed/settings.json :noweb tangle :mkdirp yes :eval never-html // Zed settings // // For information on how to configure Zed, see the Zed // documentation: https://zed.dev/docs/configuring-zed // // To see all of Zed's default settings without changing your // custom settings, run `zed: open default settings` from the // command palette (cmd-shift-p / ctrl-shift-p) { "icon_theme": "Catppuccin Mocha", "agent": { "default_model": { "provider": "ollama", "model": "codellama:34b", "enable_thinking": false }, "favorite_models": [], "model_parameters": [] }, "ui_font_size": 16, "buffer_font_size": 15, "theme": { "mode": "dark", "light": "One Light", "dark": "Catppuccin Mocha", }, } #+END_SRC