diff --git a/Droidnix/README.org b/Droidnix/README.org index c830babf3..80cc1c8cd 100644 --- a/Droidnix/README.org +++ b/Droidnix/README.org @@ -47,7 +47,7 @@ The =generated/= directory contains all generated configurations, divided into t ** 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"=). +3. Edit =.generated/.config/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 .#=. @@ -290,7 +290,7 @@ let ################################# # Read package list from config file ################################# - packagesConfPath = "${flakeRoot}/assets/traveldroid/conf/packages.conf"; + packagesConfPath = "${flakeRoot}/generated/.config/packages.conf"; raw = builtins.readFile packagesConfPath; rawLines = lib.splitString "\n" raw; @@ -341,6 +341,62 @@ in { } #+END_SRC +** =generated/assets/apps/packages.conf= +This is a list of additional apps to install +#+BEGIN_SRC conf :tangle generated/modules/traveldroid/apps/kitty.nix :noweb tangle :mkdirp yes :eval never-html +#productivity +todoist + +# browsers +brave +chromium + +# utils +git +direnv +ripgrep +wget +kdePackages.kdeconnect-kde +_1password-gui +tree +gparted +file +htop +btop +bat +wev +solaar +baobab +duf +zed-editor +eza +z-lua +qdirstat + +# office +obsidian +onlyoffice-desktopeditors + +# development +postman +tea + +#jetbrains.pycharm +python3 + +# communication +nextcloud-client +nextcloud-talk-desktop +signal-desktop +openssl + +# multimedia +audacity +handbrake +spotify +vlc +#+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 @@ -356,7 +412,7 @@ let ################################# # Paths to assets ################################# - assetPath = "${flakeRoot}/.config/kitty"; + assetPath = "${flakeRoot}/generated/.config/kitty"; programFiles = builtins.readDir assetPath; # Convert asset files into a nix attribute set @@ -398,6 +454,112 @@ in } #+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 + ** =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 @@ -434,6 +596,290 @@ in } #+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 + ** =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 @@ -470,6 +916,7 @@ in } #+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 @@ -478,7 +925,7 @@ This is the install for Wofi, the launcher let programName = "wofi"; username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/assets/traveldroid/conf/${programName}"; + assetPath = "${flakeRoot}/generated/.config/${programName}"; # Read all files in the asset directory if it exists assetFiles = @@ -514,6 +961,134 @@ in } #+END_SRC +** =.config/wofi/config= +These are the config files for .config/wofi +#+BEGIN_SRC css :tangle generated/.config/wofi/config :noweb tangle :mkdirp yes :eval never-html +[global] +allow_images = true +allow_markup = true +show_drun = true:apps,false:others +show_run = true +show_files = false +show_windowed = false +show_dmenu = false +show_ssh = false +show_power = false + +width = 800 +height = 600 +# Center on the active monitor +location=center +anchor=center + +lines = 10 +columns = 1 +sort_order = last-used +sort_method = fuzzy +allow_scrolling = true +scroll_wrap = true +scroll_step = 10 +cycle = true +hide_scroll = false +hide_search = false +show_labels = true +label_search = true +label_run = Run +label_files = Files +label_windowed = Windows +label_drun = Applications +label_dmenu = Commands +label_ssh = SSH +label_power = Power + +prompt = > +#+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 + ** =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 @@ -533,13 +1108,20 @@ in ** =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, ... }: +{ config, pkgs, lib, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc"; +in { programs.zsh = { enable = true; enableCompletion = true; - # autocd = true; - # dotDir = "${config.xdg.configHome}/zsh"; + + # Set Zsh dotfiles location + dotDir = "${config.xdg.configHome}/zsh"; + ohMyZsh = { enable = true; theme = ""; @@ -554,12 +1136,51 @@ This sets up the zsh in the terminal "kubectl" ]; }; + autosuggestions.enable = true; syntaxHighlighting.enable = true; + + # Load your generated .zshrc if it exists + extraConfig = '' + if [ -f "${generatedZsh}" ]; then + source "${generatedZsh}" + fi + ''; }; } #+END_SRC +** =generated/.config/zsh/.zshrc +This sets up the zsh in the terminal +#+BEGIN_SRC bash :tangle generated/.config/zsh/.zshrc :noweb tangle :mkdirp yes :eval never-html +# Catppuccin Mocha colors +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="#94D2D5" +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="#F5E2C7" +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%}' + +# Source zsh-syntax-highlighting if present +if [ -f ${files."zsh-syntax-highlighting".src} ]; then +source ${files."zsh-syntax-highlighting".src} +fi +#+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 @@ -613,8 +1234,8 @@ let ]; # Emacs config files - earlyInitFile = "${flakeRoot}/assets/traveldroid/conf/emacs/early-init.el"; - initFile = "${flakeRoot}/assets/traveldroid/conf/emacs/init.el"; + earlyInitFile = "${flakeRoot}/generated/.config/emacs/early-init.el"; + initFile = "${flakeRoot}/generated/.config/emacs/init.el"; in { @@ -642,6 +1263,508 @@ in } #+END_SRC +** =generated/.config/emacs/early-init.el= +This contaions emacs +#+BEGIN_SRC el :tangle generated/.config/emacs/early-init.el :noweb tangle :mkdirp yes :eval never-html +;;; 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 +#+END_SRC + +** =generated/.config/emacs/init.el= +This contaions emacs +#+BEGIN_SRC el :tangle generated/.config/emacs/init.el :noweb tangle :mkdirp yes :eval never-html +;;; 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-" . pixel-scroll-precision) ; dont zoom in please, just scroll + ("C-" . 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 +#+END_SRC + * generated/modules/traveldroid/desktop ** =generated/modules/traveldroid/desktop/fonts.nix= @@ -687,7 +1810,7 @@ Setting up Hyprland let username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/assets/traveldroid/conf/hypr/"; + assetPath = "${flakeRoot}/generated/.config/hypr/"; # Read all files in the asset directory assetFiles = builtins.attrNames (builtins.readDir assetPath); @@ -723,561 +1846,6 @@ in } #+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 @@ -1766,415 +2334,178 @@ workspace { } #+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 +** =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, ... }: -## 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 +let + username = config.defaultUser or "henrov"; + homeDir = "/home/${username}"; + wallpaperDst = "${homeDir}/Wallpapers"; + scriptSrc = "${flakeRoot}/assets/traveldroid/Wallpapers/set-wallpapers-per-workspace.sh"; +in { - "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 + ############################ + # Packages + ############################ + environment.systemPackages = with pkgs; [ + swww + waypaper + jq + ]; -** =.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' + ############################ + # 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; + }; -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""" + ############################ + # 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 -palette = 'catppuccin_mocha' +** =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, ... }: -[os] -disabled = false -style = "bg:red fg:crust" +let + username = config.defaultUser or "henrov"; + moduleName = "stylix"; -[os.symbols] -Windows = "" -Ubuntu = "󰕈" -SUSE = "" -Raspbian = "󰐿" -Mint = "󰣭" -Macos = "󰀵" -Manjaro = "" -Linux = "󰌽" -Gentoo = "󰣨" -Fedora = "󰣛" -Alpine = "" -Amazon = "" -Android = "" -AOSC = "" -Arch = "󰣇" -Artix = "󰣇" -CentOS = "" -Debian = "󰣚" -Redhat = "󱄛" -RedHatEnterprise = "󱄛" + assetPath = "${flakeRoot}/generated/.config/${moduleName}"; + assetFiles = builtins.attrNames (builtins.readDir assetPath); -[username] -show_always = true -style_user = "bg:red fg:crust" -style_root = "bg:red fg:crust" -format = '[ $user]($style)' + # Same pattern as hyprland.nix (IMPORTANT) + stylixFiles = lib.genAttrs assetFiles (f: { + name = ".config/${moduleName}/${f}"; + value = { source = "${assetPath}/${f}"; }; + }); -[directory] -style = "bg:peach fg:crust" -format = "[ $path ]($style)" -truncation_length = 3 -truncation_symbol = "…/" + stylixConfFile = "${assetPath}/stylix.conf"; + stylixConf = + if builtins.pathExists stylixConfFile + then builtins.readFile stylixConfFile + else ""; -[directory.substitutions] -"Documents" = "󰈙 " -"Downloads" = " " -"Music" = "󰝚 " -"Pictures" = " " -"Developer" = "󰲋 " + cursorName = "phinger-cursors-light"; + cursorSize = 24; +in +{ + ################################# + # Enable Stylix module + ################################# + imports = [ + stylix.nixosModules.stylix + ]; -[git_branch] -symbol = "" -style = "bg:yellow" -format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)' + ################################# + # System packages + ################################# + environment.systemPackages = [ + pkgs.feh + pkgs.st + ]; -[git_status] -style = "bg:yellow" -format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)' + ################################# + # Stylix system config + ################################# + stylix = { + enable = true; -[nodejs] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' + base16Scheme = "${flakeRoot}/assets/traveldroid/theming/stylix/catppuccin-mocha.yaml"; + polarity = "dark"; -[c] -symbol = " " -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' + targets = { + gtk.enable = true; + qt.enable = true; + }; -[rust] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' + # Define FULL cursor set OR remove entirely + cursor = { + name = cursorName; + package = pkgs.phinger-cursors; + size = cursorSize; + }; + }; -[golang] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' + ################################# + # Home Manager + ################################# + _module.args.hmUsers = { + "${username}" = { + home.file = lib.mkMerge [ + stylixFiles + { + ".config/${moduleName}/stylix.conf".text = stylixConf; + } + ]; -[php] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' + home.sessionVariables = { + STYLIX_CONF = "$HOME/.config/stylix/stylix.conf"; + XCURSOR_THEME = cursorName; + XCURSOR_SIZE = toString cursorSize; + HYPRCURSOR_THEME = cursorName; + HYPRCURSOR_SIZE = toString cursorSize; + }; -[java] -symbol = " " -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' + gtk.theme.name = lib.mkForce "Catppuccin-Mocha-Standard-Blue-Dark"; + }; + }; +} +#+END_SRC -[kotlin] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' +** =.config/stylix/stylix.conf= +These are the config files for .config/stylix +#+BEGIN_SRC conf :tangle generated/.config/stylix/stylix.conf :noweb tangle :mkdirp yes :eval never-html +enable = true; +base16Scheme = ../../../assets/system/theming/stylix/catppuccin-mocha.yaml; +image = ../../../assets/hyprland/wallpaperstuff/pictures/wall1.jpg; +polarity = "dark"; -[haskell] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)' +cursor = { + package = "phinger-cursors"; # symbolic reference + name = "phinger-cursors-light"; + size = 24; +}; -[python] -symbol = "" -style = "bg:green" -format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)' +fonts = { + monospace = { + package = "nerd-fonts-fira-code"; + name = "Fira Code Nerd Font"; + }; + sansSerif = { + package = "lato"; + name = "Lato"; + }; +}; -[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" +icons = { + enable = true; + package = "papirus-icon-theme"; + dark = "Papirus-Dark"; + light = "Papirus-Light"; +}; #+END_SRC ** =.config/stylix/palette.json= @@ -2203,484 +2534,494 @@ These are the config files for .config/stylix } #+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) +** =.config/stylix/palette.html= +These are the config files for .config/stylix +#+BEGIN_SRC html :tangle generated/.config/stylix/palette.html :noweb tangle :mkdirp yes :eval never-html + + + + + +

