diff --git a/Droidnix/README.html b/Droidnix/README.html index 5bbc26e9d..048943e7e 100644 --- a/Droidnix/README.html +++ b/Droidnix/README.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Droidnix: A Dendritic NixOS + Home Manager Configuration NixOS Configuration Structure @@ -204,141 +204,141 @@

Table of Contents

-
-

Shortcuts

-
+
+

Shortcuts

+

Introduction The Assets Folder @@ -354,25 +354,25 @@

Introduction   intro

-
-

What is Droidnix

-
+
+

What is Droidnix

+

Droidnix is a modular, declarative NixOS + Home Manager configuration system. with configurations managed via Emacs Org and Nix Flakes. The project is designed for reproducibility, maintainability, and cross-machine compatibility.

-
-

Installed components:

-
+
+

Installed components:

+
    -
  • Core
  • -
  • Hyprland
  • +
  • Core
  • +
  • Hyprland
-
-

Goals, project Structure, import hierarchy

-
+
+

Goals, project Structure, import hierarchy

+

This project uses a modular NixOS configuration with Hyprland support, designed for literate programming and cross-device reusability. The Droidnix repository is organized into two main parts: @@ -385,9 +385,9 @@ The Droidnix repository is organized into two main parts:

-
-

Root Level

-
+
+

Root Level

+
  • = is the entry point and imports:
      @@ -398,16 +398,16 @@ The Droidnix repository is organized into two main parts:
-
-

Generated Structure

-
+
+

Generated Structure

+

The generated/ directory contains all generated configurations, divided into three main groups: system, hyprland, and mangowc.

-
-

First Setup

-
+
+

First Setup

+
  1. Clone this repository.
  2. Run the setup script: ./setup_droid.
  3. @@ -428,9 +428,9 @@ The generated/ directory contains all generated configurations, div The .assets/ folder contains all static files, such as configs, scripts, and themes. These files are not generated and can be edited directly.

-
-

generated/assets/2_b_installed.conf

-
+
+

generated/assets/2_b_installed.conf

+

This is a list of additional apps to install

@@ -508,9 +508,9 @@ com.logseq.Logseq
-
-

generated/assets/aliases.conf

-
+
+

generated/assets/aliases.conf

+

This is a list of additional apps to install

@@ -552,9 +552,9 @@ keys=hyprctl binds This section contains the Org blocks for tangling Nix code into the generated folders.

-
-

generated/flake.nix

-
+
+

generated/flake.nix

+

The Nix flake definition for Droidnix.

@@ -643,9 +643,9 @@ The Nix flake definition for Droidnix.
-
-

generated/modules/traveldroid/system/colors.nix

-
+
+

generated/modules/traveldroid/system/colors.nix

+

Setting the colors for Droidnix.

@@ -722,9 +722,9 @@ in
-
-

generated/hosts/traveldroid/boot.nix

-
+
+

generated/hosts/traveldroid/boot.nix

+
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
 { config, pkgs, lib, flakeRoot, ... }:
@@ -793,9 +793,9 @@ in
 
-
-

generated/hosts/traveldroid/hardware-configuration.nix

-
+
+

generated/hosts/traveldroid/hardware-configuration.nix

+
  1. Boot into NixOS Live ISO or your installed system.
  2. Open a terminal.
  3. @@ -853,9 +853,9 @@ in
-
-

generated/hosts/traveldroid/host.nix

-
+
+

generated/hosts/traveldroid/host.nix