Primary colors

+
+
00
+
01
+
02
+
03
+
04
+
05
+
06
+
07
+
-theme = "frosted" -debug = true +

Accents

+
+
08
+
09
+
0A
+
0B
+
0C
+
0D
+
0E
+
0F
+
-[ui] -css = "home/henrov/themes/frosted/walker.css" +

Documentation

+

Each color should be used as described in this table.

+

See the Stylix documentation for how to apply these colors on NixOS.

+ + -[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. */ +** =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, ... }: -@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. */ +let + # Use the config option defaultUser directly, fallback to "henrov" + username = config.defaultUser or "henrov"; + assetPath = "${flakeRoot}/generated/.config/waybar"; +in +{ + # Install Waybar system-wide + environment.systemPackages = [ pkgs.waybar ]; -#window, -#box, -#aiScroll, -#aiList, -#search, -#password, -#input, -#prompt, -#clear, -#typeahead, -#list, -child, -scrollbar, -slider, -#item, -#text, -#label, -#bar, -#sub, -#activationlabel { - all: unset; -} + # 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 + }; + }; + }; + }; -#cfgerr { - background: rgba(255, 0, 0, 0.4); - margin-top: 20px; - padding: 8px; - font-size: 1.2em; -} + # Systemd user service for Waybar + systemd.user.services.waybar = { + description = "Waybar for Hyprland"; + after = [ "graphical-session.target" ]; -#window { - color: @foreground; -} + serviceConfig = { + ExecStart = "${pkgs.waybar}/bin/waybar"; + Restart = "always"; + Environment = '' + WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"} + XDG_CURRENT_DESKTOP=Hyprland + ''; + }; -#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); + wantedBy = [ "default.target" ]; + }; } #+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 */ +** =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, ... }: -@import "default.css"; +{ + ################################# + # Core Wayland packages + ################################# + environment.systemPackages = with pkgs; [ + wayland + wl-clipboard # optional but commonly used for copy/paste + ]; -/* --- 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); + ################################# + # Optional: enable graphics stack + ################################# + hardware.graphics.enable = true; -@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); + ################################# + # 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: the-config-files +:END: + ** =.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 @@ -2944,90 +3285,7 @@ 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 diff --git a/Droidnix/generated/.config/emacs/early-init.el b/Droidnix/generated/.config/emacs/early-init.el new file mode 100644 index 000000000..d6f8111be --- /dev/null +++ b/Droidnix/generated/.config/emacs/early-init.el @@ -0,0 +1,92 @@ +;;; 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 diff --git a/Droidnix/generated/.config/emacs/init.el b/Droidnix/generated/.config/emacs/init.el new file mode 100644 index 000000000..932195993 --- /dev/null +++ b/Droidnix/generated/.config/emacs/init.el @@ -0,0 +1,400 @@ +;;; 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-" . pixel-scroll-precision) ; dont zoom in please, just scroll + ("C-" . 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 diff --git a/Droidnix/generated/.config/kitty/Catppuccin-Mocha.conf b/Droidnix/generated/.config/kitty/Catppuccin-Mocha.conf index 6eb38becc..bd46bd796 100644 --- a/Droidnix/generated/.config/kitty/Catppuccin-Mocha.conf +++ b/Droidnix/generated/.config/kitty/Catppuccin-Mocha.conf @@ -1,13 +1,10 @@ # 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 diff --git a/Droidnix/generated/.config/starship.toml b/Droidnix/generated/.config/starship.toml new file mode 100644 index 000000000..ba9bd82ab --- /dev/null +++ b/Droidnix/generated/.config/starship.toml @@ -0,0 +1,279 @@ +"$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" diff --git a/Droidnix/generated/.config/stylix/palette.html b/Droidnix/generated/.config/stylix/palette.html new file mode 100644 index 000000000..0ac3fae9d --- /dev/null +++ b/Droidnix/generated/.config/stylix/palette.html @@ -0,0 +1,68 @@ + + + + + +

Primary colors

+
+
00
+
01
+
02
+
03
+
04
+
05
+
06
+
07
+
+ +

Accents

+
+
08
+
09
+
0A
+
0B
+
0C
+
0D
+
0E
+
0F
+
+ +

Documentation

+

Each color should be used as described in this table.

+

See the Stylix documentation for how to apply these colors on NixOS.

+ + diff --git a/Droidnix/generated/.config/stylix/stylix.conf b/Droidnix/generated/.config/stylix/stylix.conf new file mode 100644 index 000000000..ab12a386e --- /dev/null +++ b/Droidnix/generated/.config/stylix/stylix.conf @@ -0,0 +1,28 @@ +enable = true; +base16Scheme = ../../../assets/system/theming/stylix/catppuccin-mocha.yaml; +image = ../../../assets/hyprland/wallpaperstuff/pictures/wall1.jpg; +polarity = "dark"; + +cursor = { + package = "phinger-cursors"; # symbolic reference + name = "phinger-cursors-light"; + size = 24; +}; + +fonts = { + monospace = { + package = "nerd-fonts-fira-code"; + name = "Fira Code Nerd Font"; + }; + sansSerif = { + package = "lato"; + name = "Lato"; + }; +}; + +icons = { + enable = true; + package = "papirus-icon-theme"; + dark = "Papirus-Dark"; + light = "Papirus-Light"; +}; diff --git a/Droidnix/generated/.config/walker/config.toml b/Droidnix/generated/.config/walker/config.toml deleted file mode 100644 index 366317aec..000000000 --- a/Droidnix/generated/.config/walker/config.toml +++ /dev/null @@ -1,116 +0,0 @@ -# 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 diff --git a/Droidnix/generated/.config/walker/themes/frosted/default.css b/Droidnix/generated/.config/walker/themes/frosted/default.css deleted file mode 100644 index 239449398..000000000 --- a/Droidnix/generated/.config/walker/themes/frosted/default.css +++ /dev/null @@ -1,162 +0,0 @@ -/* 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); -} diff --git a/Droidnix/generated/.config/walker/themes/frosted/style.css b/Droidnix/generated/.config/walker/themes/frosted/style.css deleted file mode 100644 index dadd5a994..000000000 --- a/Droidnix/generated/.config/walker/themes/frosted/style.css +++ /dev/null @@ -1,185 +0,0 @@ -/* 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); -} diff --git a/Droidnix/generated/.config/wofi/config b/Droidnix/generated/.config/wofi/config new file mode 100644 index 000000000..6ee77b451 --- /dev/null +++ b/Droidnix/generated/.config/wofi/config @@ -0,0 +1,38 @@ +[global] +allow_images = true +allow_markup = true +show_drun = true:apps,false:others +show_run = true +show_files = false +show_windowed = false +show_dmenu = false +show_ssh = false +show_power = false + +width = 800 +height = 600 +# Center on the active monitor +location=center +anchor=center + +lines = 10 +columns = 1 +sort_order = last-used +sort_method = fuzzy +allow_scrolling = true +scroll_wrap = true +scroll_step = 10 +cycle = true +hide_scroll = false +hide_search = false +show_labels = true +label_search = true +label_run = Run +label_files = Files +label_windowed = Windows +label_drun = Applications +label_dmenu = Commands +label_ssh = SSH +label_power = Power + +prompt = > diff --git a/Droidnix/generated/.config/zsh/.zshrc b/Droidnix/generated/.config/zsh/.zshrc new file mode 100644 index 000000000..9df0df8c7 --- /dev/null +++ b/Droidnix/generated/.config/zsh/.zshrc @@ -0,0 +1,26 @@ +# Catppuccin Mocha colors +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="#94D2D5" +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="#F5E2C7" +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%}' + +# Source zsh-syntax-highlighting if present +if [ -f ${files."zsh-syntax-highlighting".src} ]; then +source ${files."zsh-syntax-highlighting".src} +fi diff --git a/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix b/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix index c886cc9ce..b8916da56 100644 --- a/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix +++ b/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix @@ -48,8 +48,8 @@ let ]; # Emacs config files - earlyInitFile = "${flakeRoot}/assets/traveldroid/conf/emacs/early-init.el"; - initFile = "${flakeRoot}/assets/traveldroid/conf/emacs/init.el"; + earlyInitFile = "${flakeRoot}/generated/.config/emacs/early-init.el"; + initFile = "${flakeRoot}/generated/.config/emacs/init.el"; in { diff --git a/Droidnix/generated/modules/traveldroid/apps/kitty.nix b/Droidnix/generated/modules/traveldroid/apps/kitty.nix index dac965261..e7a33770d 100644 --- a/Droidnix/generated/modules/traveldroid/apps/kitty.nix +++ b/Droidnix/generated/modules/traveldroid/apps/kitty.nix @@ -1,3 +1,55 @@ +#productivity +todoist + +# browsers +brave +chromium + +# utils +git +direnv +ripgrep +wget +kdePackages.kdeconnect-kde +_1password-gui +tree +gparted +file +htop +btop +bat +wev +solaar +baobab +duf +zed-editor +eza +z-lua +qdirstat + +# office +obsidian +onlyoffice-desktopeditors + +# development +postman +tea + +#jetbrains.pycharm +python3 + +# communication +nextcloud-client +nextcloud-talk-desktop +signal-desktop +openssl + +# multimedia +audacity +handbrake +spotify +vlc + { lib, pkgs, config, flakeRoot... }: let @@ -10,7 +62,7 @@ let ################################# # Paths to assets ################################# - assetPath = "${flakeRoot}/.config/kitty"; + assetPath = "${flakeRoot}/generated/.config/kitty"; programFiles = builtins.readDir assetPath; # Convert asset files into a nix attribute set diff --git a/Droidnix/generated/modules/traveldroid/apps/packages.nix b/Droidnix/generated/modules/traveldroid/apps/packages.nix index 94bbefb4b..2108a9698 100644 --- a/Droidnix/generated/modules/traveldroid/apps/packages.nix +++ b/Droidnix/generated/modules/traveldroid/apps/packages.nix @@ -4,7 +4,7 @@ let ################################# # Read package list from config file ################################# - packagesConfPath = "${flakeRoot}/assets/traveldroid/conf/packages.conf"; + packagesConfPath = "${flakeRoot}/generated/.config/packages.conf"; raw = builtins.readFile packagesConfPath; rawLines = lib.splitString "\n" raw; diff --git a/Droidnix/generated/modules/traveldroid/apps/wofi.nix b/Droidnix/generated/modules/traveldroid/apps/wofi.nix index 5eed93538..d79d50129 100644 --- a/Droidnix/generated/modules/traveldroid/apps/wofi.nix +++ b/Droidnix/generated/modules/traveldroid/apps/wofi.nix @@ -3,7 +3,7 @@ let programName = "wofi"; username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/assets/traveldroid/conf/${programName}"; + assetPath = "${flakeRoot}/generated/.config/${programName}"; # Read all files in the asset directory if it exists assetFiles = diff --git a/Droidnix/generated/modules/traveldroid/apps/zsh.nix b/Droidnix/generated/modules/traveldroid/apps/zsh.nix index bc650ef0d..bd0aba401 100644 --- a/Droidnix/generated/modules/traveldroid/apps/zsh.nix +++ b/Droidnix/generated/modules/traveldroid/apps/zsh.nix @@ -1,10 +1,17 @@ -{ config, pkgs, lib, ... }: +{ config, pkgs, lib, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc"; +in { programs.zsh = { enable = true; enableCompletion = true; - # autocd = true; - # dotDir = "${config.xdg.configHome}/zsh"; + + # Set Zsh dotfiles location + dotDir = "${config.xdg.configHome}/zsh"; + ohMyZsh = { enable = true; theme = ""; @@ -19,7 +26,15 @@ "kubectl" ]; }; + autosuggestions.enable = true; syntaxHighlighting.enable = true; + + # Load your generated .zshrc if it exists + extraConfig = '' + if [ -f "${generatedZsh}" ]; then + source "${generatedZsh}" + fi + ''; }; } diff --git a/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix index 55ef61613..3a9100db7 100644 --- a/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix +++ b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix @@ -2,7 +2,7 @@ let username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/assets/traveldroid/conf/hypr/"; + assetPath = "${flakeRoot}/generated/.config/hypr/"; # Read all files in the asset directory assetFiles = builtins.attrNames (builtins.readDir assetPath); diff --git a/Droidnix/generated/modules/traveldroid/desktop/stylix.nix b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix index 6e0461b29..9e38873b9 100644 --- a/Droidnix/generated/modules/traveldroid/desktop/stylix.nix +++ b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix @@ -4,7 +4,7 @@ let username = config.defaultUser or "henrov"; moduleName = "stylix"; - assetPath = "${flakeRoot}/assets/traveldroid/conf/${moduleName}"; + assetPath = "${flakeRoot}/generated/.config/${moduleName}"; assetFiles = builtins.attrNames (builtins.readDir assetPath); # Same pattern as hyprland.nix (IMPORTANT) diff --git a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix index 238303093..ff9a4de2d 100644 --- a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix +++ b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix @@ -3,7 +3,7 @@ let # Use the config option defaultUser directly, fallback to "henrov" username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/assets/traveldroid/conf/waybar"; + assetPath = "${flakeRoot}/generated/.config/waybar"; in { # Install Waybar system-wide