+
{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
 
@@ -915,13 +915,13 @@ in
 
-
-

generated/traveldroid/modules/apps

-
+
+

generated/traveldroid/modules/apps

+
-
-

generated/modules/traveldroid/apps/2_b_installed.nix

-
+
+

generated/modules/traveldroid/apps/2_b_installed.nix

+

This installs a list of apps

@@ -1029,9 +1029,9 @@ in {
-
-

generated/modules/traveldroid/apps/emacs/emacs.nix

-
+
+

generated/modules/traveldroid/apps/emacs/emacs.nix

+

This installs emacs

@@ -1127,9 +1127,9 @@ in
-
-

generated/disabled/modules/traveldroid/apps/flameshot.nix

-
+
+

generated/disabled/modules/traveldroid/apps/flameshot.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

@@ -1189,9 +1189,9 @@ in
-
-

generated/modules/traveldroid/apps/kdeconnect.nix

-
+
+

generated/modules/traveldroid/apps/kdeconnect.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

@@ -1220,9 +1220,9 @@ in
-
-

generated/modules/traveldroid/apps/kitty.nix

-
+
+

generated/modules/traveldroid/apps/kitty.nix

+

This file sets up Kitty terminal

@@ -1274,9 +1274,9 @@ in
-
-

generated/modules/traveldroid/apps/starship.nix

-
+
+

generated/modules/traveldroid/apps/starship.nix

+

This file sets up starship prompt

@@ -1315,9 +1315,9 @@ in
-
-

generated/modules/traveldroid/apps/thunar.nix

-
+
+

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

@@ -1363,9 +1363,9 @@ in
-
-

generated/modules/traveldroid/apps/wofi.nix

-
+
+

generated/modules/traveldroid/apps/wofi.nix

+

This is the install for Wofi, the launcher

@@ -1374,22 +1374,23 @@ This is the install for Wofi, the launcher let username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/generated/.config/wofi"; + sysName = "wofi"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; in { environment.systemPackages = [ pkgs.wofi ]; home-manager.users = { ${username} = { - home.file = { - ".config/wofi/config" = { - text = builtins.readFile "${assetPath}/config"; - force = true; - }; - ".config/wofi/style.css" = { - text = builtins.replaceStrings ["PLACEHOLDER_USERNAME"] [username] (builtins.readFile "${assetPath}/style.css"); - force = true; - }; + home.activation.MakeWofiMutable = { + after = [ "writeBoundary" ]; + before = []; + data = '' + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; + ''; }; }; }; @@ -1398,9 +1399,9 @@ in
-
-

generated/modules/traveldroid/apps/zenbrowser.nix

-
+
+

generated/modules/traveldroid/apps/zenbrowser.nix

+

This installs zen browser

@@ -1420,9 +1421,9 @@ in
-
-

generated/modules/traveldroid/apps/zsh.nix

-
+
+

generated/modules/traveldroid/apps/zsh.nix

+

This sets up the zsh in the terminal

@@ -1536,13 +1537,13 @@ in
-
-

generated/modules/traveldroid/desktop

-
+
+

generated/modules/traveldroid/desktop

+
-
-

generated/modules/traveldroid/desktop/fonts.nix

-
+
+

generated/modules/traveldroid/desktop/fonts.nix

+

This file installs and configures fonts

@@ -1560,9 +1561,9 @@ This file installs and configures fonts
-
-

generated/modules/traveldroid/desktop/gtk.nix

-
+
+

generated/modules/traveldroid/desktop/gtk.nix

+

Setting up GTK

@@ -1588,9 +1589,9 @@ in
-
-

generated/modules/traveldroid/desktop/hyprland.nix

-
+
+

generated/modules/traveldroid/desktop/hyprland.nix

+

Setting up Hyprland

@@ -1598,7 +1599,8 @@ Setting up Hyprland
{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }:
 let
   username = config.defaultUser or "henrov";
-  assetPath = "${flakeRoot}/generated/.config/hypr";
+  sysName = "hypr";
+  assetPath = "${flakeRoot}/generated/.config/${sysName}";
   hyprlandPkg =
     pkgs.hyprland or
     pkgs.hyprland-git or
@@ -1620,9 +1622,10 @@ in
           after = [ "writeBoundary" ];
           before = [];
           data = ''
-            rm -f $HOME/.config/hypr/*
-                cp ${assetPath}/* $HOME/.config/hypr/
-                chmod u+w $HOME/.config/hypr/*
+            rm -f $HOME/.config/${sysName}/*
+                cp ${assetPath}/* $HOME/.config/${sysName}/
+                chmod u+w $HOME/.config/${sysName}/*
+                find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
           '';
       };
     };
@@ -1632,9 +1635,9 @@ in
 
-
-

generated/modules/traveldroid/desktop/stylix.nix

-
+
+

generated/modules/traveldroid/desktop/stylix.nix

+
{ lib, config, pkgs, flakeRoot, stylix, ... }:
 
@@ -1721,9 +1724,9 @@ in
 
-
-

generated/modules/traveldroid/desktop/wallpaper.nix

-
+
+

generated/modules/traveldroid/desktop/wallpaper.nix

+

Setting up wallpaper engine + wallpaper gui

@@ -1822,9 +1825,9 @@ in
-
-

generated/modules/traveldroid/desktop/waybar.nix

-
+
+

generated/modules/traveldroid/desktop/waybar.nix

+

This file installs and configures waybar

@@ -1832,7 +1835,8 @@ This file installs and configures waybar
{ lib, config, pkgs, flakeRoot, ... }:
 let
   username = config.defaultUser or "henrov";
-  waybarPath = "${flakeRoot}/generated/.config/waybar";
+  sysName = "waybar";
+  assetPath = "${flakeRoot}/generated/.config/${sysName}";
 in
 {
   environment.systemPackages = [ pkgs.waybar ];
@@ -1842,9 +1846,10 @@ in
         after = [ "writeBoundary" ];
         before = [];
         data = ''
-          rm -f $HOME/.config/waybar/*
-          cp ${waybarPath}/* $HOME/.config/waybar/
-          chmod u+w $HOME/.config/waybar/*
+          rm -f $HOME/.config/${sysName}/*
+          cp ${assetPath}/* $HOME/.config/${sysName}/
+          chmod u+w $HOME/.config/${sysName}/*
+          find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
         '';
     };
   };
@@ -1867,9 +1872,9 @@ in
 
-
-

generated/modules/traveldroid/desktop/wayland.nix

-
+
+

generated/modules/traveldroid/desktop/wayland.nix

+
{ lib, config, pkgs, ... }:
 
@@ -1899,9 +1904,9 @@ in
 
-
-

generated/modules/traveldroid/desktop/xdg.nix

-
+
+

generated/modules/traveldroid/desktop/xdg.nix

+

This sets the XDG implementation

@@ -1972,13 +1977,13 @@ in
-
-

generated/modules/traveldroid/system

-
+
+

generated/modules/traveldroid/system

+
-
-

generated/modules/traveldroid/system/audio.nix

-
+
+

generated/modules/traveldroid/system/audio.nix

+
{ lib, config, pkgs, ... }:
 
@@ -1997,9 +2002,9 @@ in
 
-
-

generated/modules/traveldroid/system/avahi.nix

-
+
+

generated/modules/traveldroid/system/avahi.nix

+

Avahi helps discovering services

@@ -2019,9 +2024,9 @@ Avahi helps discovering services
-
-

generated/modules/traveldroid/system/bluetooth.nix

-
+
+

generated/modules/traveldroid/system/bluetooth.nix

+

Installing Bluetooth services and supporting aps

@@ -2048,9 +2053,9 @@ in
-
-

generated/modules/traveldroid/system/copy_scripts.nix

-
+
+

generated/modules/traveldroid/system/copy_scripts.nix

+

This copies any scripts from generated.config/scripts to ~/.config/scripts and makes any .sh files executable.

@@ -2091,9 +2096,9 @@ in
-
-

generated/modules/traveldroid/system/dbus.nix

-
+
+

generated/modules/traveldroid/system/dbus.nix

+

This sets the dbus implementation

@@ -2120,9 +2125,9 @@ This sets the dbus implementation
-
-

generated/modules/traveldroid/system/firewall.nix

-
+
+

generated/modules/traveldroid/system/firewall.nix

+

This sets the firewall.

@@ -2203,9 +2208,9 @@ This sets the firewall.
-
-

generated/modules/traveldroid/system/hypridle.nix

-
+
+

generated/modules/traveldroid/system/hypridle.nix

+

This installs hypridle

@@ -2261,9 +2266,9 @@ in
-
-

generated/modules/traveldroid/system/hyprlock.nix

-
+
+

generated/modules/traveldroid/system/hyprlock.nix

+

This installs hyprlock

@@ -2320,9 +2325,9 @@ in
-
-

generated/modules/traveldroid/system/gnome-keyring.nix

-
+
+

generated/modules/traveldroid/system/gnome-keyring.nix

+

This sets the dbus implementation

@@ -2370,9 +2375,9 @@ This sets the dbus implementation
-
-

generated/modules/traveldroid/system/login-tuigreet.nix

-
+
+

generated/modules/traveldroid/system/login-tuigreet.nix

+

This sets up tuigreeter which is not fancy but imho fits the aesthetic I am aiming for

@@ -2419,9 +2424,9 @@ in
-
-

generated/modules/traveldroid/system/networking.nix

-
+
+

generated/modules/traveldroid/system/networking.nix

+

This sets the networking.

@@ -2470,9 +2475,9 @@ This sets the networking.
-
-

generated/modules/traveldroid/system/nix.nix

-
+
+

generated/modules/traveldroid/system/nix.nix

+
{ lib, config, ... }:
 {
@@ -2495,9 +2500,9 @@ This sets the networking.
 
-
-

generated/modules/traveldroid/system/printing.nix

-
+
+

generated/modules/traveldroid/system/printing.nix

+

This sets the dbus implementation

@@ -2521,9 +2526,9 @@ This sets the dbus implementation
-
-

generated/modules/traveldroid/system/quickshell.nix

-
+
+

generated/modules/traveldroid/system/quickshell.nix

+

This sets the dbus implementation

@@ -2575,9 +2580,9 @@ in
-
-

generated/modules/traveldroid/system/swaync.nix

-
+
+

generated/modules/traveldroid/system/swaync.nix

+

This sets the dbus implementation

@@ -2626,13 +2631,13 @@ in
-
-

generated/users

-
+
+

generated/users

+
-
-

generated/users/

-
+
+

generated/users/

+

This is the default user, just search and replace henrov another name if you want to change

@@ -2694,9 +2699,9 @@ in

These are all the prepared config files

-
-

generated/.config/emacs/early-init.el

-
+
+

generated/.config/emacs/early-init.el

+

This contaions emacs

@@ -2797,9 +2802,9 @@ package-archive-priorities '(("gnu" . 99)
-
-

generated/.config/emacs/init.el

-
+
+

generated/.config/emacs/init.el

+

This contaions emacs

@@ -3209,9 +3214,9 @@ the top of the file."
-
-

generated/.config/hypr/animations.conf

-
+
+

generated/.config/hypr/animations.conf

+

These are config files for .config/hypr

@@ -3230,9 +3235,9 @@ These are config files for .config/hypr
-
-

generated/.config/hypr/behaviour.conf

-
+
+

generated/.config/hypr/behaviour.conf

+

These are config files for .config/hypr

@@ -3254,9 +3259,9 @@ input {
-
-

generated/.config/hypr/bindings.conf

-
+
+

generated/.config/hypr/bindings.conf

+

These are config files for .config/hypr

@@ -3265,8 +3270,8 @@ These are config files for .config/hypr # launcher / kill / reload -bind = $mainMod, Space, exec, ~/.config/scripts/wofi-launcher.sh -bind = ALT, Space, exec, ~/.config/scripts/wofi-launcher.sh +bind = $mainMod, Space, exec, ~/.config/wofi/scripts/wofi-launcher.sh +bind = ALT, Space, exec, ~/.config/wofi/scripts/wofi-launcher.sh bind = $mainMod, Q, killactive, bind = $mainMod SHIFT, Q, exit, bind = $mainMod SHIFT, R, exec, hyprctl reload @@ -3432,9 +3437,9 @@ bind = $mainMod, U, exec, kitty -e bash -lc "$HOME/.config/scripts/update.sh"
-
-

generated/.config/hypr/exec-once.conf

-
+
+

generated/.config/hypr/exec-once.conf

+

These are config files for .config/hypr

@@ -3455,9 +3460,9 @@ exec-once = waybar
-
-

generated/.config/hypr/hypridle.conf

-
+
+

generated/.config/hypr/hypridle.conf

+

These are config files for .config/hypr

@@ -3488,9 +3493,9 @@ listener {
-
-

generated/.config/hypr/hyprlock.conf

-
+
+

generated/.config/hypr/hyprlock.conf

+

These are config files for .config/hypr

@@ -3520,9 +3525,9 @@ input-field {
-
-

generated/.config/hypr/hyprland.conf

-
+
+

generated/.config/hypr/hyprland.conf

+

These are config files for .config/hypr

@@ -3541,9 +3546,9 @@ source = ./workspace-rules.conf
-
-

generated/.config/hypr/layer-rules.conf

-
+
+

generated/.config/hypr/layer-rules.conf

+

These are config files for .config/hypr

@@ -3556,9 +3561,9 @@ layerrule = xray 1, match:namespace swaync-control-center
-
-

generated/.config/hypr/layout.conf

-
+
+

generated/.config/hypr/layout.conf

+

These settings control Hyprland config

@@ -3573,9 +3578,9 @@ scrolling {
-
-

generated/.config/hypr/monitor-rules.conf

-
+
+

generated/.config/hypr/monitor-rules.conf

+

These are config files for .config/hypr

@@ -3586,9 +3591,9 @@ monitor = eDP-1, preferred, auto-left, 1.5
-
-

generated/.config/hypr/theming.conf

-
+
+

generated/.config/hypr/theming.conf

+

These are config files for .config/hypr

@@ -3654,9 +3659,9 @@ misc {
-
-

generated/.config/hypr/window-rules.conf

-
+
+

generated/.config/hypr/window-rules.conf

+

These are config files for .config/hypr

@@ -3739,9 +3744,9 @@ windowrule {
-
-

generated/.config/hypr/workspace-rules.conf

-
+
+

generated/.config/hypr/workspace-rules.conf

+

These setttings configure rules for workspaces

@@ -3756,9 +3761,9 @@ workspace = 6, monitor:DP-1 #, layout:dwindle
-
-

generated/.config/quickshell/media/shell.qml

-
+
+

generated/.config/quickshell/media/shell.qml

+

offers a adio widget

@@ -4152,9 +4157,9 @@ ShellRoot {
-
-

generated/.config/quickshell/powermenu/shell.qml

-
+
+

generated/.config/quickshell/powermenu/shell.qml

+

Provides a powermenu

@@ -4302,9 +4307,9 @@ ShellRoot {
-
-

generated/.config/quickshell/layoutswitcher/shell.qml

-
+
+

generated/.config/quickshell/layoutswitcher/shell.qml

+

Provides a layout menu

@@ -4451,9 +4456,9 @@ ShellRoot {
-
-

generated/.config/waybar/scripts/batterywarn.sh

-
+
+

generated/.config/waybar/scripts/batterywarn.sh

+

Providing an media

@@ -4470,9 +4475,9 @@ fi
-
-

generated/.config/waybar/scripts/media.sh

-
+
+

generated/.config/waybar/scripts/media.sh

+

Providing an media

@@ -4571,9 +4576,9 @@ jq -c -n \
-
-

generated/.config/scripts/numlock-check.sh

-
+
+

generated/.config/scripts/numlock-check.sh

+

Count keyboards and enable numlock if more then 1, else disable

@@ -4595,9 +4600,9 @@ fi
-
-

generated/.config/scripts/power.sh

-
+
+

generated/.config/scripts/power.sh

+

Enables a terminal power menu

@@ -4652,9 +4657,9 @@ main
-
-

generated/.config/scripts/update.sh

-
+
+

generated/.config/scripts/update.sh

+

A file containing color variables

@@ -4679,9 +4684,9 @@ flatpak update -y
-
-

generated/.config/scripts/wofi-launcher.sh

-
+
+

generated/.config/wofi/scripts/wofi-launcher.sh

+

Providing an media

@@ -4696,9 +4701,9 @@ Providing an media
-
-

generated/.config/shared/colors.css

-
+
+

generated/.config/shared/colors.css

+

A file containing color variables

@@ -4739,9 +4744,9 @@ A file containing color variables
-
-

generated/.config/starship.toml

-
+
+

generated/.config/starship.toml

+

These are config files for Starship

@@ -5029,9 +5034,9 @@ crust = "#181926"
-
-

generated/.config/stylix/stylix.conf

-
+
+

generated/.config/stylix/stylix.conf

+

These are config files for .config/stylix

@@ -5068,9 +5073,9 @@ icons = {
-
-

generated/.config/stylix/palette.json

-
+
+

generated/.config/stylix/palette.json

+

These are config files for .config/stylix

@@ -5100,9 +5105,9 @@ These are config files for .config/stylix
-
-

generated/.config/stylix/palette.html

-
+
+

generated/.config/stylix/palette.html

+

These are config files for .config/stylix

@@ -5179,9 +5184,9 @@ These are config files for .config/stylix
-
-

generated/.config/swaync/config.json

-
+
+

generated/.config/swaync/config.json

+

These are config files for waybar

@@ -5242,9 +5247,9 @@ These are config files for waybar
-
-

generated/.config/swaync/style.css

-
+
+

generated/.config/swaync/style.css

+

These are config files for waybar

@@ -5437,9 +5442,9 @@ These are config files for waybar
-
-

generated/.config/waybar/config.jsonc

-
+
+

generated/.config/waybar/config.jsonc

+

These are config files for waybar

@@ -5776,9 +5781,9 @@ These are config files for waybar
-
-

generated/.config/waybar/style-dark.css

-
+
+

generated/.config/waybar/style-dark.css

+

This file contains all css for waybar

@@ -6038,9 +6043,9 @@ label#custom-windows:not(.active) {
-
-

generated/.config/waybar/scripts/bluetooth-status.sh

-
+
+

generated/.config/waybar/scripts/bluetooth-status.sh

+

These are config files for waybar

@@ -6065,9 +6070,9 @@ printf '{"text": "%s", "tooltip": "%s"}\n' "$icon" "$tooltip"
-
-

generated/.config/waybar/scripts/hypr-workspaces.sh

-
+
+

generated/.config/waybar/scripts/hypr-workspaces.sh

+

These are config files for waybar

@@ -6109,9 +6114,9 @@ jq -c -n \
-
-

generated/.config/waybar/scripts/hypr-workspacesmenu.sh

-
+
+

generated/.config/waybar/scripts/hypr-workspacesmenu.sh

+

These are config files for waybar

@@ -6133,9 +6138,9 @@ hyprctl dispatch focuswindow address:"$addr"
-
-

generated/.config/waybar/scripts/kdeconnect-status.sh

-
+
+

generated/.config/waybar/scripts/kdeconnect-status.sh

+

These are config files for waybar

@@ -6159,9 +6164,9 @@ fi
-
-

generated/.config/waypaper/config.ini

-
+
+

generated/.config/waypaper/config.ini

+

These are config files for waypaper

@@ -6198,9 +6203,9 @@ keybindings = ~/.config/waypaper/keybindings.ini
-
-

generated/.config/waypaper/config.ini

-
+
+

generated/.config/waypaper/config.ini

+

These are config files for .config/waypaper

@@ -6236,9 +6241,9 @@ keybindings = ~/.config/waypaper/keybindings.ini
-
-

generated/.config/wofi/config

-
+
+

generated/.config/wofi/config

+

These are config files for .config/wofi

@@ -6265,9 +6270,9 @@ prompt = > ...
-
-

generated/.config/wofi/style.css

-
+
+

generated/.config/wofi/style.css

+

This is the default layout for wofi

@@ -6363,9 +6368,9 @@ This is the default layout for wofi
-
-

generated/.config/zed/settings.json

-
+
+

generated/.config/zed/settings.json

+

These are config files for Zed editor

@@ -6401,9 +6406,9 @@ These are config files for Zed editor
-
-

generated/.config/zsh/.zshrc

-
+
+

generated/.config/zsh/.zshrc

+

This sets up the zsh in the terminal

@@ -6440,7 +6445,7 @@ cd() {

Author: Henro Veijer

-

Created: 2026-04-29 wo 09:52

+

Created: 2026-04-29 wo 10:02

Validate

diff --git a/Droidnix/README.org b/Droidnix/README.org index bd5f51220..7ab47d2ff 100644 --- a/Droidnix/README.org +++ b/Droidnix/README.org @@ -926,22 +926,23 @@ This is the install for Wofi, the launcher let username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/generated/.config/wofi"; + sysName = "wofi"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; in { environment.systemPackages = [ pkgs.wofi ]; home-manager.users = { ${username} = { - home.file = { - ".config/wofi/config" = { - text = builtins.readFile "${assetPath}/config"; - force = true; - }; - ".config/wofi/style.css" = { - text = builtins.replaceStrings ["PLACEHOLDER_USERNAME"] [username] (builtins.readFile "${assetPath}/style.css"); - force = true; - }; + home.activation.MakeWofiMutable = { + after = [ "writeBoundary" ]; + before = []; + data = '' + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; + ''; }; }; }; @@ -1119,7 +1120,8 @@ Setting up Hyprland { lib, config, pkgs, flakeRoot, home-manager, inputs, ... }: let username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/generated/.config/hypr"; + sysName = "hypr"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; hyprlandPkg = pkgs.hyprland or pkgs.hyprland-git or @@ -1141,9 +1143,10 @@ in after = [ "writeBoundary" ]; before = []; data = '' - rm -f $HOME/.config/hypr/* - cp ${assetPath}/* $HOME/.config/hypr/ - chmod u+w $HOME/.config/hypr/* + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; ''; }; }; @@ -1337,7 +1340,8 @@ This file installs and configures waybar { lib, config, pkgs, flakeRoot, ... }: let username = config.defaultUser or "henrov"; - assetPath = "${flakeRoot}/generated/.config/waybar"; + sysName = "waybar"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; in { environment.systemPackages = [ pkgs.waybar ]; @@ -1347,10 +1351,10 @@ in after = [ "writeBoundary" ]; before = []; data = '' - rm -f $HOME/.config/waybar/* - cp ${assetPath}/* $HOME/.config/waybar/ - chmod u+w $HOME/.config/waybar/* - find $HOME/.config/waybar/ -name "*.sh" -exec chmod +x {} \; + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; ''; }; }; diff --git a/Droidnix/generated/.config/emacs/early-init.el b/Droidnix/generated/.config/emacs/early-init.el new file mode 100644 index 000000000..09a331075 --- /dev/null +++ b/Droidnix/generated/.config/emacs/early-init.el @@ -0,0 +1,93 @@ +;; --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +;;; 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..e7cbb920d --- /dev/null +++ b/Droidnix/generated/.config/emacs/init.el @@ -0,0 +1,401 @@ +;; --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +;;; 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/hypr/animations.conf b/Droidnix/generated/.config/hypr/animations.conf new file mode 100644 index 000000000..4177605dc --- /dev/null +++ b/Droidnix/generated/.config/hypr/animations.conf @@ -0,0 +1,11 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +animations { + enabled = yes + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} diff --git a/Droidnix/generated/.config/hypr/behaviour.conf b/Droidnix/generated/.config/hypr/behaviour.conf new file mode 100644 index 000000000..b0c1feaf5 --- /dev/null +++ b/Droidnix/generated/.config/hypr/behaviour.conf @@ -0,0 +1,14 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# Keyboard and mouse settings +input { + numlock_by_default = true + touchpad { + natural_scroll = true + tap-to-click = true + drag_lock = true + } +} +# Scrolling modifier settings +# Touchpad settings (applies to all touchpads) +# Focus settings +# Miscellaneous settings diff --git a/Droidnix/generated/.config/hypr/bindings.conf b/Droidnix/generated/.config/hypr/bindings.conf new file mode 100644 index 000000000..177d48007 --- /dev/null +++ b/Droidnix/generated/.config/hypr/bindings.conf @@ -0,0 +1,168 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +$mainMod = SUPER + +# launcher / kill / reload + +bind = $mainMod, Space, exec, ~/.config/wofi/scripts/wofi-launcher.sh +bind = ALT, Space, exec, ~/.config/wofi/scripts/wofi-launcher.sh +bind = $mainMod, Q, killactive, +bind = $mainMod SHIFT, Q, exit, +bind = $mainMod SHIFT, R, exec, hyprctl reload +bind = $mainMod, X , exec, qs -c powermenu +bind = $mainMod, L, exec, hyprlock + +# grimblast +bind = $mainMod SHIFT, P, exec, grimblast -n -f copysave active +bind = $mainMod SHIFT, S, exec, grimblast -n -f copysave area +bind = , XF86Screenshot, exec, grimblast -n -f copysave area +bind = $mainMod ALT, P, exec, grimblast -n -f copysave output +bind = $mainMod CTRL, P, exec, grimblast -n -f copysave screen + +# Flameshot keybindings +# bind = $mainMod SHIFT, P, exec, flameshot full -p ~/Pictures/Screenshots -c +# bind = $mainMod SHIFT, S, exec, flameshot gui 2>/dev/null +# bind = , XF86Screenshot, exec, flameshot gui 2>/dev/null +# bind = $mainMod ALT, P, exec, flameshot full -d 5000 -p ~/Pictures/Screenshots -c +# bind = $mainMod CTRL, P, exec, flameshot screen -n 0 -p ~/Pictures/Screenshots -c + +# Switch windows +bind = ALT, TAB, cyclenext, prev +bind = ALT SHIFT, TAB, cyclenext, prev +bind = ALT, mouse_down, cyclenext, prev +bind = ALT , mouse_up, cyclenext, prev +bindel = CTRL ALT, mouse_up, layoutmsg, addmaster +bindel = CTRL ALT, mouse_down, layoutmsg, removemaster +bind = CTRL ALT, right, layoutmsg, colwidth +conf +bind = CTRL ALT, left, layoutmsg, colwidth -conf + +# switch layouts +bind = $mainMod, T , exec, qs -c layoutswitcher + +# Hyprscrolling +bind = $mainMod, period, layoutmsg, move +col +bind = $mainMod, comma, layoutmsg, swapcol l +# Column resize +bind = $mainMod SHIFT, period, layoutmsg, colresize +conf +bind = $mainMod SHIFT, comma, layoutmsg, colresize -conf +# Make / break a tab-group (stack) +bind = $mainMod, S, togglegroup +# Cycle tabs in the group +bind = $mainMod, bracketright, changegroupactive, f +bind = $mainMod, bracketleft, changegroupactive, b + +# Focus movement +bind = $mainMod, H, movefocus, l +bind = $mainMod, L, movefocus, r +bind = $mainMod, K, movefocus, u +bind = $mainMod, J, movefocus, d +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Move windows +bind = $mainMod SHIFT, H, movewindow, l +bind = $mainMod SHIFT, L, movewindow, r +bind = $mainMod SHIFT, K, movewindow, u +bind = $mainMod SHIFT, J, movewindow, d +bind = $mainMod SHIFT, left, movewindow, l +bind = $mainMod SHIFT, right, movewindow, r +bind = $mainMod SHIFT, up, movewindow, u +bind = $mainMod SHIFT, down, movewindow, d + +# Resize windows +bind = $mainMod CTRL, H, resizeactive, -30 0 +bind = $mainMod CTRL, L, resizeactive, 30 0 +bind = $mainMod CTRL, K, resizeactive, 0 -30 +bind = $mainMod CTRL, J, resizeactive, 0 30 + +# Floating / fullscreen +bind = $mainMod, V, togglefloating, +bind = $mainMod, F, fullscreen, 0 +bind = $mainMod SHIFT, F, fullscreen, 1 + +# Workspaces +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Cycle workspaces +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Mouse drag +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +######################### +# Audio (pamixer) +######################### +bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 +bind = , XF86AudioLowerVolume, exec, pamixer -d 5 +bind = , XF86AudioMute, exec, pamixer -t +bind = , XF86AudioMicMute, exec, pamixer --default-source -t + +######################### +# Media (playerctl) +######################### +bind = , XF86AudioPlay, exec, bash -c "playerctl -l | grep -q spotify && playerctl -p spotify play-pause || playerctl play-pause" +bind = , XF86AudioPause, exec, playerctl pause +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous +bind = , XF86AudioStop, exec, playerctl stop + +######################### +# Brightness (brightnessctl) +######################### +bind = , XF86MonBrightnessUp, exec, brightnessctl set +10% +bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%- +bind = , XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10% +bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%- + +######################### +# Power / session +######################### +bind = , XF86Sleep, exec, systemctl suspend +bind = , XF86PowerOff, exec, systemctl poweroff +bind = , XF86WakeUp, exec, systemctl suspend +bind = , XF86ScreenSaver, exec, loginctl lock-session + +######################### +# Start apps +######################### +bind = $mainMod, E, exec, thunar +bind = $mainMod, RETURN, exec, kitty +bind = CTRL ALT, B, exec, flatpak run eu.betterbird.Betterbird +bind = CTRL ALT, S, exec, spotify +bind = $mainMod, Z, exec, zeditor +bind = $mainMod, W, exec, zen +bind = CTRL ALT, T, exec, solidtime-desktop +bind = , XF86Calculator, exec, gnome-calculator + +######################### +# Auto apps +######################### +bind = , workspace, exec, ~/.config/scripts/set-workspace-wallpaper.sh + +######################### +# System stuff +######################### +bind = $mainMod, U, exec, kitty -e bash -lc "$HOME/.config/scripts/update.sh" diff --git a/Droidnix/generated/.config/hypr/exec-once.conf b/Droidnix/generated/.config/hypr/exec-once.conf new file mode 100644 index 000000000..c19bb4a5c --- /dev/null +++ b/Droidnix/generated/.config/hypr/exec-once.conf @@ -0,0 +1,13 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +exec-once = dbus-update-activation-environment --systemd --all +exec-once = systemctl --user start --no-block xdg-desktop-portal-hyprland +exec-once = systemctl --user start --no-block xdg-desktop-portal +exec-once = hypridle +exec-once = awww-daemon +exec-once = awww img ~/Wallpapers/pictures/01.jpg +exec-once = ~/.config/scripts/set-workspace-wallpaper.sh +exec-once = ~/.config/scripts/workspace-listener.sh +exec-once = /run/current-system/sw/libexec/polkit-gnome-authentication-agent-1 +exec-once = nextcloud --background +# exec-once = QT_QPA_PLATFORM=wayland flameshot 2> >(grep -v "wlroots" >&2) +exec-once = waybar diff --git a/Droidnix/generated/.config/hypr/hypridle.conf b/Droidnix/generated/.config/hypr/hypridle.conf new file mode 100644 index 000000000..0d09609b5 --- /dev/null +++ b/Droidnix/generated/.config/hypr/hypridle.conf @@ -0,0 +1,23 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +general { + lock_cmd = hyprlock + before_sleep_cmd = hyprlock + after_sleep_cmd = hyprctl dispatch dpms on + ignore_dbus_inhibit = false +} + +listener { + timeout = 600 + on-timeout = hyprlock +} + +listener { + timeout = 900 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} + +listener { + timeout = 1200 + on-timeout = systemctl suspend +} diff --git a/Droidnix/generated/.config/hypr/hyprland.conf b/Droidnix/generated/.config/hypr/hyprland.conf new file mode 100644 index 000000000..37f2eaec0 --- /dev/null +++ b/Droidnix/generated/.config/hypr/hyprland.conf @@ -0,0 +1,11 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +source = ./theming.conf +source = ./animations.conf +source = ./bindings.conf +source = ./behaviour.conf +source = ./exec-once.conf +source = ./layer-rules.conf +source = ./layout.conf +source = ./monitor-rules.conf +source = ./window-rules.conf +source = ./workspace-rules.conf diff --git a/Droidnix/generated/.config/hypr/hyprlock.conf b/Droidnix/generated/.config/hypr/hyprlock.conf new file mode 100644 index 000000000..d5bb1578b --- /dev/null +++ b/Droidnix/generated/.config/hypr/hyprlock.conf @@ -0,0 +1,22 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +general { + grace = 2 + hide_cursor = true +} + +background { + monitor = + path = screenshot + blur_passes = 3 + blur_size = 8 +} + +input-field { + monitor = + size = 250, 50 + position = 0, -80 + outline_thickness = 2 + + dots_center = true + fade_on_empty = false +} diff --git a/Droidnix/generated/.config/hypr/layer-rules.conf b/Droidnix/generated/.config/hypr/layer-rules.conf new file mode 100644 index 000000000..a7e7d631b --- /dev/null +++ b/Droidnix/generated/.config/hypr/layer-rules.conf @@ -0,0 +1,5 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +layerrule = blur on, ignore_alpha 1, match:namespace waybar +layerrule = xray 1, match:namespace waybar +layerrule = blur on, ignore_alpha 1, match:namespace swaync-control-center +layerrule = xray 1, match:namespace swaync-control-center diff --git a/Droidnix/generated/.config/hypr/layout.conf b/Droidnix/generated/.config/hypr/layout.conf new file mode 100644 index 000000000..aaae79878 --- /dev/null +++ b/Droidnix/generated/.config/hypr/layout.conf @@ -0,0 +1,7 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- + +scrolling { + fullscreen_on_one_column = true + column_width = 0.32 # default: 3 windows side by side + explicit_column_widths = 0.329, 0.5, 0.667, 1.0 +} diff --git a/Droidnix/generated/.config/hypr/monitor-rules.conf b/Droidnix/generated/.config/hypr/monitor-rules.conf new file mode 100644 index 000000000..bdad406dc --- /dev/null +++ b/Droidnix/generated/.config/hypr/monitor-rules.conf @@ -0,0 +1,3 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +monitor = DP-1, preferred, 0x0, 1 +monitor = eDP-1, preferred, auto-left, 1.5 diff --git a/Droidnix/generated/.config/hypr/theming.conf b/Droidnix/generated/.config/hypr/theming.conf new file mode 100644 index 000000000..0effc78c1 --- /dev/null +++ b/Droidnix/generated/.config/hypr/theming.conf @@ -0,0 +1,58 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# Hyprland Catppuccin Mocha Theme (solid colors) + +# Colors +$base = #1e1e2e +$baseshadow = #1e1e2e99 +$mantle = #181825 +$surface0 = #313244 +$surface1 = #45475a +$surface2 = #585b70 +$text = #cdd6f4 +$rosewater = #f5e0dc +$lavender = #b4befe +$red = #f38ba8 +$peach = #fab387 +$yellow = #f9e2af +$green = #a6e3a1 +$teal = #94e2d5 +$blue = #89b4fa +$mauve = #cba6f7 +$flamingo = #f2cdcd +$inactive = #595959aa + +# General +general { + gaps_in = 2 + gaps_out = 4 + border_size = 4 + resize_on_border = true + extend_border_grab_area = 20 + col.active_border = rgb(89b4fa) rgb(a6e3a1) 45deg + col.inactive_border = rgba(595959aa) +} + +# Decorations +decoration { + rounding = 8 + shadow { + color = rgba(1e1e2e99) + } +} + +# Groups +group { + col.border_active = rgb(89b4fa) + col.border_inactive = rgb(45475a) + col.border_locked_active = rgb(94e2d5) + groupbar { + col.active = rgb(89b4fa) + col.inactive = rgb(45475a) + text_color = rgb(cdd6f4) + } +} + +# Misc +misc { + background_color = rgb(1e1e2e) +} diff --git a/Droidnix/generated/.config/hypr/window-rules.conf b/Droidnix/generated/.config/hypr/window-rules.conf new file mode 100644 index 000000000..72330793e --- /dev/null +++ b/Droidnix/generated/.config/hypr/window-rules.conf @@ -0,0 +1,75 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- + +# Network Manager editor +windowrule { + name = Network-Manager-editor + match:class = nm-connection-editor + float = on + move = move onscreen 100%-w 0 + size = 900 700 +} + +# PulseAudio Volume Control +windowrule { + name = pavucontrol + match:class = org.pulseaudio.pavucontrol + float = on + move = move onscreen 100%-w 0 + size = 900 700 +} + +# Blueman Manager +windowrule { + name = blueman + match:class = .blueman-manager-wrapped + float = on + move = move onscreen 100%-w 0 + size = 900 700 +} + +# Networks +windowrule { + name = iwgtk + match:class = org.twosheds.iwgtk + float = on + move = move onscreen 100%-w 0 + size = 900 700 +} + +#Quickshell powermenu +windowrule { + name = quickshell-powermenu + match:title = quickshell-powermenu + opacity = 1.0 0.8 + float = on + move = cursor -50% 0 + pin = on +} + +#Quickshell layoutswitcher +windowrule { + name = quickshell-layoutswitcher + match:title = quickshell-layoutswitcher + opacity = 1.0 0.8 + float = on + move = cursor -50% 0 + pin = on +} + +#Quickshell media menu +windowrule { + name = quickshell-media + match:title = quickshell-media + float = on + move = cursor -50% 0 + pin = on +} + +# Wofi window rules +# (match: fields do not support $variables, hardcoded intentionally) +windowrule { + name = wofi + match:class = ^(wofi)$ + border_color = rgb(89b4fa) rgb(a6e3a1) 45deg + rounding = 14 +} diff --git a/Droidnix/generated/.config/hypr/workspace-rules.conf b/Droidnix/generated/.config/hypr/workspace-rules.conf new file mode 100644 index 000000000..4095c17ae --- /dev/null +++ b/Droidnix/generated/.config/hypr/workspace-rules.conf @@ -0,0 +1,7 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +workspace = 1, monitor:eDP-1 #, layout:master +workspace = 2, monitor:eDP-1 #, layout:monocle +workspace = 3, monitor:eDP-1 #, layout:master +workspace = 4, monitor:DP-1 #, layout:scrolling +workspace = 5, monitor:DP-1 #, layout:dwindle +workspace = 6, monitor:DP-1 #, layout:dwindle diff --git a/Droidnix/generated/.config/quickshell/layoutswitcher/shell.qml b/Droidnix/generated/.config/quickshell/layoutswitcher/shell.qml new file mode 100644 index 000000000..6b154e8d1 --- /dev/null +++ b/Droidnix/generated/.config/quickshell/layoutswitcher/shell.qml @@ -0,0 +1,139 @@ +// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +import Quickshell +import Quickshell.Io +import QtQuick +import QtQuick.Layouts + +ShellRoot { + QtObject { + id: colors + readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9) + readonly property color base: "#1e1e2e" + readonly property color surface0: "#313244" + readonly property color surface1: "#45475a" + readonly property color surface2: "#585b70" + readonly property color text: "#cdd6f4" + readonly property color subtext0: "#a6adc8" + readonly property color subtext1: "#bac2de" + readonly property color blue: "#89b4fa" + readonly property color green: "#a6e3a1" + readonly property color teal: "#94e2d5" + readonly property color red: "#f38ba8" + readonly property color mauve: "#cba6f7" + readonly property color peach: "#fab387" + readonly property color lavender: "#b4befe" + } + + FloatingWindow { + id: root + title: "quickshell-layoutswitcher" + visible: true + width: 220 + height: contentLayout.implicitHeight + 32 + color: colors.base + + Shortcut { + sequence: "Escape" + onActivated: Qt.quit() + } + + Rectangle { + anchors.fill: parent + anchors.margins: -2 + radius: 18 + z: -1 + opacity: Qt.application.active ? 0 : 1 + Behavior on opacity { + NumberAnimation { duration: 150 } + } + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { position: 0.0; color: colors.blue } + GradientStop { position: 1.0; color: colors.green } + } + } + + Rectangle { + anchors.fill: parent + radius: 16 + color: colors.base + + ColumnLayout { + id: contentLayout + anchors { + top: parent.top + left: parent.left + right: parent.right + margins: 16 + } + spacing: 4 + + Text { + text: "󰕰 Layout" + color: colors.text + font.pixelSize: 13 + font.bold: true + Layout.bottomMargin: 8 + } + + Repeater { + + + model: [ + { label: "󰜩 Dwindle", layout: "dwindle", description: "Vensters splitsen recursief — elk nieuw venster halveert de ruimte" }, + { label: "󰡎 Master", layout: "master", description: "Één groot hoofdvenster links, overige vensters gestapeld rechts" }, + { label: "󰾲 Scrolling", layout: "scrolling", description: "Vensters naast elkaar in een horizontaal scrollbare rij" }, + { label: "󱒉 Monocle", layout: "monocle", description: "Één venster tegelijk op volledig scherm, anderen verborgen" }, + ] + + delegate: Rectangle { + id: item + Layout.fillWidth: true + height: 38 + radius: 8 + color: hovered ? colors.surface1 : colors.base + property bool hovered: false + + Rectangle { + anchors.fill: parent + anchors.margins: -2 + radius: parent.radius + 2 + visible: item.hovered + z: -1 + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { position: 0.0; color: colors.blue } + GradientStop { position: 1.0; color: colors.green } + } + } + + Text { + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: 12 + text: modelData.label + color: item.hovered ? colors.text : colors.subtext1 + font.pixelSize: 13 + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: item.hovered = true + onExited: item.hovered = false + onClicked: proc.running = true + } + + Process { + id: proc + command: ["bash", "-c", "hyprctl keyword general:layout " + modelData.layout + " && hyprctl dispatch layoutmsg reload"] + onExited: Qt.quit() + } + } + } + + Item { height: 4 } + } + } + } +} diff --git a/Droidnix/generated/.config/quickshell/media/shell.qml b/Droidnix/generated/.config/quickshell/media/shell.qml new file mode 100644 index 000000000..b7496dabc --- /dev/null +++ b/Droidnix/generated/.config/quickshell/media/shell.qml @@ -0,0 +1,386 @@ +// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +import Quickshell +import Quickshell.Io +import QtQuick +import QtQuick.Layouts + +ShellRoot { + QtObject { + id: colors + readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.95) + readonly property color base: "#1e1e2e" + readonly property color surface0: "#313244" + readonly property color surface1: "#45475a" + readonly property color surface2: "#585b70" + readonly property color text: "#cdd6f4" + readonly property color subtext0: "#a6adc8" + readonly property color subtext1: "#bac2de" + readonly property color blue: "#89b4fa" + readonly property color green: "#a6e3a1" + readonly property color teal: "#94e2d5" + readonly property color red: "#f38ba8" + readonly property color mauve: "#cba6f7" + readonly property color peach: "#fab387" + readonly property color lavender: "#b4befe" + } + + QtObject { + id: media + property string artist: "" + property string title: "" + property string album: "" + property string artUrl: "" + property string status: "" + property string device: "" + property string player: "" + property real progress: 0.0 + property real duration: 0.0 + property real position: 0.0 + property int shuffleMode: 0 + readonly property bool isSpotify: player.indexOf("spotify") !== -1 + } + + Timer { + interval: 1000 + running: true + repeat: true + onTriggered: { + playerProc.running = true + artistProc.running = true + titleProc.running = true + albumProc.running = true + artProc.running = true + statusProc.running = true + positionProc.running = true + lengthProc.running = true + if (media.isSpotify) + shuffleProc.running = true + } + } + + Process { + id: playerProc + command: ["playerctl", "-l"] + stdout: StdioCollector { + onStreamFinished: { + var lines = text.trim().split("\n") + for (var i = 0; i < lines.length; i++) { + if (lines[i].indexOf("spotify") !== -1) { + media.player = lines[i].trim() + return + } + } + media.player = lines[0] ? lines[0].trim() : "" + } + } + } + + Process { + id: artistProc + command: ["playerctl", "metadata", "artist"] + stdout: StdioCollector { onStreamFinished: media.artist = text.trim() } + } + Process { + id: titleProc + command: ["playerctl", "metadata", "title"] + stdout: StdioCollector { onStreamFinished: media.title = text.trim() } + } + Process { + id: albumProc + command: ["playerctl", "metadata", "album"] + stdout: StdioCollector { onStreamFinished: media.album = text.trim() } + } + Process { + id: artProc + command: ["playerctl", "metadata", "mpris:artUrl"] + stdout: StdioCollector { onStreamFinished: media.artUrl = text.trim() } + } + Process { + id: statusProc + command: ["playerctl", "status"] + stdout: StdioCollector { onStreamFinished: media.status = text.trim() } + } + Process { + id: positionProc + command: ["playerctl", "position"] + stdout: StdioCollector { + onStreamFinished: { + media.position = parseFloat(text.trim()) || 0 + if (media.duration > 0) + media.progress = media.position / media.duration + } + } + } + Process { + id: lengthProc + command: ["playerctl", "metadata", "mpris:length"] + stdout: StdioCollector { + onStreamFinished: { + media.duration = (parseFloat(text.trim()) || 0) / 1000000 + } + } + } + + Process { + id: shuffleProc + command: ["playerctl", "--player=" + media.player, "shuffle"] + stdout: StdioCollector { + onStreamFinished: { + media.shuffleMode = (text.trim() === "On") ? 1 : 0 + } + } + } + + Process { id: shuffleOnProc; command: ["playerctl", "--player=" + media.player, "shuffle", "on"] } + Process { id: shuffleOffProc; command: ["playerctl", "--player=" + media.player, "shuffle", "off"] } + + function cycleShuffleMode() { + var next = (media.shuffleMode + 1) % 2 + media.shuffleMode = next + if (next === 0) + shuffleOffProc.running = true + else + shuffleOnProc.running = true + } + + // Focus spotify — uses exact lowercase class as reported by hyprctl + Process { + id: focusSpotifyProc + command: ["hyprctl", "dispatch", "focuswindow", "class:^(spotify)$"] + } + + function focusPlayer() { + if (media.isSpotify) { + focusSpotifyProc.running = true + } + } + + Process { id: prevProc; command: ["playerctl", "previous"] } + Process { id: playProc; command: ["playerctl", "play-pause"] } + Process { id: nextProc; command: ["playerctl", "next"] } + + FloatingWindow { + id: root + title: "quickshell-media" + visible: true + implicitWidth: 300 + implicitHeight: 420 + color: "transparent" + + Shortcut { + sequence: "Escape" + onActivated: Qt.quit() + } + + // Gradient border — hidden when app has focus + Rectangle { + anchors.fill: parent + anchors.margins: -2 + radius: 18 + z: -1 + opacity: Qt.application.active ? 0 : 1 + Behavior on opacity { + NumberAnimation { duration: 150 } + } + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { position: 0.0; color: colors.blue } + GradientStop { position: 1.0; color: colors.green } + } + } + + Rectangle { + anchors.fill: parent + radius: 16 + color: colors.base + + ColumnLayout { + anchors { + fill: parent + margins: 16 + } + spacing: 12 + + // Album art — click to focus player + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: 200 + radius: 12 + color: colors.surface0 + clip: true + + Image { + anchors.fill: parent + source: media.artUrl + fillMode: Image.PreserveAspectCrop + visible: media.artUrl !== "" + } + + Text { + anchors.centerIn: parent + text: "󰝚" + font.pixelSize: 48 + color: colors.surface2 + visible: media.artUrl === "" + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: focusPlayer() + } + } + + // Artist + Text { + Layout.fillWidth: true + text: media.artist || "Unknown artist" + color: colors.subtext1 + font.pixelSize: 12 + elide: Text.ElideRight + } + + // Title + Text { + Layout.fillWidth: true + text: media.title || "Nothing playing" + color: colors.text + font.pixelSize: 14 + font.bold: true + elide: Text.ElideRight + } + + // Album + Text { + Layout.fillWidth: true + text: media.album + color: colors.subtext0 + font.pixelSize: 11 + elide: Text.ElideRight + visible: media.album !== "" + } + + // Device (Spotify) + Text { + Layout.fillWidth: true + text: "󰓻 " + media.device + color: colors.green + font.pixelSize: 11 + visible: media.device !== "" + } + + // Progress bar + Rectangle { + Layout.fillWidth: true + height: 4 + radius: 2 + color: colors.surface1 + + Rectangle { + width: parent.width * media.progress + height: parent.height + radius: parent.radius + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { position: 0.0; color: colors.blue } + GradientStop { position: 1.0; color: colors.green } + } + } + } + + // Time + RowLayout { + Layout.fillWidth: true + + Text { + text: { + var m = Math.floor(media.position / 60) + var s = Math.floor(media.position % 60) + return m + ":" + (s < 10 ? "0" + s : s) + } + color: colors.subtext0 + font.pixelSize: 11 + } + + Item { Layout.fillWidth: true } + + Text { + text: { + var m = Math.floor(media.duration / 60) + var s = Math.floor(media.duration % 60) + return m + ":" + (s < 10 ? "0" + s : s) + } + color: colors.subtext0 + font.pixelSize: 11 + } + } + + // Playback controls + shuffle + RowLayout { + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + spacing: 20 + + // Shuffle button (Spotify only) + Item { + visible: media.isSpotify + width: 28 + height: 28 + + Text { + anchors.centerIn: parent + text: "󰒟" + font.pixelSize: 18 + color: media.shuffleMode === 0 ? colors.surface2 : colors.blue + } + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: cycleShuffleMode() + } + } + + Text { + text: "󰒮" + font.pixelSize: 22 + color: prevHover.containsMouse ? colors.blue : colors.text + MouseArea { + id: prevHover + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: prevProc.running = true + } + } + + Text { + text: media.status === "Playing" ? "󰏤" : "󰐊" + font.pixelSize: 28 + color: playHover.containsMouse ? colors.green : colors.text + MouseArea { + id: playHover + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: playProc.running = true + } + } + + Text { + text: "󰒭" + font.pixelSize: 22 + color: nextHover.containsMouse ? colors.blue : colors.text + MouseArea { + id: nextHover + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + onClicked: nextProc.running = true + } + } + } + } + } + } +} diff --git a/Droidnix/generated/.config/quickshell/powermenu/shell.qml b/Droidnix/generated/.config/quickshell/powermenu/shell.qml new file mode 100644 index 000000000..aef332e37 --- /dev/null +++ b/Droidnix/generated/.config/quickshell/powermenu/shell.qml @@ -0,0 +1,140 @@ +// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +import Quickshell +import Quickshell.Io +import QtQuick +import QtQuick.Layouts + +ShellRoot { + QtObject { + id: colors + readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9) + readonly property color base: "#1e1e2e" + readonly property color surface0: "#313244" + readonly property color surface1: "#45475a" + readonly property color surface2: "#585b70" + readonly property color text: "#cdd6f4" + readonly property color subtext0: "#a6adc8" + readonly property color subtext1: "#bac2de" + readonly property color blue: "#89b4fa" + readonly property color green: "#a6e3a1" + readonly property color teal: "#94e2d5" + readonly property color red: "#f38ba8" + readonly property color mauve: "#cba6f7" + readonly property color peach: "#fab387" + readonly property color lavender: "#b4befe" + } + + FloatingWindow { + id: root + title: "quickshell-powermenu" + visible: true + width: 220 + height: contentLayout.implicitHeight + 32 + color: colors.base + + Shortcut { + sequence: "Escape" + onActivated: Qt.quit() + } + + // Gradient border — hidden when app has focus + Rectangle { + anchors.fill: parent + anchors.margins: -2 + radius: 18 + z: -1 + opacity: Qt.application.active ? 0 : 1 + Behavior on opacity { + NumberAnimation { duration: 150 } + } + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { position: 0.0; color: colors.blue } + GradientStop { position: 1.0; color: colors.green } + } + } + + Rectangle { + anchors.fill: parent + radius: 16 + color: colors.base + + ColumnLayout { + id: contentLayout + anchors { + top: parent.top + left: parent.left + right: parent.right + margins: 16 + } + spacing: 4 + + Text { + text: " Power Menu" + color: colors.text + font.pixelSize: 13 + font.bold: true + Layout.bottomMargin: 8 + } + + Repeater { + model: [ + { label: "󰌾 Lock", cmd: ["hyprlock"] }, + { label: "󰐥 Shutdown", cmd: ["systemctl", "poweroff"] }, + { label: "󰑙 Reboot", cmd: ["systemctl", "reboot"] }, + { label: "󰍃 Logout", cmd: ["bash", "-c", "loginctl terminate-session $XDG_SESSION_ID"] }, + { label: "󰒲 Hibernate", cmd: ["systemctl", "hibernate"] }, + { label: "󰤄 Suspend", cmd: ["systemctl", "suspend"] }, + ] + + delegate: Rectangle { + id: item + Layout.fillWidth: true + height: 38 + radius: 8 + color: hovered ? colors.surface1 : colors.base + property bool hovered: false + + Rectangle { + anchors.fill: parent + anchors.margins: -2 + radius: parent.radius + 2 + visible: item.hovered + z: -1 + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { position: 0.0; color: colors.blue } + GradientStop { position: 1.0; color: colors.green } + } + } + + Text { + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: 12 + text: modelData.label + color: item.hovered ? colors.text : colors.subtext1 + font.pixelSize: 13 + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: item.hovered = true + onExited: item.hovered = false + onClicked: proc.running = true + } + + Process { + id: proc + command: modelData.cmd + onExited: Qt.quit() + } + } + } + + Item { height: 4 } + } + } + } +} diff --git a/Droidnix/generated/.config/scripts/numlock-check.sh b/Droidnix/generated/.config/scripts/numlock-check.sh new file mode 100755 index 000000000..6be5e31a4 --- /dev/null +++ b/Droidnix/generated/.config/scripts/numlock-check.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# Tel toetsenborden met volledige toetsset (geen media-only apparaten) +COUNT=$(libinput list-devices 2>/dev/null \ + | grep -A5 "Keyboard" \ + | grep -c "kbd") + +# Of via xinput / /proc alternatief: +# COUNT=$(cat /proc/bus/input/devices | grep -B5 'KEY=.*[a-f0-9]\{10\}' | grep -c 'Name=') + +if [ "$COUNT" -ge 2 ]; then + numlockx on +else + numlockx off +fi diff --git a/Droidnix/generated/.config/scripts/power.sh b/Droidnix/generated/.config/scripts/power.sh new file mode 100755 index 000000000..927bdc644 --- /dev/null +++ b/Droidnix/generated/.config/scripts/power.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# +# Launch a power menu +# +# Requires fzf and systemd (loginctl, systemctl) +# +# Author: Jesse Mirabel +# Date: August 19, 2025 +# License: MIT + +main() { + local list=( + "󰌾 Lock" + "󰐥 Shutdown" + "󰑙 Reboot" + "󰍃 Logout" + "󰒲 Hibernate" + "󰤄 Suspend" + ) + + local options=( + "--border=sharp" + "--border-label= Power Menu " + "--cycle" + "--ghost=Search" + "--height=~100%" + "--highlight-line" + "--info=inline-right" + "--pointer=" + "--reverse" + ) + + local selected + selected=$(printf "%s\n" "${list[@]}" | fzf "${options[@]}") + + case $selected in + Lock) loginctl lock-session ;; + Shutdown) systemctl poweroff ;; + Reboot) systemctl reboot ;; + Logout) loginctl terminate-session "$XDG_SESSION_ID" ;; + Hibernate) systemctl hibernate ;; + Suspend) systemctl suspend ;; + *) return 1 ;; + esac +} + +main diff --git a/Droidnix/generated/.config/scripts/update.sh b/Droidnix/generated/.config/scripts/update.sh new file mode 100755 index 000000000..86e731bb5 --- /dev/null +++ b/Droidnix/generated/.config/scripts/update.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +set -e +REPO="/home/$USER/Repos/nixos/Droidnix" +HOSTNAME="$(hostname)" +cd "$REPO" + +echo "🔧 Fixing ownership..." +sudo chown "$USER":"$USER" flake.lock 2>/dev/null || true + +echo "🔄 Updating flake..." +nix flake update + +echo "🏗 Rebuilding NixOS..." +sudo nixos-rebuild switch --flake ".#$HOSTNAME" + +echo "📦 Updating Flatpaks..." +flatpak update -y diff --git a/Droidnix/generated/.config/shared/colors.css b/Droidnix/generated/.config/shared/colors.css new file mode 100644 index 000000000..58971af77 --- /dev/null +++ b/Droidnix/generated/.config/shared/colors.css @@ -0,0 +1,33 @@ +/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */ +/* Catppuccin Mocha Palette */ +@define-color border #97C9E6; +@define-color crust #11111b; +@define-color mantle #181825; +@define-color base #1e1e2e; +@define-color base-alpha rgba(30, 30, 46, 0.2); + +@define-color surface0 #313244; +@define-color surface1 #45475a; +@define-color surface2 #585b70; + +@define-color overlay0 #6c7086; +@define-color overlay1 #7f849c; +@define-color overlay2 #9399b2; + +@define-color subtext0 #a6adc8; +@define-color subtext1 #bac2de; +@define-color text #cdd6f4; + +@define-color rosewater #f5e0dc; +@define-color flamingo #f2cdcd; +@define-color pink #f5c2e7; +@define-color mauve #cba6f7; +@define-color red #f38ba8; +@define-color maroon #eba0ac; +@define-color peach #fab387; +@define-color yellow #f9e2af; +@define-color green #a6e3a1; +@define-color teal #94e2d5; +@define-color sapphire #74c7ec; +@define-color blue #89b4fa; +@define-color lavender #b4befe; diff --git a/Droidnix/generated/.config/starship.toml b/Droidnix/generated/.config/starship.toml new file mode 100644 index 000000000..b72b464ed --- /dev/null +++ b/Droidnix/generated/.config/starship.toml @@ -0,0 +1,280 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +"$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 = 60000 + +[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..08b479aad --- /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/palette.json b/Droidnix/generated/.config/stylix/palette.json new file mode 100644 index 000000000..5e7417b72 --- /dev/null +++ b/Droidnix/generated/.config/stylix/palette.json @@ -0,0 +1,21 @@ +{ + "base00": "1e1e2e", + "base01": "181825", + "base02": "313244", + "base03": "45475a", + "base04": "585b70", + "base05": "cdd6f4", + "base06": "f5e0dc", + "base07": "b4befe", + "base08": "f38ba8", + "base09": "fab387", + "base0A": "f9e2af", + "base0B": "a6e3a1", + "base0C": "94e2d5", + "base0D": "89b4fa", + "base0E": "cba6f7", + "base0F": "f2cdcd", + "author": "https://github.com/catppuccin/catppuccin", + "scheme": "Catppuccin Mocha", + "slug": "catppuccin-mocha" +} diff --git a/Droidnix/generated/.config/stylix/stylix.conf b/Droidnix/generated/.config/stylix/stylix.conf new file mode 100644 index 000000000..2d0605ca4 --- /dev/null +++ b/Droidnix/generated/.config/stylix/stylix.conf @@ -0,0 +1,29 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +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/swaync/config.json b/Droidnix/generated/.config/swaync/config.json new file mode 100644 index 000000000..3d7806982 --- /dev/null +++ b/Droidnix/generated/.config/swaync/config.json @@ -0,0 +1,52 @@ +{ + "positionX": "right", + "positionY": "top", + "layer": "overlay", + "control-center-layer": "top", + "layer-shell": true, + "cssPriority": "application", + "control-center-margin-top": 8, + "control-center-margin-bottom": 8, + "control-center-margin-right": 8, + "control-center-margin-left": 0, + "notification-2fa-action": true, + "notification-inline-replies": false, + "notification-icon-size": 48, + "notification-body-image-height": 100, + "notification-body-image-width": 200, + "timeout": 10, + "timeout-low": 5, + "timeout-critical": 0, + "fit-to-screen": true, + "control-center-height": -1, + "control-center-width": 300, + "notification-window-width": 400, + "keyboard-shortcuts": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "script-fail-notify": true, + "widgets": [ + "inhibitors", + "title", + "dnd", + "notifications" + ], + "widget-config": { + "inhibitors": { + "text": "Inhibitors", + "button-text": "Clear All", + "clear-all-button": true + }, + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": "Clear All" + }, + "dnd": { + "text": "Do Not Disturb" + }, + "notifications": {} + } +} diff --git a/Droidnix/generated/.config/swaync/style.css b/Droidnix/generated/.config/swaync/style.css new file mode 100644 index 000000000..ee34f9d09 --- /dev/null +++ b/Droidnix/generated/.config/swaync/style.css @@ -0,0 +1,184 @@ +/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */ +@import url("/home/henrov/.config/shared/colors.css"); + + * { + all: unset; + font-size: 13px; + font-family: sans-serif; + transition: 200ms; +} + +/* ── Notification rows ─────────────────────────────────────────────────── */ + +.notification-row { + outline: none; + margin: 4px 0; +} + +.notification-row:focus, +.notification-row:hover { + opacity: 0.85; +} + +/* ── Individual notification ───────────────────────────────────────────── */ + +.notification { + border-radius: 12px; + padding: 8px; + margin: 4px 8px; + color: @text; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); + + /* gradient border */ + border: 2px solid transparent; + background-image: + linear-gradient(@base-alpha, @base-alpha), + linear-gradient(45deg, @blue, @green); + background-clip: padding-box, border-box; + background-origin: padding-box, border-box; +} + +.notification-content { + padding: 4px; +} + +.notification-default-action { + border-radius: 12px; +} + +.notification-default-action:hover { + background: alpha(@blue, 0.1); +} + +/* ── Text elements ─────────────────────────────────────────────────────── */ + +.summary { + font-size: 13px; + font-weight: bold; + color: @text; +} + +.time { + font-size: 11px; + color: @overlay0; +} + +.body { + font-size: 12px; + color: @subtext1; +} + +/* ── Control center ────────────────────────────────────────────────────── */ + +.control-center { + min-height: unset; + border-radius: 30px; + padding: 8px; + margin: 8px; + color: @text; + box-shadow: 0 4px 24px rgba(0, 0, 0, 0.5); + border: 2px solid transparent; + background-image: + linear-gradient(@base-alpha, @base-alpha), + linear-gradient(45deg, @blue, @green); + background-clip: padding-box, border-box; + background-origin: padding-box, border-box; +} + +.control-center-list { + background: transparent; + min-height: unset; +} + +.control-center-list-placeholder { + opacity: 0.4; + font-size: 14px; +} + +/* ── Misc windows ──────────────────────────────────────────────────────── */ + +.floating-notifications { + background: transparent; +} + +.blank-window { + background: transparent; +} + +/* ── Widget: title ─────────────────────────────────────────────────────── */ + +.widget-title { + font-size: 14px; + font-weight: bold; + color: @blue; + padding: 8px 4px 4px 4px; +} + +.widget-title > button { + font-size: 12px; + color: @overlay0; + background: alpha(@blue, 0.1); + border-radius: 8px; + padding: 2px 8px; +} + +.widget-title > button:hover { + background: alpha(@blue, 0.2); + color: @text; +} + +/* ── Widget: Do Not Disturb ────────────────────────────────────────────── */ + +.widget-dnd { + padding: 4px; +} + +.widget-dnd > switch { + border-radius: 20px; + background: alpha(@surface1, 0.3); + + /* gradient border */ + border: 1px solid transparent; + background-image: + linear-gradient(alpha(@surface1, 0.3), alpha(@surface1, 0.3)), + linear-gradient(45deg, @blue, @green); + background-clip: padding-box, border-box; + background-origin: padding-box, border-box; +} + +.widget-dnd > switch:checked { + background-image: + linear-gradient(alpha(@blue, 0.5), alpha(@blue, 0.5)), + linear-gradient(45deg, @blue, @green); + background-clip: padding-box, border-box; + background-origin: padding-box, border-box; +} + +.widget-dnd > switch slider { + border-radius: 20px; + background: @text; + min-width: 20px; + min-height: 20px; +} + +/* ── Widget: inhibitors ────────────────────────────────────────────────── */ + +.widget-inhibitors { + padding: 4px; + color: @red; + font-size: 12px; +} + +/* ── Close button ──────────────────────────────────────────────────────── */ + +.close-button { + background: alpha(@red, 0.15); + border-radius: 6px; + color: @red; + padding: 2px 6px; + font-size: 11px; +} + +.close-button:hover { + background: alpha(@red, 0.3); +} diff --git a/Droidnix/generated/.config/waybar/config.jsonc b/Droidnix/generated/.config/waybar/config.jsonc new file mode 100644 index 000000000..5e9108cb9 --- /dev/null +++ b/Droidnix/generated/.config/waybar/config.jsonc @@ -0,0 +1,327 @@ +{ + "layer": "top", + "position": "top", + "autohide": true, + "autohide-blocked": false, + "exclusive": true, + "passthrough": false, + "gtk-layer-shell": true, + + + /*******************************************************************/ + "modules-left": [ + "group/hardware" + ], + + "modules-center": [ + "group/workspaces" + ,"group/sporadic" + + ], + + "modules-right": [ + "group/audio" + ,"group/tray" + ,"group/datestuff" + ,"group/system" + ,"group/notifications" + ], + + /*******************************************************************/ + "group/workspaces": { + "orientation": "horizontal", + "modules": [ + "hyprland/workspaces", + "custom/windows" + ] + }, + +/*******************************************************************/ + "group/hardware": { + "orientation": "horizontal", + "drawer": { + "transition-duration": 500, + "transition-left-to-right": true + }, + "modules": [ + "custom/hardware-anchor", + "battery", + "cpu", + "memory", + "temperature" + ] + }, + + "custom/hardware-anchor": { + + "format": " ", + "tooltip": false + }, + + /*******************************************************************/ + "group/tray": { + "orientation": "horizontal", + "drawer": { + "transition-duration": 500, + "transition-left-to-right": true + }, + "modules": [ + "custom/tray-anchor" + ,"tray" + ] + }, + + "custom/tray-anchor": { + + "format": "󰄝 ", + "tooltip": false + }, + + /*******************************************************************/ + "group/system": { + "orientation": "horizontal", + "drawer": { + "transition-duration": 500, + "transition-left-to-right": true + }, + "modules": [ + "custom/system-anchor" + ,"custom/power" + ,"idle_inhibitor" + ] + }, + + "custom/system-anchor": { + + "format": "󱄅", + "tooltip": false + }, + + +/*************************/ + + "group/connections": { + "orientation": "horizontal", + "drawer": { + "transition-duration": 500, + "transition-left-to-right": true + }, + "modules": [ + "custom/connections-anchor" + ,"custom/bluetooth" + ,"network" + ] + }, + + "custom/connections-anchor": { + + "format": " ", + "tooltip": false + }, + + /*************************/ + + "group/audio": { + "orientation": "horizontal", + "modules": [ + /* "custom/media", */ + "pulseaudio" + ,"pulseaudio/slider" + ] + }, + + /*************************/ + + "group/sporadic": { + "orientation": "horizontal", + "modules": [ + "custom/media" + ,"custom/batterywarn" + /* ,"custom/kdeconnect" */ + ] + }, + +/*************************/ + + "group/datestuff": { + "orientation": "horizontal", + "modules": [ + "clock" + ] + }, + + /*************************/ + + "group/notifications": { + "orientation": "horizontal", + "modules": [ + "custom/notifications" + ] + }, + +/*******************************************************************/ + +"hyprland/workspaces": { + "align": 1, + "format": "{name}", + "interval": 2, +}, + +"custom/windows": { + "align": 0, + "format": "{text}", + "exec": "~/.config/waybar/scripts/hypr-workspaces.sh", + "interval": 2, + "return-type": "json", + "on-click": "~/.config/waybar/scripts/hypr-workspacesmenu.sh", + "tooltip": true +}, + +"custom/media": { + "exec": "~/.config/waybar/scripts/media.sh", + "interval": 1, + "return-type": "json", + "format": "{}", + "on-click": "qs -c media", + "max-length": 20, + "scroll-step": 1, + "tooltip": true +}, + + "custom/bluetooth": { + "exec": "~/.config/waybar/scripts/bluetooth-status.sh", + "interval": 5, + "return-type": "json", + "on-click": "blueman-manager", + "format": "{}" + }, + + "custom/batterywarn": { + "exec": "~/.config/waybar/scripts/batterywarn.sh", + "interval": 60, + "format": "{}" + }, + + "custom/kdeconnect": { + "format": "{name} {battery}% ", + "interval": 10, + "exec": "~/.config/waybar/scripts/kdeconnect-status.sh", + "tooltip": true + }, + + "custom/notifications": { + "tooltip": false, + "return-type": "json", + "exec-if": "which swaync-client", + "exec": "swaync-client -swb", + "format": "{icon}", + "format-icons": { + "notification": "󰂞", + "none": "", + "dnd-notification": "󰂠", + "dnd-none": "󰪓", + }, + "on-click": "swaync-client -t", + "on-click-right": "swaync-client -d", + "on-click-middle": "swaync-client -dn", + }, + + "custom/power": { + "format": "󰤄", + "on-click": "qs -c powermenu", + "tooltip-format": "Power Menu" + }, + + "pulseaudio": { + "format": "{volume}% {icon}", + "format-bluetooth": "{volume}% {icon}", + "format-muted": "", + "format-icons": { + "headphones": "", + "headset": "", + "phone": "", + "portable": "", + "default": ["", ""] + }, + "on-click": "pavucontrol" + }, + + "pulseaudio/slider": { + "min": 0, + "max": 100, + "orientation": "horizontal" + }, + + "idle_inhibitor": { + "tooltip": true, + "format": "{icon}", + "format-icons": { + "activated": "  ", + "deactivated": " 󰒲 " + }, + "tooltip-format-activated": "Staying awake", + "tooltip-format-deactivated": "Might sleep...." + }, + + "network": { + "format-wifi": " ({bandwidthDownBits})", + "format-ethernet": " ({bandwidthDownBits})", + "format-disconnected": "Disconnected ⚠", + "tooltip-format-wifi": "{essid} ({signalStrength}%)", + "tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}", + "on-click": "networkmanager_dmenu --dmenu --style ~/.config/wofi/style.css --allow-images=false", + "on-click-right": "nm-connection-editor" + }, + + "cpu": { + "format": "{usage}%  ", + "tooltip": false + }, + + "memory": { + "format": "{percentage}%  " + }, + + "temperature": { + "format": "{temperatureC}°C ", + "tooltip": false + }, + + "tray": { + "spacing": 10, + "icon-size": 13 + }, + + "clock": { + "format": "{:%H:%M}", + "tooltip-format": "{calendar}", + "calendar": { + "mode" : "year", + "mode-mon-col" : 3, + "weeks-pos" : "left", + "on-scroll" : 1, + "on-click-right": "mode", + "format": { + "months": "{}", + "days": "{}", + "weeks": "W{}", + "weekdays": "{}", + "today": "{}" + } + }, + "on-click": "flatpak run eu.betterbird.Betterbird -calendar" + }, + + "battery": { + "bat": "BAT0", + "states": { + "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% 󰂄", + "format-plugged": "{capacity}%  ", + "format-icons": ["󰁺", "󰁼", "󰁾", "󰂀", "󱈏 "] + } +} diff --git a/Droidnix/generated/.config/waybar/scripts/batterywarn.sh b/Droidnix/generated/.config/waybar/scripts/batterywarn.sh new file mode 100755 index 000000000..54d212ed2 --- /dev/null +++ b/Droidnix/generated/.config/waybar/scripts/batterywarn.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +capacity=$(cat /sys/class/power_supply/BAT*/capacity) +status=$(cat /sys/class/power_supply/BAT*/status) + +if [ "$status" != "Charging" ] && [ "$capacity" -lt 15 ]; then + echo " $capacity%" +else + echo "" +fi diff --git a/Droidnix/generated/.config/waybar/scripts/bluetooth-status.sh b/Droidnix/generated/.config/waybar/scripts/bluetooth-status.sh new file mode 100755 index 000000000..22d0278f9 --- /dev/null +++ b/Droidnix/generated/.config/waybar/scripts/bluetooth-status.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +bt_connected="" +while read -r _ mac name_rest; do + if [ "$(bluetoothctl info "$mac" | awk '/Connected:/ {print $2}')" = "yes" ]; then + bt_connected+="$name_rest\n" + fi +done < <(bluetoothctl devices) +# icon +if [ -n "$bt_connected" ]; then + icon="" + tooltip=$(printf "%b" "$bt_connected") +else + icon="" + tooltip="No devices connected" +fi +# ALWAYS produce valid JSON +printf '{"text": "%s", "tooltip": "%s"}\n' "$icon" "$tooltip" diff --git a/Droidnix/generated/.config/waybar/scripts/hypr-workspaces.sh b/Droidnix/generated/.config/waybar/scripts/hypr-workspaces.sh new file mode 100755 index 000000000..1436c5e42 --- /dev/null +++ b/Droidnix/generated/.config/waybar/scripts/hypr-workspaces.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# Get focused monitor name +focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .name') +monitor="${WAYBAR_OUTPUT_NAME:-$focused_monitor}" + +# Hide if not focused monitor +if [ "$monitor" != "$focused_monitor" ]; then + jq -c -n '{text:"", class:"hidden"}' + exit 0 +fi + +# Get active workspace on this monitor +active_ws=$(hyprctl monitors -j | jq -r \ + ".[] | select(.name==\"$monitor\") | .activeWorkspace.id") + +# Get clients +clients=$(hyprctl clients -j | jq -r \ + ".[] | select(.workspace.id==$active_ws) | \"\(.title)\"") + +count=$(echo "$clients" | grep -c '\S') + +# Hide if 0 or 1 clients — no point showing window switcher +if [ "$count" -le 1 ]; then + jq -c -n '{text:"", class:"hidden"}' + exit 0 +fi + +tooltip=$(echo "$clients" | sed 's/^/• /' | paste -sd '\n' -) + +jq -c -n \ + --arg text "$count" \ + --arg tooltip "$tooltip" \ + --arg class "active" \ + '{text:$text, tooltip:$tooltip, class:$class}' diff --git a/Droidnix/generated/.config/waybar/scripts/hypr-workspacesmenu.sh b/Droidnix/generated/.config/waybar/scripts/hypr-workspacesmenu.sh new file mode 100755 index 000000000..d18c6042a --- /dev/null +++ b/Droidnix/generated/.config/waybar/scripts/hypr-workspacesmenu.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +active_ws=$(hyprctl activeworkspace -j | jq -r '.id') +clients=$(hyprctl clients -j | jq -r \ + ".[] | select(.workspace.id==$active_ws) | \"\(.address)|\(.title)\"") + +choice=$(echo "$clients" | cut -d'|' -f2 \ + | wofi --dmenu \ + --style ~/.config/wofi/style.css \ + --allow-images=false \ + --prompt "Active windows ...") + +[ -z "$choice" ] && exit 0 +addr=$(echo "$clients" | grep "|$choice" | head -n1 | cut -d'|' -f1) +hyprctl dispatch focuswindow address:"$addr" diff --git a/Droidnix/generated/.config/waybar/scripts/kdeconnect-status.sh b/Droidnix/generated/.config/waybar/scripts/kdeconnect-status.sh new file mode 100755 index 000000000..0d73f455d --- /dev/null +++ b/Droidnix/generated/.config/waybar/scripts/kdeconnect-status.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +DEVICE=$(kdeconnect-cli --list-devices | grep -oP '(?<=\().*?(?=\))' | head -n 1) + +if [ -z "$DEVICE" ]; then + echo "No phone" + exit 0 +fi + +NAME=$(kdeconnect-cli -d "$DEVICE" --name 2>/dev/null) +BATTERY=$(kdeconnect-cli -d "$DEVICE" --battery 2>/dev/null | grep -o '[0-9]\+' | head -n 1) + +if [ -z "$BATTERY" ]; then + echo "$NAME" +else + echo "$NAME $BATTERY%" +fi diff --git a/Droidnix/generated/.config/waybar/scripts/media.sh b/Droidnix/generated/.config/waybar/scripts/media.sh new file mode 100755 index 000000000..f186cb582 --- /dev/null +++ b/Droidnix/generated/.config/waybar/scripts/media.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- + +# Player selection — prefer actively playing player +player=$(playerctl -l 2>/dev/null | while read -r p; do + st=$(playerctl --player="$p" status 2>/dev/null) + [ "$st" = "Playing" ] && echo "$p" && break +done) +[ -z "$player" ] && player=$(playerctl -l 2>/dev/null | head -n1) + +if [ -z "$player" ]; then + jq -c -n '{text: "", tooltip: "", class: "inactive"}' + exit 0 +fi + +status=$(playerctl --player="$player" status 2>/dev/null) +if [ "$status" != "Playing" ] && [ "$status" != "Paused" ]; then + jq -c -n '{text: "", tooltip: "", class: "inactive"}' + exit 0 +fi + +artist=$(playerctl --player="$player" metadata artist 2>/dev/null) +title=$(playerctl --player="$player" metadata title 2>/dev/null) +album=$(playerctl --player="$player" metadata album 2>/dev/null) +art=$(playerctl --player="$player" metadata mpris:artUrl 2>/dev/null) +length=$(playerctl --player="$player" metadata mpris:length 2>/dev/null) +position=$(playerctl --player="$player" position 2>/dev/null) + +# Progress percentage — pure bash, no bc needed +if [ -n "$length" ] && [ -n "$position" ] && [ "$length" -gt 0 ] 2>/dev/null; then + pos_us=$(echo "$position" | awk '{printf "%d", $1 * 1000000}') + progress=$(( pos_us * 100 / length )) +else + progress=0 +fi + +# Spotify device +device="" +if [[ "$player" == *"spotify"* ]]; then + device=$(playerctl --player="$player" metadata xesam:url 2>/dev/null | grep -o 'device=[^&]*' | cut -d= -f2) +fi + +# Icon +if [ "$status" = "Paused" ]; then + icon="⏸ " +else + icon="▶ " +fi + +# Scrolling ticker +CACHE_FILE="/tmp/waybar_media_scroll_${player//\//_}" +full_text="${artist} — ${title}" +text_len=${#full_text} +display_len=30 + +# Reset scroll offset when track changes +TRACK_FILE="/tmp/waybar_media_track_${player//\//_}" +last_track="" +[ -f "$TRACK_FILE" ] && last_track=$(cat "$TRACK_FILE") +if [ "$full_text" != "$last_track" ]; then + echo "0" > "$CACHE_FILE" + echo "$full_text" > "$TRACK_FILE" +fi + +if [ "$text_len" -le "$display_len" ]; then + text="$full_text" +else + offset=0 + [ -f "$CACHE_FILE" ] && offset=$(cat "$CACHE_FILE") + + padded="${full_text} ${full_text}" + text="${padded:$offset:$display_len}" + + next_offset=$(( (offset + 1) % (text_len + 4) )) + echo "$next_offset" > "$CACHE_FILE" +fi + +# Build tooltip +tooltip="Artist: ${artist} +Title: ${title} +Album: ${album}" +if [ -n "$device" ]; then + tooltip="${tooltip} +󰓻 ${device}" +fi +tooltip="${tooltip}" +jq -c -n \ + --arg text "${icon}${text}" \ + --arg tooltip "$tooltip" \ + --arg class "$player" \ + --arg art "$art" \ + '{text: $text, tooltip: $tooltip, class: $class, alt: $art}' diff --git a/Droidnix/generated/.config/waybar/style-dark.css b/Droidnix/generated/.config/waybar/style-dark.css new file mode 100644 index 000000000..6084289bf --- /dev/null +++ b/Droidnix/generated/.config/waybar/style-dark.css @@ -0,0 +1,252 @@ +/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */ +@import url("file:///home/henrov/.config/shared/colors.css"); + +/* --- Global --- */ + * { + font-family: + Aporetic Sans Mono, + Iosevka Nerd Font, + Roboto, + Helvetica, + Arial, + sans-serif; + font-size: 13px; +} + +window#waybar { + background-color: transparent; + color: @text; + padding-top: 0; + padding-bottom: 0; + margin-top: 0; + margin-bottom: 0; +} + + +/* ---------GROUPS------------------------------------------------ */ + +/* --- Group-level theming --- */ +#hardware, +#workspaces, +#sporadic, +#audio, +#tray, +#datestuff, +#system, +#notifications, +#connections { + color: @text; + font-weight: bold; + border-radius: 30px; + /* --- Option 1 Green blue filled + background: + linear-gradient(transparent, transparent) padding-box, + linear-gradient(45deg, @blue, @green) border-box; + border: 2px solid transparent; + --- */ + /* --- Option 2 default background green blue border + background: + linear-gradient(@base, @base) padding-box, + linear-gradient(45deg, @blue, @green) border-box; + border: 2px solid transparent; + */ + /* --- Option 3 NO background, no border */ + background: transparent; + border: 2px solid transparent; + /* --- Option 5 Solid border + background: transparent; + border: 2px solid @border; + --- */ + margin: 0px 3px; + padding: 1px 4px; +} + +/* --- Group-level label padding --- */ +#hardware label, +#workspaces label, +#sporadic label, +#audio label, +#tray label, +#datestuff label, +#system label, +#notifications label, +#connections label { + padding: 0px 5px; + transition: padding 0.2s ease; +} + +/* --- Group anchors default visible --- */ +#custom-hardware-anchor, +#custom-tray-anchor, +#custom-system-anchor, +#custom-connections-anchor { + /* min-width: 80px; */ + padding: 0 5px; + margin: 0 2px; + opacity: 1; + transition: opacity 0.2s ease, min-width 0.2s ease, padding 0.2s ease; +} + +/* --- Hide anchors on hover of the group --- */ +#hardware:hover #custom-hardware-anchor, +#tray:hover #custom-tray-anchor, +#system:hover #custom-system-anchor, +#connections:hover #custom-connections-anchor { + opacity: 0; + min-width: 0; + padding: 0; + margin: 0; +} + +/* ----------------------------- + WORKSPACES / WINDOWS MODULE +----------------------------- */ + +#workspaces { + border: none; + background: none; +} + +/* Disable hover effects completely */ +#workspaces button, +#workspaces button:hover { + border: 2px solid transparent; + padding: 0 6px; + margin: 0; + border-radius: 30px; + transition: none; +} + +/* Active vs inactive workspace colors */ +#workspaces button.active { + background: linear-gradient(45deg, @blue, @green); + color: @base; +} + +activeworkspaces:not(.active) { + background: linear-gradient(@base-alpha, @base-alpha); + border: 2px solid transparent; + color: @text-muted; +} + +label#custom-windows.module { + font-size: 14px; + color: @base; + padding: 0 8px; + border-radius: 30px; + transition: all 0.3s ease; +} + +label#custom-windows.active { + background: linear-gradient(45deg, alpha(@blue, 0.5), alpha(@green, 0.5)); +} + +label#custom-windows:not(.active) { + background: transparent; + color: transparent; +} + +/* ---- Media ---*/ + +#custom-media { + padding: 0 8px; + color: @text; +} + +#custom-media.inactive { + background: transparent; + color: transparent; + opacity: 0; + padding: 0; + margin: 0; + min-width: 0; +} + +/* ---- Pulseaudio ---*/ + +#pulseaudio-slider { + padding: 0 4px; + margin: 0; + min-width: 140px; +} +#pulseaudio-slider slider { + min-height: 0px; + min-width: 0px; + opacity: 0; + border-radius: 30px; + background: linear-gradient(45deg, @blue, @green); + border: none; + box-shadow: none; + margin: 0; + padding: 0; +} +#pulseaudio-slider trough { + min-height: 10px; + min-width: 120px; + border-radius: 30px; + background: transparent; +} +#pulseaudio-slider highlight { + min-width: 10px; + border-radius: 30px; + background: linear-gradient(45deg, @blue, @green); + border: 2px solid transparent; +} + + +/* --------------------------------------------------------- */ +/* STATES / SPECIALS */ +#custom-notifications.notification, +#custom-notifications.dnd-notification, +#idle_inhibitor.activated { + background: linear-gradient(45deg, @blue, @green); + border: 2px solid transparent; + color: @base; + border-radius: 30px; +} + +#battery.charging { + color: @green; +} + +#batterywarn { + color: @red; + animation: blink 0.5s linear infinite alternate; + border-radius: 30px; + border: 2px solid transparent; +} + +#battery.warning:not(.charging) { + color: @text; + animation: blink 0.5s linear infinite alternate; + border-radius: 30px; + border: 2px solid transparent; +} + +#custom-batterywarn { + margin: 0 5px; + padding: 0 10px; + color: @red; + animation: blink 0.5s linear infinite alternate; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: @base; + border-radius: 30px; + border: 2px solid transparent; + } +} + +#network.disconnected { + background-color: @red; + border-radius: 30px; + border: 2px solid transparent; +} + +#temperature.critical { + background-color: @red; + border-radius: 30px; + border: 2px solid transparent; +} diff --git a/Droidnix/generated/.config/waypaper/config.ini b/Droidnix/generated/.config/waypaper/config.ini new file mode 100644 index 000000000..73a1e1169 --- /dev/null +++ b/Droidnix/generated/.config/waypaper/config.ini @@ -0,0 +1,56 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +[Settings] +language = en +backend = awww +folder = ~/Wallpapers/pictures +monitors = All +wallpaper = ~/Wallpapers/pictures/13.jpg +show_path_in_tooltip = True +fill = fill +sort = name +color = #ffffff +subfolders = False +all_subfolders = False +show_hidden = False +show_gifs_only = False +zen_mode = False +post_command = +number_of_columns = 3 +awww_transition_type = any +awww_transition_step = 63 +awww_transition_angle = 0 +awww_transition_duration = 2 +awww_transition_fps = 60 +mpvpaper_sound = False +mpvpaper_options = +use_xdg_state = False +stylesheet = /home/henrov/.config/waypaper/style.css +keybindings = ~/.config/waypaper/keybindings.ini + +[Settings] +language = en +backend = awww +folder = ~/Wallpapers/pictures +monitors = All +wallpaper = ~/Wallpapers/pictures/13.jpg +show_path_in_tooltip = True +fill = fill +sort = name +color = #ffffff +subfolders = False +all_subfolders = False +show_hidden = False +show_gifs_only = False +zen_mode = False +post_command = +number_of_columns = 3 +awww_transition_type = any +awww_transition_step = 63 +awww_transition_angle = 0 +awww_transition_duration = 2 +awww_transition_fps = 60 +mpvpaper_sound = False +mpvpaper_options = +use_xdg_state = False +stylesheet = /home/henrov/.config/waypaper/style.css +keybindings = ~/.config/waypaper/keybindings.ini diff --git a/Droidnix/generated/.config/wofi/config b/Droidnix/generated/.config/wofi/config new file mode 100644 index 000000000..090437bce --- /dev/null +++ b/Droidnix/generated/.config/wofi/config @@ -0,0 +1,19 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +[global] +allow_markup = true + +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 + +prompt = > ... diff --git a/Droidnix/generated/.config/wofi/scripts/wofi-launcher.sh b/Droidnix/generated/.config/wofi/scripts/wofi-launcher.sh new file mode 100755 index 000000000..59ba3ae6c --- /dev/null +++ b/Droidnix/generated/.config/wofi/scripts/wofi-launcher.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +wofi --show drun \ + --style ~/.config/wofi/style.css \ + --no-actions \ + --allow-images=false \ + --columns 1 \ + --prompt "Apps ..." diff --git a/Droidnix/generated/.config/wofi/style.css b/Droidnix/generated/.config/wofi/style.css new file mode 100644 index 000000000..3dbe907dd --- /dev/null +++ b/Droidnix/generated/.config/wofi/style.css @@ -0,0 +1,88 @@ +/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */ +@import "~/.config/shared/colors.css"; + + * { + background-color: transparent; + color: @text; + font-family: "JetBrainsMono Nerd Font", monospace; + font-size: 12pt; +} + +#window { + background: linear-gradient(45deg, #89b4fa, #a6e3a1); + border-radius: 28px; + padding: 2px; +} + +#outer-box { + background-color: rgba(30, 30, 46, 0.98); /* almost solid */ + border-radius: 26px; + padding: 12px; +} + +#inner-box { + background: transparent; + padding: 0; +} + +#input { + background-color: @surface1; /* stronger than surface0 */ + color: @text; + border: 1px solid @surface2; + border-radius: 18px; + padding: 10px 14px; + margin-bottom: 10px; +} + +#input:focus { + border: 1px solid @blue; + background-color: @surface2; +} + +#entry { + background-color: rgba(0, 0, 0, 0.35); + color: @subtext1; + border-radius: 18px; + padding: 10px 14px; + margin: 2px 0; + transition: all 0.15s ease; +} + + +#entry:hover { + background-color: rgba(0, 0, 0, 0.5); + color: @text; +} + +#entry:focus { + background: linear-gradient(45deg, #89b4fa, #89b4fa); + color: @lavender; + border-radius: 18px; +} + +#entry:selected { + background: linear-gradient(45deg, #89b4fa, #a6e3a1); + border-radius: 18px; + font-weight: bold; +} + +#entry image { + margin-right: 10px; + opacity: 0.9; +} + +#scrollbar { + background-color: @surface1; + border-radius: 20px; + width: 6px; +} + +#scrollbar handle { + background: linear-gradient(45deg, #89b4fa, #a6e3a1); + border-radius: 20px; +} + +#prompt { + color: @subtext0; + margin-right: 6px; +} diff --git a/Droidnix/generated/.config/zed/settings.json b/Droidnix/generated/.config/zed/settings.json new file mode 100644 index 000000000..91f605bbe --- /dev/null +++ b/Droidnix/generated/.config/zed/settings.json @@ -0,0 +1,27 @@ +// Zed settings +// +// For information on how to configure Zed, see the Zed +// documentation: https://zed.dev/docs/configuring-zed +// +// To see all of Zed's default settings without changing your +// custom settings, run `zed: open default settings` from the +// command palette (cmd-shift-p / ctrl-shift-p) +{ + "icon_theme": "Catppuccin Mocha", + "agent": { + "default_model": { + "provider": "ollama", + "model": "codellama:34b", + "enable_thinking": false + }, + "favorite_models": [], + "model_parameters": [] + }, + "ui_font_size": 16, + "buffer_font_size": 15, + "theme": { + "mode": "dark", + "light": "One Light", + "dark": "Catppuccin Mocha", + }, +} diff --git a/Droidnix/generated/.config/zsh/.zshrc b/Droidnix/generated/.config/zsh/.zshrc new file mode 100644 index 000000000..5d0b99f60 --- /dev/null +++ b/Droidnix/generated/.config/zsh/.zshrc @@ -0,0 +1,25 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# Path to syntax highlighting installed by Nix +ZSH_SYNTAX_HIGHLIGHTING="${HOME}/.nix-profile/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" + +# Load syntax highlighting if available +if [ -f "$ZSH_SYNTAX_HIGHLIGHTING" ]; then + source "$ZSH_SYNTAX_HIGHLIGHTING" +fi + +# Initialize Starship prompt +if command -v starship >/dev/null 2>&1; then + eval "$(starship init zsh)" +fi + +source /etc/profile.d/99-alias-functions.sh +eval "$(/run/current-system/sw/bin/z.lua --init zsh)" +cd() { + if [ "$#" -eq 0 ]; then + builtin cd ~ + else + builtin cd "$@" || return + fi + + command z "$PWD" + } diff --git a/Droidnix/generated/assets/2_b_installed.conf b/Droidnix/generated/assets/2_b_installed.conf new file mode 100644 index 000000000..f2aa4a11e --- /dev/null +++ b/Droidnix/generated/assets/2_b_installed.conf @@ -0,0 +1,70 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +#packages +_1password-gui +audacity +baobab +bat +blender +brave +btop +chromium +cliphist +comma +direnv +duf +delta +eza +fd +file +fzf +gimp +git +gparted +grim +grimblast +gnome-calculator +qalculate-gtk +handbrake +hyperfine +just +jq +libreoffice +lua +nextcloud-client +nextcloud-talk-desktop +nix-index +nix-output-monitor +nh +numlockx +obsidian +openssl +pandoc +postman +python3 +qdirstat +ripgrep +signal-desktop +slurp +solidtime-desktop +spotify +solaar +swappy +sweethome3d.application +tea +todoist +tree +usbutils +vlc +wev +wget +wl-clipboard +wf-recorder +yazi +z-lua +zed-editor +zoxide + +#flatpaks +eu.betterbird.Betterbird +com.todoist.Todoist +com.logseq.Logseq diff --git a/Droidnix/generated/assets/aliases.conf b/Droidnix/generated/assets/aliases.conf new file mode 100644 index 000000000..f3d79d923 --- /dev/null +++ b/Droidnix/generated/assets/aliases.conf @@ -0,0 +1,26 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +#File & navigation +repo=cd ~/Repos && ls -lah + +#Nix commands +nps=xdg-open https://search.nixos.org + +#system commands +please=sudo +pls=sudo +rb=sudo reboot +po=sudo poweroff + +#flatpak commands +fpl=flatpak list +fps=flatpak search +fpi=flatpak install +fpr=flatpak run +fpu=flatpak update + +#ssh commands +nxc=ssh henrov@nextcloud.data-pro.nu + +#app shortcuts +vs=code +keys=hyprctl binds diff --git a/Droidnix/generated/disabled/modules/traveldroid/apps/flameshot.nix b/Droidnix/generated/disabled/modules/traveldroid/apps/flameshot.nix new file mode 100644 index 000000000..69df75052 --- /dev/null +++ b/Droidnix/generated/disabled/modules/traveldroid/apps/flameshot.nix @@ -0,0 +1,52 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ pkgs, config, lib, ... }: +let + username = config.defaultUser or "henrov"; +in +{ + ############################ + # System-level packages + ############################ + environment.systemPackages = with pkgs; [ + flameshot + ]; + + ############################ + # Home Manager user-level configuration + ############################ + home-manager.users."${username}" = { + home.sessionVariables = { + SCREENSHOT_TOOL = "flameshot"; + USERNAME = username; + }; + + # Create ~/Pictures/Screenshots by touching a dummy file + home.file."Pictures/Screenshots/.keep" = { + text = ""; # empty file + }; + + services.flameshot = { + enable = true; + settings = { + General = { + uiColor = "#97cbbe"; + contrastUiColor = "#1e1e2e"; + showDesktopNotification = true; + savePath = "/home/${username}/Pictures/Screenshots"; + filenamePattern = "$Y-$m-$d_$H-$M-$S"; + useGrimAdapter = true; + }; + }; + }; + + systemd.user.services.flameshot = { + Service = { + Environment = [ + "WAYLAND_DISPLAY=wayland-1" + "XDG_CURRENT_DESKTOP=hyprland" + "XDG_SESSION_TYPE=wayland" + ]; + }; + }; + }; +} diff --git a/Droidnix/generated/hosts/traveldroid/boot.nix b/Droidnix/generated/hosts/traveldroid/boot.nix new file mode 100644 index 000000000..82879277e --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/boot.nix @@ -0,0 +1,64 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ config, pkgs, lib, flakeRoot, ... }: +{ + boot.loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + efi.efiSysMountPoint = "/boot"; + timeout = 5; + }; + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelParams = [ + "quiet" + "splash" + "udev.log_level=3" + "rd.systemd.show_status=false" + # Sleep / power management + "mem_sleep_default=deep" # Use S3 deep sleep, fixes sleep not working + "acpi_osi=Linux" # Tell ACPI this is a Linux system + "acpi_backlight=native" # Proper backlight control + # Intel GPU — fixes screen blinking on sleep/wake + "i915.enable_psr=0" + "i915.enable_psr2_sel_fetch=0" + # Prevent nvme from waking the system + "nvme.noacpi=1" + ]; + boot.consoleLogLevel = 0; + #boot.initrd.systemd.enable = true; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_usb_sdmmc" + ]; + hardware.enableAllFirmware = true; + boot.kernelModules = [ + "kvm-intel" + "asus_wmi" # Asus-specific power/fan/keyboard control + ]; + boot.plymouth = { + enable = true; + }; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + + # Power management + powerManagement.enable = true; + services.logind.settings.Login = { + HandleSleepKey = "ignore"; + HandleSleepKeyLongPress = "ignore"; + }; + services.thermald.enable = true; # Intel thermal management daemon + services.tlp = { + enable = true; + settings = { + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; + PLATFORM_PROFILE_ON_AC = "performance"; + PLATFORM_PROFILE_ON_BAT = "low-power"; + }; + }; +} diff --git a/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix b/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix new file mode 100644 index 000000000..ca588f3b6 --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix @@ -0,0 +1,48 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ + hostname, + pkgs, + lib, + modulesPath, + user, + config, + ... +}: +{ + imports = [ + # (modulesPath + "/installer/scan/not-detected.nix") + #../../hardware/hardware.nix + ]; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_usb_sdmmc" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/811D-0676"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; } + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/Droidnix/generated/hosts/traveldroid/host.nix b/Droidnix/generated/hosts/traveldroid/host.nix new file mode 100644 index 000000000..5f4e422b3 --- /dev/null +++ b/Droidnix/generated/hosts/traveldroid/host.nix @@ -0,0 +1,54 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }: + +let + hostname = "traveldroid"; + modulesPath = "${flakeRoot}/generated/modules/${hostname}"; + hostModules = import-tree modulesPath; + allModules = hostModules.imports; +in +{ + networking.hostName = hostname; + system.stateVersion = "26.05"; + + ################################# + # Locale + ################################# + + i18n = { + defaultLocale = "nl_NL.UTF-8"; + extraLocales = [ + "nl_NL.UTF-8/UTF-8" + "en_US.UTF-8/UTF-8" + ]; + consoleKeyMap = "us"; + }; + + time.timeZone = "Europe/Amsterdam"; + + ################################# + # Imports + ################################# + + imports = + [ ../../../generated/users/henrov.nix + ./boot.nix + ./hardware-configuration.nix + ] + ++ allModules + ++ [ home-manager.nixosModules.home-manager ] + ; + + ################################# + # Home Manager integration + ################################# + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + environment.systemPackages = [ + pkgs.dconf + ]; + + programs.dconf.enable = true; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/2_b_installed.nix b/Droidnix/generated/modules/traveldroid/apps/2_b_installed.nix new file mode 100644 index 000000000..442a6f26a --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/2_b_installed.nix @@ -0,0 +1,100 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + ################################# + # FILE + ################################# + confPath = "${flakeRoot}/generated/assets/2_b_installed.conf"; + raw = builtins.readFile confPath; + lines = lib.splitString "\n" raw; + + ################################# + # CLEAN LINE + ################################# + cleanLine = line: + let + noCR = lib.replaceStrings [ "\r" ] [ "" ] line; + noInlineComment = lib.head (lib.splitString "#" noCR); + in + lib.strings.trim noInlineComment; + + ################################# + # PARSE SECTION + ################################# + parseSection = section: + let + result = + builtins.foldl' + (acc: line: + let + l = lib.strings.trim line; + in + if l == section then + acc // { active = true; } + else if lib.hasPrefix "#" l then + acc // { active = false; } + else if acc.active then + acc // { entries = acc.entries ++ [ l ]; } + else + acc + ) + { active = false; entries = []; } + lines; + in + builtins.filter (l: l != "") (map cleanLine result.entries); + + ################################# + # NIX PACKAGES + ################################# + packageEntries = parseSection "#packages"; + + resolvePkg = name: + let + parts = lib.splitString "." name; + found = lib.attrByPath parts null pkgs; + in + if found == null then + throw '' + packages.nix: package not found + Token: ${name} + File : ${confPath} + '' + else + found; + + packages = map resolvePkg packageEntries; + + ################################# + # FLATPAKS + ################################# + flatpakEntries = parseSection "#flatpaks"; + +in { + ################################# + # Allow unfree + ################################# + nixpkgs.config.allowUnfree = true; + + ################################# + # System packages (Nix) + ################################# + environment.systemPackages = packages; + + ################################# + # Flatpak setup + ################################# + services.flatpak.enable = true; + + services.flatpak.remotes = [ + { + name = "flathub"; + location = "https://flathub.org/repo/flathub.flatpakrepo"; + } + ]; + + ################################# + # Flatpak apps + ################################# + services.flatpak.packages = flatpakEntries; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix b/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix new file mode 100644 index 000000000..359d581b7 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/emacs/emacs.nix @@ -0,0 +1,87 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ config, pkgs, lib, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + + assetPath = "${flakeRoot}/generated/.config/emacs"; + + # Emacs package with Tree-sitter support + emacsPkg = pkgs.emacs-pgtk.override { withTreeSitter = true; }; + + # Extra packages for Emacs via Home Manager + emacsExtraPackages = epkgs: [ + epkgs.manualPackages.treesit-grammars.with-all-grammars + epkgs.nerd-icons + epkgs.doom-modeline + epkgs.diminish + epkgs.eldoc + epkgs.pulsar + epkgs.which-key + epkgs.expreg + epkgs.vundo + epkgs.puni + epkgs.avy + epkgs.consult + epkgs.vertico + epkgs.marginalia + epkgs.crux + epkgs.magit + epkgs.nerd-icons-corfu + epkgs.corfu + epkgs.cape + epkgs.orderless + epkgs.yasnippet + epkgs.yasnippet-snippets + epkgs.rg + epkgs.exec-path-from-shell + epkgs.eat + epkgs.rust-mode + epkgs.rustic + epkgs.nix-mode + epkgs.hcl-mode + epkgs.shell-pop + epkgs.envrc + epkgs.nixpkgs-fmt + epkgs.f + epkgs.gptel + epkgs.catppuccin-theme + epkgs.eldoc-box + epkgs.sideline + epkgs.sideline-flymake + epkgs.sideline-eglot + ]; +in +{ + # System-wide installation + environment.systemPackages = [ + emacsPkg + ]; + + # Home Manager user-specific configuration for your default user + home-manager.users = { + ${username} = { + home.sessionVariables = { + EDITOR = "emacs"; + XDG_SCREENSHOTS_DIR = "~/screenshots"; + }; + + programs.emacs = { + enable = true; + package = emacsPkg; + extraPackages = emacsExtraPackages; + }; + + home.file = { + ".emacs.d/early-init.el" = { + source = "${assetPath}/early-init.el"; + force = true; # <-- allow overwrite + }; + ".emacs.d/init.el" = { + source = "${assetPath}/init.el"; + force = true; # <-- allow overwrite + }; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/kdeconnect.nix b/Droidnix/generated/modules/traveldroid/apps/kdeconnect.nix new file mode 100644 index 000000000..3d550dcb6 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/kdeconnect.nix @@ -0,0 +1,21 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ config, pkgs, ... }: +let + username = config.defaultUser or "henrov"; +in +{ + environment.systemPackages = with pkgs; [ + kdePackages.kdeconnect-kde + ]; + + systemd.user.services.kdeconnect = { + enable = true; + description = "KDE Connect daemon"; + wantedBy = ["default.target"]; + serviceConfig = { + ExecStart = "${pkgs.kdePackages.kdeconnect-kde}/bin/kdeconnectd"; + Restart = "on-failure"; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/kitty.nix b/Droidnix/generated/modules/traveldroid/apps/kitty.nix new file mode 100644 index 000000000..cff7c665a --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/kitty.nix @@ -0,0 +1,44 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, pkgs, config, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + extraConfigFile = "${flakeRoot}/generated/.config/kitty/extra.conf"; + extraConfig = + if builtins.pathExists extraConfigFile + then builtins.readFile extraConfigFile + else ""; +in +{ + ################################# + # System-wide install + ################################# + environment.systemPackages = [ + pkgs.kitty + ]; + ################################# + # Home Manager + ################################# + home-manager.users = { + "${username}" = { + programs.kitty = { + enable = true; + settings = { + confirm_os_window_close = lib.mkForce 0; + dynamic_background_opacity = lib.mkForce true; + enable_audio_bell = lib.mkForce false; + mouse_hide_wait = lib.mkForce "-1.0"; + window_padding_width = lib.mkForce 10; + background_opacity = lib.mkForce "0.5"; + background_blur = lib.mkForce 5; + notify_on_command_complete = lib.mkForce "never"; + }; + extraConfig = '' + ${extraConfig} + # Theme + include themes/Catppuccin-Mocha.conf + ''; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/starship.nix b/Droidnix/generated/modules/traveldroid/apps/starship.nix new file mode 100644 index 000000000..62624c989 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/starship.nix @@ -0,0 +1,31 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + # Default username fallback + username = config.defaultUser or "henrov"; + + # Path to the starship config in assets + starshipConfSrc = "${flakeRoot}/generated/.config/starship.toml"; +in +{ + ################################# + # Install Starship system-wide + ################################# + environment.systemPackages = [ pkgs.starship ]; + + ################################# + # Home Manager user configuration + ################################# + home-manager.users = { + ${username} = { + + home.file = { + ".config/starship.toml" = { + text = builtins.readFile "${starshipConfSrc}"; + force = true; + }; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/thunar.nix b/Droidnix/generated/modules/traveldroid/apps/thunar.nix new file mode 100644 index 000000000..fa2061880 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/thunar.nix @@ -0,0 +1,38 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ pkgs, config, lib, ... }: + +let + # Resolve the default username from host config + username = config.defaultUser or "henrov"; +in +{ + ############################ + # System-level packages + ############################ + environment.systemPackages = with pkgs; [ + thunar # main file manager + thunar-archive-plugin # zip, tar, rar, 7z support + thunar-volman # auto-mount removable drives + gvfs # support for external drives and network shares + xarchiver # optional GUI archive manager + tumbler # Showing thumbnails + libmtp + mtpfs + jmtpfs + ]; + + ############################ + # Home Manager user-level configuration + ############################ + # Direct assignment to the user avoids recursiveUpdate issues + home-manager.users."${username}" = { + home.stateVersion = "26.05"; # required + + home.sessionVariables = { + FILE_MANAGER = "thunar"; + USERNAME = username; + }; + }; + # Enable gvfs as a service + services.gvfs.enable = true; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/wofi.nix b/Droidnix/generated/modules/traveldroid/apps/wofi.nix new file mode 100644 index 000000000..3dd933ca8 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/wofi.nix @@ -0,0 +1,26 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + sysName = "wofi"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; +in +{ + environment.systemPackages = [ pkgs.wofi ]; + + home-manager.users = { + ${username} = { + home.activation.MakeWofiMutable = { + after = [ "writeBoundary" ]; + before = []; + data = '' + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; + ''; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/zenbrowser.nix b/Droidnix/generated/modules/traveldroid/apps/zenbrowser.nix new file mode 100644 index 000000000..c49cab1f4 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/zenbrowser.nix @@ -0,0 +1,12 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ config, pkgs, lib, zen-browser, ... }: + +let + # Grab the Zen Browser package for this host system + zenBrowser = zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default; +in +{ + environment.systemPackages = [ + zenBrowser + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/apps/zsh.nix b/Droidnix/generated/modules/traveldroid/apps/zsh.nix new file mode 100644 index 000000000..d4ca4c2bb --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/apps/zsh.nix @@ -0,0 +1,105 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + ################################# + # User config + ################################# + username = config.defaultUser or "henrov"; + generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc"; + + ################################# + # Alias parsing + ################################# + aliasFile = "${flakeRoot}/generated/assets/aliases.conf"; + content = builtins.readFile aliasFile; + + lines = + lib.filter (l: l != "") + (map (l: + let + noComment = builtins.head (lib.splitString "#" l); + in lib.trim noComment + ) (lib.splitString "\n" content)); + + parseLine = line: + let + parts = lib.splitString "=" line; + in + if lib.length parts < 2 then null else { + name = lib.trim (lib.head parts); + value = lib.trim (lib.concatStringsSep "=" (lib.tail parts)); + }; + + parsed = + lib.filter (x: x != null) + (map parseLine lines); + + functions = + lib.concatStringsSep "\n" + (map (x: '' + ${x.name}() { + ${x.value} "$@" + } + '') parsed); + +in +{ + ################################# + # Packages + ################################# + environment.systemPackages = with pkgs; [ + zsh + oh-my-zsh + starship + zsh-syntax-highlighting + ]; + + ################################# + # Zsh config location + ################################# + environment.etc."zshenv".text = '' + export ZDOTDIR=$HOME/.config/zsh + ''; + + ################################# + # Generated alias functions (system-wide) + ################################# + environment.etc."profile.d/99-alias-functions.sh".text = '' + # system-wide functions generated from aliases.conf + ${functions} + ''; + + ################################# + # Global zshrc + ################################# + environment.etc."zshrc".text = '' + export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh + ZSH_THEME="" + plugins=(git sudo extract colored-man-pages command-not-found history docker kubectl) + + source $ZSH/oh-my-zsh.sh + + # Init starship FIRST (prompt) + eval "$(starship init zsh)" + + # Load alias functions + if [ -f /etc/profile.d/99-alias-functions.sh ]; then + source /etc/profile.d/99-alias-functions.sh + fi + + # Load optional generated user config + [ -f "${generatedZsh}" ] && source "${generatedZsh}" + + # Syntax highlighting MUST be last + source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + ''; + + ################################# + # Home Manager integration + ################################# + home-manager.users.${username} = { + programs.zsh.enable = true; + home.file.".config/zsh/.zshrc".source = generatedZsh; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/fonts.nix b/Droidnix/generated/modules/traveldroid/desktop/fonts.nix new file mode 100644 index 000000000..47b5f64fc --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/fonts.nix @@ -0,0 +1,10 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, pkgs, config, ... }: + +{ + fonts.packages = with pkgs; [ + nerd-fonts.iosevka + nerd-fonts.fira-code + nerd-fonts.jetbrains-mono + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/gtk.nix b/Droidnix/generated/modules/traveldroid/desktop/gtk.nix new file mode 100644 index 000000000..fae5ee63e --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/gtk.nix @@ -0,0 +1,18 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ pkgs, config, lib, ... }: + +let + username = config.defaultUser or "henrov"; +in +{ + environment.systemPackages = with pkgs; [ + gtk3 + gtk4 + ]; + + home-manager.users."${username}" = { + gtk = { + enable = true; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix new file mode 100644 index 000000000..6ff436e10 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix @@ -0,0 +1,36 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }: +let + username = config.defaultUser or "henrov"; + sysName = "hypr"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; + hyprlandPkg = + pkgs.hyprland or + pkgs.hyprland-git or + inputs.hyprland.packages.${pkgs.system}.default; +in +{ + # Install Hyprland systemwide + programs.hyprland.enable = true; + programs.hyprland.withUWSM = true; + programs.hyprland.package = hyprlandPkg; + + environment.systemPackages = [ hyprlandPkg ]; + + # Home Manager user configuration + home-manager.users = { + ${username} = { + + home.activation.MakeHyprMutable = { + after = [ "writeBoundary" ]; + before = []; + data = '' + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; + ''; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/stylix.nix b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix new file mode 100644 index 000000000..001e97a2e --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix @@ -0,0 +1,82 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, stylix, ... }: + +let + username = config.defaultUser or "henrov"; + moduleName = "stylix"; + + assetPath = "${flakeRoot}/generated/.config/${moduleName}"; + + 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; + }; + + cursor = { + name = cursorName; + package = pkgs.phinger-cursors; + size = cursorSize; + }; + }; + + ################################# + # Home Manager + ################################# + home-manager.users = { + "${username}" = { + + ################################# + # ONLY custom file (safe) + ################################# + home.file.".config/stylix/stylix.conf" = { + text = stylixConf; + force = true; + }; + + ################################# + # Environment variables + ################################# + home.sessionVariables = { + STYLIX_CONF = "$HOME/.config/stylix/stylix.conf"; + XCURSOR_THEME = cursorName; + XCURSOR_SIZE = toString cursorSize; + HYPRCURSOR_THEME = cursorName; + HYPRCURSOR_SIZE = toString cursorSize; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix b/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix new file mode 100644 index 000000000..7ad199082 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix @@ -0,0 +1,91 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + homeDir = "/home/${username}"; + wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers"; + wallpaperDst = "${homeDir}/Wallpapers"; + randoScript = "${homeDir}/Wallpapers/scripts/randomizeWallpapers.sh"; +in +{ + # Make bash available + environment.systemPackages = [ pkgs.bash pkgs.rsync pkgs.jq pkgs.awww pkgs.waypaper pkgs.socat ]; + + # Create the copy script using Home Manager, following Waybar style + home-manager.users = { + ${username} = { + home.file = { + "copy-wallpapers.sh" = { + text = '' + #!/run/current-system/sw/bin/bash + set -euo pipefail + echo "Running as $(whoami)" + echo "Copying wallpapers from ${wallpaperSrc} to ${wallpaperDst} ..." + if [ ! -d "${wallpaperSrc}" ]; then + echo "ERROR: ${wallpaperSrc} does not exist" + exit 1 + fi + mkdir -p "${wallpaperDst}" + # Simple copy, overwrite everything + cp -r "${wallpaperSrc}/." "${wallpaperDst}/" + # Fix permissions + chmod -R u+rwx "${wallpaperDst}" + echo "Done copying wallpapers." + ''; + executable = true; + force = true; + }; + }; + }; + }; + + # User service to run the script that copies the Wallpaperstuff + systemd.user.services.copyWallpapers = { + description = "Copy wallpapers from repo to ~/Wallpapers"; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${homeDir}/copy-wallpapers.sh"; + Restart = "no"; + WorkingDirectory = homeDir; + }; + wantedBy = [ "default.target" ]; + }; + + # User service to randomize wallpapers + systemd.user.services.randomizeWallpapers = { + description = "Randomize wallpapers in ~/Wallpapers/pictures"; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${randoScript}"; + Restart = "no"; + WorkingDirectory = homeDir; + }; + wantedBy = [ "default.target" ]; + }; + + ############################ + # Random background per workspace at logon + ############################ + + systemd.user.services.workspaceWallpapers = { + description = "Dynamic wallpapers per workspace for Hyprland"; + after = [ "graphical-session.target" ]; + wants = [ "graphical-session.target" ]; + + serviceConfig = { + Type = "simple"; + ExecStart = "${homeDir}/Wallpapers/scripts/workspace-wallpapers.sh"; + Restart = "on-failure"; + RestartSec = 5; + WorkingDirectory = homeDir; + Environment = [ + "HYPRLAND_INSTANCE_SIGNATURE=${builtins.getEnv "HYPRLAND_INSTANCE_SIGNATURE"}" + "WAYLAND_DISPLAY=wayland-1" + "PATH=/run/current-system/sw/bin:/usr/bin:/bin" + ]; + }; + + wantedBy = [ "default.target" ]; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix new file mode 100644 index 000000000..38b363f40 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix @@ -0,0 +1,37 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: +let + username = config.defaultUser or "henrov"; + sysName = "waybar"; + assetPath = "${flakeRoot}/generated/.config/${sysName}"; +in +{ + environment.systemPackages = [ pkgs.waybar ]; + + home-manager.users.${username} = { + home.activation.MakeWaybarMutable = { + after = [ "writeBoundary" ]; + before = []; + data = '' + rm -f $HOME/.config/${sysName}/* + cp ${assetPath}/* $HOME/.config/${sysName}/ + chmod u+w $HOME/.config/${sysName}/* + find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \; + ''; + }; + }; + + systemd.user.services.waybar = { + description = "Waybar for Hyprland"; + after = [ "graphical-session.target" ]; + wantedBy = [ "default.target" ]; + serviceConfig = { + ExecStart = "${pkgs.waybar}/bin/waybar"; + Restart = "always"; + Environment = '' + WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"} + XDG_CURRENT_DESKTOP=Hyprland + ''; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/wayland.nix b/Droidnix/generated/modules/traveldroid/desktop/wayland.nix new file mode 100644 index 000000000..8f64ab119 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/wayland.nix @@ -0,0 +1,25 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, ... }: + +{ + ################################# + # Core Wayland packages + ################################# + environment.systemPackages = with pkgs; [ + wayland + wl-clipboard # optional but commonly used for copy/paste + ]; + + ################################# + # enable graphics stack + ################################# + hardware.graphics.enable = true; + + ################################# + # Optional session variables for Wayland + ################################# + environment.sessionVariables = { + # Forces some apps to use Wayland + NIXOS_OZONE_WL = "1"; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/desktop/xdg.nix b/Droidnix/generated/modules/traveldroid/desktop/xdg.nix new file mode 100644 index 000000000..f8db07b67 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/desktop/xdg.nix @@ -0,0 +1,62 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: +let + username = config.defaultUser or "henrov"; + homeDir = "/home/${username}"; + basePortal = pkgs.xdg-desktop-portal-gtk; + hyprlandPortal = pkgs.xdg-desktop-portal-hyprland; +in +{ + ################################# + # XDG Desktop Portals (system) + ################################# + xdg.portal.enable = true; + xdg.portal.xdgOpenUsePortal = true; + xdg.portal.extraPortals = [ + basePortal + hyprlandPortal + ]; + xdg.portal.config = { + common = { + default = [ "hyprland" "gtk" ]; + }; + hyprland = { + default = [ "hyprland" "gtk" ]; + "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; + "org.freedesktop.impl.portal.Settings" = [ "gtk" ]; + "org.freedesktop.impl.portal.Screencast" = [ "hyprland" ]; + "org.freedesktop.impl.portal.Screenshot" = [ "hyprland" ]; + }; + }; + ################################# + # System packages + ################################# + environment.systemPackages = [ + basePortal + hyprlandPortal + ]; + ################################# + # Home Manager user config + ################################# + home-manager.users.${username} = { + ################################# + # XDG user directories + ################################# + xdg.userDirs = { + enable = true; + createDirectories = true; + desktop = null; + download = "${homeDir}/Downloads"; + documents = "${homeDir}/Documents"; + pictures = "${homeDir}/Pictures"; + music = null; + publicShare = null; + templates = "${homeDir}/Experiments"; + videos = "${homeDir}/Videos"; + extraConfig = { + XDG_PROJECTS_DIR = "${homeDir}/Projects"; + XDG_WORK_DIR = "${homeDir}/Work"; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/audio.nix b/Droidnix/generated/modules/traveldroid/system/audio.nix new file mode 100644 index 000000000..40b701e74 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/audio.nix @@ -0,0 +1,14 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, ... }: + +{ + ############################ + # Audio system + ############################ + environment.systemPackages = with pkgs; [ + pulseaudio # PulseAudio daemon + pavucontrol # GUI mixer + pamixer # CLI mixer + playerctl # Player controls + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/system/avahi.nix b/Droidnix/generated/modules/traveldroid/system/avahi.nix new file mode 100644 index 000000000..09afeee66 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/avahi.nix @@ -0,0 +1,12 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ ... }: +{ + services.avahi = { + enable = true; + nssmdns4 = true; + publish = { + enable = true; + addresses = true; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/bluetooth.nix b/Droidnix/generated/modules/traveldroid/system/bluetooth.nix new file mode 100644 index 000000000..1ca58b81e --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/bluetooth.nix @@ -0,0 +1,19 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, home-manager, ... }: + +let + username = config.defaultUser or "henrov"; +in +{ + + + ############################ + # Bluetooth daemon + ############################ + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + package = pkgs.bluez; + }; + environment.systemPackages = with pkgs; [ blueman ]; +} diff --git a/Droidnix/generated/modules/traveldroid/system/colors.nix b/Droidnix/generated/modules/traveldroid/system/colors.nix new file mode 100644 index 000000000..e3b4b8ac4 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/colors.nix @@ -0,0 +1,69 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: +let + colors = { + border = "#97C9E6"; + crust = "#11111b"; + mantle = "#181825"; + base = "#1e1e2e"; + surface0 = "#313244"; + surface1 = "#45475a"; + surface2 = "#585b70"; + overlay0 = "#6c7086"; + overlay1 = "#7f849c"; + overlay2 = "#9399b2"; + subtext0 = "#a6adc8"; + subtext1 = "#bac2de"; + text = "#cdd6f4"; + rosewater = "#f5e0dc"; + flamingo = "#f2cdcd"; + pink = "#f5c2e7"; + mauve = "#cba6f7"; + red = "#f38ba8"; + maroon = "#eba0ac"; + peach = "#fab387"; + yellow = "#f9e2af"; + green = "#a6e3a1"; + teal = "#94e2d5"; + sapphire = "#74c7ec"; + blue = "#89b4fa"; + lavender = "#b4befe"; + }; + + username = config.defaultUser or "henrov"; + + qmlContent = '' + pragma Singleton + // Catppuccin Mocha Palette - auto-generated, do not edit manually + import QtQuick + QtObject { + readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9) + '' + lib.concatStringsSep "\n" ( + lib.mapAttrsToList (name: value: + " readonly property color ${name}: \"${value}\"" + ) colors + ) + "\n}"; + +in +{ + home-manager.users.${username} = { + home.file = { + ".config/shared/colors.css" = { + source = "${flakeRoot}/generated/.config/shared/colors.css"; + force = true; + }; + ".config/quickshell/Colors.qml" = { + text = qmlContent; + force = true; + }; + ".config/quickshell/powermenu/Colors.qml" = { + text = qmlContent; + force = true; + }; + ".config/quickshell/powermenu/qmldir" = { + text = "singleton Colors 1.0 Colors.qml"; + force = true; + }; + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/copy_scripts.nix b/Droidnix/generated/modules/traveldroid/system/copy_scripts.nix new file mode 100644 index 000000000..5d5c26a13 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/copy_scripts.nix @@ -0,0 +1,33 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: +let + username = config.defaultUser or "henrov"; + configPath = flakeRoot + "/generated/.config/scripts"; + allFiles = lib.filesystem.listFilesRecursive configPath; + + toRelative = file: + let + base = toString flakeRoot + "/generated/"; + relative = lib.removePrefix base (toString file); + in + builtins.unsafeDiscardStringContext relative; + + isShellScript = file: + lib.hasSuffix ".sh" (toString file); + + toFileEntry = file: { + name = toRelative file; + value = { + source = file; + executable = isShellScript file; + force = true; + }; + }; +in +{ + home-manager.users = { + ${username} = { + home.file = builtins.listToAttrs (map toFileEntry allFiles); + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/dbus.nix b/Droidnix/generated/modules/traveldroid/system/dbus.nix new file mode 100644 index 000000000..98db4ded2 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/dbus.nix @@ -0,0 +1,19 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ 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 +} diff --git a/Droidnix/generated/modules/traveldroid/system/firewall.nix b/Droidnix/generated/modules/traveldroid/system/firewall.nix new file mode 100644 index 000000000..9d9bd87e3 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/firewall.nix @@ -0,0 +1,73 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ pkgs, ... }: + +{ + # Use nftables as the firewall backend + networking.nftables.enable = true; + + networking.firewall = { + enable = true; + + filterForward = false; # don't filter forwarded traffic + # outbound is allowed by default UNLESS you've set: + + # LAN-only ports — Wi-Fi interface + interfaces."wlan0" = { + allowedTCPPorts = [ + 22 # SSH + 80 # allow HTTP globally for outbound + 443 # allow HTTPS globally for outbound + 631 # CUPS / IPP network printing + 9100 # AppSocket/JetDirect printing + 6566 # SANE network scanner + 57621 # Spotify Connect + 57622 # Spotify local file sync + ]; + allowedTCPPortRanges = [ + { from = 1714; to = 1764; } # KDE Connect + ]; + allowedUDPPorts = [ + 5353 # mDNS / Avahi (printer + device discovery) + 631 # CUPS / IPP + 67 # DHCP + 123 # NTP time sync + 1900 # UPnP device discovery + 57621 # Spotify Connect + ]; + allowedUDPPortRanges = [ + { from = 1714; to = 1764; } # KDE Connect + ]; + }; + + # LAN-only ports — ethernet (ready for when you plug in) + interfaces."enp0s31f6" = { + allowedTCPPorts = [ + 631 # CUPS / IPP network printing + 9100 # AppSocket/JetDirect printing + 6566 # SANE network scanner + 57621 # Spotify Connect + 57622 # Spotify local file sync + ]; + allowedTCPPortRanges = [ + { from = 1714; to = 1764; } # KDE Connect + ]; + allowedUDPPorts = [ + 5353 # mDNS / Avahi (printer + device discovery) + 631 # CUPS / IPP + 67 # DHCP + 123 # NTP time sync + 1900 # UPnP device discovery + 57621 # Spotify Connect + ]; + allowedUDPPortRanges = [ + { from = 1714; to = 1764; } # KDE Connect + ]; + }; + }; + + # CLI tool for temporary rule changes without rebuilding + # Usage: sudo nixos-firewall-tool open tcp 8080 + environment.systemPackages = with pkgs; [ + nixos-firewall-tool + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/system/gnome-keyring.nix b/Droidnix/generated/modules/traveldroid/system/gnome-keyring.nix new file mode 100644 index 000000000..30a2d016c --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/gnome-keyring.nix @@ -0,0 +1,40 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ config, pkgs, ... }: + +{ + ################################################## + # Core services + ################################################## + + # Enable GNOME Keyring + services.gnome.gnome-keyring.enable = true; + + ################################################## + # PAM (auto unlock keyring on login) + ################################################## + + security.pam.services = { + login.enableGnomeKeyring = true; + greetd.enableGnomeKeyring = true; + sddm.enableGnomeKeyring = true; + gdm.enableGnomeKeyring = true; + }; + + ################################################## + # Environment packages + ################################################## + + environment.systemPackages = with pkgs; [ + polkit_gnome + seahorse + libsecret + ]; + + ################################################## + # Security / Polkit + ################################################## + + security.polkit.enable = true; + + +} diff --git a/Droidnix/generated/modules/traveldroid/system/hypridle.nix b/Droidnix/generated/modules/traveldroid/system/hypridle.nix new file mode 100644 index 000000000..29f949d67 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/hypridle.nix @@ -0,0 +1,48 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + basePath = "${flakeRoot}/generated/.config"; + assetPath = "${flakeRoot}/generated/.config/hypr"; +in +{ + ################################# + # Install hypridle system-wide + ################################# + environment.systemPackages = [ pkgs.hypridle ]; + + ################################# + # Deploy config + ################################# + home-manager.users = { + ${username} = { + home.file = { + ".config/hypr/hypridle.conf" = { + text = builtins.readFile "${assetPath}/hypridle.conf"; + force = true; + }; + }; + }; + }; + + ################################# + # Systemd user service + ################################# + systemd.user.services.hypridle = { + description = "Hypridle (Hyprland idle daemon)"; + after = [ "hyprland-session.target" ]; + bindsTo = [ "hyprland-session.target" ]; + serviceConfig = { + ExecStart = "${pkgs.hypridle}/bin/hypridle"; + Restart = "on-failure"; + RestartSec = "5s"; + Environment = [ + "HOME=/home/${username}" + "WAYLAND_DISPLAY=wayland-1" + "XDG_RUNTIME_DIR=/run/user/1000" + ]; + }; + wantedBy = [ "hyprland-session.target" ]; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/hyprlock.nix b/Droidnix/generated/modules/traveldroid/system/hyprlock.nix new file mode 100644 index 000000000..ec215e4a2 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/hyprlock.nix @@ -0,0 +1,49 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: + +let + username = config.defaultUser or "henrov"; + basePath = "${flakeRoot}/generated/.config"; + assetPath = "${flakeRoot}/generated/.config/hypr"; +in +{ + ################################# + # Install hyprlock system-wide + ################################# + environment.systemPackages = [ + pkgs.hyprlock + ]; + + ################################# + # Deploy configuration file + ################################# + home-manager.users = { + ${username} = { + home.file = { + ".config/hypr/hyprlock.conf" = { + text = builtins.readFile "${assetPath}/hyprlock.conf"; + force = true; + }; + }; + }; + }; + + ################################# + # Optional: helper systemd user service (manual start use) + ################################# + systemd.user.services.hyprlock = { + description = "Hyprlock (manual lock session)"; + after = [ "graphical-session.target" ]; + + serviceConfig = { + ExecStart = "${pkgs.hyprlock}/bin/hyprlock"; + Restart = "no"; + Environment = '' + WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"} + XDG_CURRENT_DESKTOP=Hyprland + ''; + }; + + wantedBy = [ ]; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix b/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix new file mode 100644 index 000000000..c83aa4ddb --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix @@ -0,0 +1,39 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ config, pkgs, lib, ... }: +let + tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet"; + sessionsDir = "${pkgs.uwsm}/share/wayland-sessions"; +in +{ + ################################# + # Greetd (tuigreet) + ################################# + services.greetd = { + enable = true; + settings = { + default_session = { + command = '' + ${tuigreetBin} \ + --time \ + --remember \ + --remember-session \ + --sessions ${sessionsDir} \ + --cmd "uwsm start hyprland-uwsm.desktop" + ''; + user = "greeter"; + }; + }; + }; + ################################# + # Fix TTY / boot noise issues + ################################# + systemd.services.greetd.serviceConfig = { + Type = "idle"; + StandardInput = "tty"; + StandardOutput = "tty"; + StandardError = "journal"; + TTYReset = true; + TTYVHangup = true; + TTYVTDisallocate = true; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/networking.nix b/Droidnix/generated/modules/traveldroid/system/networking.nix new file mode 100644 index 000000000..39deab331 --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/networking.nix @@ -0,0 +1,41 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, ... }: + +{ + ################################# + # Networking core + ################################# + networking = { + # Let DHCP be default unless overridden elsewhere + useDHCP = lib.mkDefault true; + + ################################# + # 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; + }; + }; + + ################################# + # System packages + ################################# + environment.systemPackages = [ + pkgs.networkmanager + pkgs.linux-firmware + pkgs.networkmanagerapplet + pkgs.networkmanager_dmenu + # pkgs.iwgtk + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/system/nix.nix b/Droidnix/generated/modules/traveldroid/system/nix.nix new file mode 100644 index 000000000..b33a5585b --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/nix.nix @@ -0,0 +1,18 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, ... }: +{ + nix.settings = { + experimental-features = [ "nix-command" "flakes" ]; + download-buffer-size = 536870912; # 512 MB + cores = 8; + max-jobs = "auto"; + }; + + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 30d"; + }; + + boot.loader.systemd-boot.configurationLimit = 3; +} diff --git a/Droidnix/generated/modules/traveldroid/system/printing.nix b/Droidnix/generated/modules/traveldroid/system/printing.nix new file mode 100644 index 000000000..2c198447a --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/printing.nix @@ -0,0 +1,16 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, ... }: + +{ + ############################ + # Printing system + ############################ + services.printing.enable = true; # enable CUPS printing service + + ############################ + # System packages for GUI management + ############################ + environment.systemPackages = with pkgs; [ + system-config-printer # GUI to manage printers + ]; +} diff --git a/Droidnix/generated/modules/traveldroid/system/quickshell.nix b/Droidnix/generated/modules/traveldroid/system/quickshell.nix new file mode 100644 index 000000000..8edac971a --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/quickshell.nix @@ -0,0 +1,44 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ pkgs, lib, config, flakeRoot, ... }: +let + username = config.defaultUser or "henrov"; + quickshellPath = flakeRoot + "/generated/.config/quickshell"; + allFiles = lib.filesystem.listFilesRecursive quickshellPath; + + toRelative = file: + let + base = toString flakeRoot + "/generated/"; + relative = lib.removePrefix base (toString file); + in + builtins.unsafeDiscardStringContext relative; + + toFileEntry = file: { + name = toRelative file; + value = { + source = file; + force = true; + }; + }; +in +{ + environment.systemPackages = with pkgs; [ + quickshell + qt6.qtdeclarative + qt6.qttools + qt6.qtsvg + qt6.qtimageformats + qt6.qtmultimedia + qt6.qt5compat + ]; + + qt = { + enable = true; + platformTheme = "qt5ct"; + }; + + home-manager.users = { + ${username} = { + home.file = builtins.listToAttrs (map toFileEntry allFiles); + }; + }; +} diff --git a/Droidnix/generated/modules/traveldroid/system/swaync.nix b/Droidnix/generated/modules/traveldroid/system/swaync.nix new file mode 100644 index 000000000..64f9ba18d --- /dev/null +++ b/Droidnix/generated/modules/traveldroid/system/swaync.nix @@ -0,0 +1,40 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ lib, config, pkgs, flakeRoot, ... }: +let + username = config.defaultUser or "henrov"; + assetPath = "${flakeRoot}/generated/.config/swaync"; +in +{ + environment.systemPackages = [ pkgs.swaynotificationcenter pkgs.libnotify ]; + + home-manager.users.${username} = { + # Do NOT enable services.swaync — it would claim the config files + # and conflict with our home.file entries below. + + home.file = { + ".config/swaync/config.json" = { + text = builtins.readFile "${assetPath}/config.json"; + force = true; + }; + ".config/swaync/style.css" = { + text = builtins.replaceStrings ["henrov"] [username] (builtins.readFile "${assetPath}/style.css"); + force = true; + }; + }; + }; + + # Autostart swaync as a systemd user service instead + systemd.user.services.swaync = { + description = "SwayNotificationCenter"; + after = [ "graphical-session.target" ]; + serviceConfig = { + ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync"; + Restart = "always"; + Environment = [ + "WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-1"}" + "XDG_CURRENT_DESKTOP=Hyprland" + ]; + }; + wantedBy = [ "default.target" ]; + }; +} diff --git a/Droidnix/generated/users/henrov.nix b/Droidnix/generated/users/henrov.nix new file mode 100644 index 000000000..a6957600a --- /dev/null +++ b/Droidnix/generated/users/henrov.nix @@ -0,0 +1,49 @@ +# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- +{ 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" "bluetooth" "input" ]; + ignoreShellProgramCheck = true; # <-- avoids the assertion + shell = pkgs.zsh; + }; + + ################################# + # Home Manager user definition + ################################# + home-manager.users = { + ${username} = { + home.username = username; + home.homeDirectory = "/home/${username}"; + home.stateVersion = "26.05"; + + programs.zsh.enable = true; + + home.packages = [ + # add packages here + ]; + + # Activation to ensure the directory is writable + home.activation.fixStylixPermissions = '' + mkdir -p $HOME/.config + chmod -R u+rwx $HOME/.config + ''; + + # Locale and timezone settings + home.sessionVariables = { + LANG = "nl_NL.UTF-8"; + LC_ALL = "nl_NL.UTF-8"; + TZ = "Europe/Amsterdam"; + }; + }; + }; +}