.
-
diff --git a/README.md b/README.md
deleted file mode 120000
index 95cf2af..0000000
--- a/README.md
+++ /dev/null
@@ -1 +0,0 @@
-docs/src/README.md
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e9a047a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,12 @@
+```
+ _____ _ _____ _
+ | __ \ | | | __ \ | |
+ | | | | __ _ ___| |__ | | | | ___ | |_ ___
+ | | | |/ _` / __| '_ \| | | |/ _ \| __/ __|
+ | |__| | (_| \__ \ | | | |__| | (_) | |_\__ \
+ |_____/ \__,_|___/_| |_|_____/ \___/ \__|___/
+
+```
+
+My personal configuration for NixOS/home-manager.
+While not intended to be used by someone else, feel free to do so anyway or use it as a template for your configuration if you wish to.
diff --git a/assets/logo.svg b/assets/logo.svg
deleted file mode 100644
index 7ca00e2..0000000
--- a/assets/logo.svg
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
diff --git a/assets/logo2.png b/assets/logo2.png
deleted file mode 100644
index beeac55..0000000
Binary files a/assets/logo2.png and /dev/null differ
diff --git a/assets/logo2.svg b/assets/logo2.svg
deleted file mode 100644
index 08baa43..0000000
--- a/assets/logo2.svg
+++ /dev/null
@@ -1,238 +0,0 @@
-
-
-
-DashNix DashNix
diff --git a/assets/logo3.svg b/assets/logo3.svg
deleted file mode 100644
index 6076a01..0000000
--- a/assets/logo3.svg
+++ /dev/null
@@ -1,238 +0,0 @@
-
-
-
-DashNix DashNix
diff --git a/assets/rainbow.svg b/assets/rainbow.svg
deleted file mode 100644
index 9f59c7c..0000000
--- a/assets/rainbow.svg
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/base/common_hardware.nix b/base/common_hardware.nix
deleted file mode 100644
index 9f7ccf1..0000000
--- a/base/common_hardware.nix
+++ /dev/null
@@ -1,174 +0,0 @@
-{
- mkDashDefault,
- pkgs,
- config,
- lib,
- hostName,
- modulesPath,
- ...
-}: let
- username = config.conf.username;
-in {
- imports = [
- (modulesPath + "/installer/scan/not-detected.nix")
- ];
-
- wsl.enable = mkDashDefault config.conf.wsl;
-
- # Bootloader.
- boot = lib.mkIf (!config.conf.wsl) {
- consoleLogLevel = mkDashDefault 0;
-
- lanzaboote = lib.mkIf config.conf.secureBoot {
- enable = mkDashDefault true;
- pkiBundle = mkDashDefault "/var/lib/sbctl";
- settings.reboot-for-bitlocker = mkDashDefault true;
- };
-
- loader = {
- systemd-boot = {
- enable =
- if config.conf.secureBoot
- then lib.mkForce false
- else if config.conf.useSystemdBootloader
- then true
- else mkDashDefault false;
- configurationLimit = 5;
- };
- efi.canTouchEfiVariables = mkDashDefault true;
- };
-
- kernelPackages = mkDashDefault pkgs.linuxPackages_latest;
- initrd = {
- verbose = mkDashDefault false;
- availableKernelModules = [
- "nvme"
- "xhci_pci"
- "ahci"
- "usbhid"
- "usb_storage"
- "sd_mod"
- ];
- };
- kernelParams =
- [
- ''resume="PARTLABEL=SWAP"''
- ''quiet''
- ''udev.log_level=3''
- ]
- ++ config.conf.bootParams;
- };
-
- networking = {
- useDHCP = mkDashDefault true;
- networkmanager.enable = mkDashDefault true;
- hostName = mkDashDefault hostName;
- };
-
- time = {
- timeZone = mkDashDefault config.conf.timezone;
- hardwareClockInLocalTime = mkDashDefault config.conf.systemLocalTime;
- };
-
- i18n.defaultLocale = mkDashDefault config.conf.locale;
-
- services = {
- lorri.enable = mkDashDefault true;
- xserver.enable = mkDashDefault true;
- fstrim.enable = mkDashDefault true;
- pulseaudio.enable = mkDashDefault false;
- pipewire = {
- enable = mkDashDefault true;
- alsa = {
- enable = mkDashDefault true;
- support32Bit = mkDashDefault true;
- };
- jack.enable = mkDashDefault true;
- pulse.enable = mkDashDefault true;
- };
- };
-
- nixpkgs.hostPlatform = mkDashDefault config.conf.system;
- nix = {
- gc = {
- automatic = mkDashDefault true;
- dates = mkDashDefault "weekly";
- options = mkDashDefault "--delete-older-than 7d --delete-generations +5";
- };
- settings = {
- trusted-users = [username];
- auto-optimise-store = mkDashDefault true;
-
- builders-use-substitutes = mkDashDefault true;
-
- trusted-substituters = [
- "https://hyprland.cachix.org"
- "https://anyrun.cachix.org"
- "https://oxipaste.cachix.org"
- "https://oxinoti.cachix.org"
- "https://oxishut.cachix.org"
- "https://oxidash.cachix.org"
- "https://oxicalc.cachix.org"
- "https://hyprdock.cachix.org"
- "https://reset.cachix.org"
- "https://dashvim.cachix.org"
- ];
-
- trusted-public-keys = [
- "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
- "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
- "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
- "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
- "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
- "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
- "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
- "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
- "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
- "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
- ];
-
- experimental-features = mkDashDefault "nix-command flakes pipe-operators";
- };
- };
-
- hardware = {
- cpu.${config.conf.cpu}.updateMicrocode =
- mkDashDefault
- config.hardware.enableRedistributableFirmware;
- };
-
- security.rtkit.enable = mkDashDefault true;
-
- environment.variables = {
- XDG_CACHE_HOME = mkDashDefault "$HOME/.cache";
- DIRENV_LOG_FORMAT = mkDashDefault "";
- QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
- };
-
- # allows user change later on
- users = {
- mutableUsers = mkDashDefault true;
- users.${username} = {
- isNormalUser = mkDashDefault true;
- description = mkDashDefault username;
- extraGroups = [
- "networkmanager"
- "wheel"
- "gamemode"
- "docker"
- "vboxusers"
- "video"
- "audio"
- "scanner"
- "lp"
- ];
- packages = with pkgs; [
- home-manager
- xdg-desktop-portal-gtk
- ];
- # this password will only last for the first login
- # e.g. login, then change to whatever else, this also ensures no public hash is available
- password = mkDashDefault "firstlogin";
- };
- };
-}
diff --git a/base/env.nix b/base/env.nix
deleted file mode 100644
index 0eaf068..0000000
--- a/base/env.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- mkDashDefault,
- pkgs,
- config,
- lib,
- ...
-}: {
- environment = {
- variables = {
- GSETTINGS_SCHEMA_DIR = mkDashDefault "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}";
- NEOVIDE_MAXIMIZED = mkDashDefault "0";
- GPG_TTY = mkDashDefault "$(tty)";
- EDITOR = mkDashDefault "neovide --no-fork";
- SUDO_EDITOR = mkDashDefault "neovide --no-fork";
- SCRIPTS = mkDashDefault "$HOME/.config/scripts";
- };
- sessionVariables = {
- NIXOS_OZONE_WL = mkDashDefault "1";
- GOPATH = mkDashDefault "$HOME/.go";
- FLAKE = mkDashDefault config.conf.nixosConfigPath;
- NH_FLAKE = mkDashDefault config.conf.nixosConfigPath;
- };
- };
-}
diff --git a/docs/default.nix b/docs/default.nix
deleted file mode 100644
index 1fd8a1e..0000000
--- a/docs/default.nix
+++ /dev/null
@@ -1,61 +0,0 @@
-# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
-{
- pkgs,
- buildSystems,
- lib,
- ...
-}: let
- makeOptionsDoc = configuration: pkgs.nixosOptionsDoc {options = configuration;};
- generateDocs = obj: ''
- touch src/${obj.fst}.md
- sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md
- '';
- summaryAppend = name: ''
- echo "- [${name}](${name}.md)" >> src/SUMMARY.md
- '';
- system = (buildSystems {root = ../example/.;})."example".options;
- makeOptionsDocPrograms = names: pkgs.nixosOptionsDoc {options = lib.attrByPath (lib.splitString "." names) null system.mods;};
- conf = makeOptionsDoc system.conf;
- basePath = ../modules/programs;
- pathToAttrs = path:
- lib.attrsets.mapAttrsToList (
- name: meta: {
- inherit name;
- inherit meta;
- }
- )
- (builtins.readDir path);
- pathToStrings = path: prefix: let
- mapFn = attrs:
- if attrs.meta == "directory"
- then pathToStrings "${basePath}/${attrs.name}" attrs.name
- else if prefix != ""
- then "${prefix}.${attrs.name}"
- else attrs.name;
- in
- map
- mapFn
- (pathToAttrs path);
- filteredNames = builtins.filter (names: !(lib.strings.hasInfix "default" names)) (
- map (name: lib.strings.removeSuffix ".nix" name) (lib.lists.flatten (pathToStrings basePath ""))
- );
- deduplicatedNames = map (name: lib.strings.splitString "." name |> lib.lists.unique |> lib.strings.concatStringsSep ".") filteredNames;
- mods = map makeOptionsDocPrograms deduplicatedNames;
- docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists deduplicatedNames mods));
- summary = lib.strings.concatStringsSep " " (map summaryAppend deduplicatedNames);
-in
- pkgs.stdenvNoCC.mkDerivation {
- name = "dashNix-book";
- src = ./.;
-
- patchPhase = ''
- sed '/*Declared by:*/,/^$/d' <${conf.optionsCommonMark} >> src/conf.md
- ${docs}
- echo "[README](README.md)\n # Options\n - [Base Config](conf.md)" >> src/SUMMARY.md
- ${summary}
- '';
-
- buildPhase = ''
- ${pkgs.mdbook}/bin/mdbook build --dest-dir $out
- '';
- }
diff --git a/docs/src/README.md b/docs/src/README.md
deleted file mode 100644
index 3658e00..0000000
--- a/docs/src/README.md
+++ /dev/null
@@ -1,329 +0,0 @@
-
-
-
-
-
-
-An opinionated flake to bootstrap NixOS systems with default configurations for various programs and services from both NixOS and HomeManager which can be enabled, disabled, configured or replaced at will.
-
-# Usage
-
-This flake is intended to be used as an input to your own NixOS configuration:
-
-```nix
-dashNix = {
- url = "github:Xetibo/DashNix";
- inputs = {
- # ensure these are here to update the packages on your own
- nixpkgs.follows = "nixpkgs";
- stable.follows = "stable";
- };
-};
-```
-
-You can then configure your systems in your flake outputs with a provided library command:
-
-Please note that overriding inputs will invalidate the cache configuration, this means you will have to add this manually:
-
-```nix
- builders-use-substitutes = true;
-
- extra-substituters = [
- "https://hyprland.cachix.org"
- "https://anyrun.cachix.org"
- "https://cache.garnix.io"
- "https://oxipaste.cachix.org"
- "https://oxinoti.cachix.org"
- "https://oxishut.cachix.org"
- "https://oxidash.cachix.org"
- "https://oxicalc.cachix.org"
- "https://hyprdock.cachix.org"
- "https://reset.cachix.org"
- "https://dashvim.cachix.org"
- ];
-
- extra-trusted-public-keys = [
- "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
- "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
- "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
- "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
- "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
- "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
- "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
- "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
- "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
- "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
- "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
- ];
-```
-
-```nix
-nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems { root = ./.; };
-```
-
-This command will build each system that is placed within the hosts/ directory.
-In this directory create one directory for each system you want to configure with DashNix.
-This will automatically pick up the hostname for the system and look for 3 different files that are explained below.
-(Optionally, you can also change the parameter root (./.) to define a different starting directory than hosts/)
-
-In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration.
-The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional)
-
-|- flake.nix\
-|- flake.lock\
-|- hosts/\
-|--- system1/\
-|------ configuration.nix (required)\
-|------ hardware.nix (optional)\
-|------ home.nix (optional)\
-|--- system2/\
-|------ configuration.nix (required)\
-|------ hardware.nix (optional)\
-|------ home.nix (optional)\
-|--- system3/\
-|------ configuration.nix (required)\
-|------ hardware.nix (optional)\
-|------ home.nix (optional)
-
-Here is a minimal required configuration.nix (the TODOs mention a required change):
-
-```nix
-{config, ...}: {
- # TODO denote important changes
-
- # variables for system
- conf = {
- # TODO your username
- username = "YOURNAME";
- # TODO only needed when you use intel -> amd is default
- # cpu = "intel";
- # TODO your xkb layout
- locale = "something.UTF-8";
- # TODO your timezone
- timezone = "CONTINENT/CITY";
- };
-
- # modules
- mods = {
- # default disk config has root home boot and swap partition, overwrite if you want something different
- sops.enable = false;
- nextcloud.enable = false;
- wm.monitors = [
- # Example
- # {
- # name = "DP-1";
- # resolutionX = 3440;
- # resolutionY = 1440;
- # refreshrate = 180;
- # positionX = 2560;
- # positionY = 0;
- # scale = 1;
- # transform = "0";
- # vrr = false;
- # }
- ];
- gpu.nvidia.enable = true;
- kdeConnect.enable = true;
- # login manager:
- # default is greetd
- # greetd = { };
- # sddm = { };
- # gdm = { };
- drives = {
- # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist
- # for an example without HOME see below
- # defaultDrives.enable = false;
- # extraDrives = [
- # {
- # name = "boot";
- # drive = {
- # device = "/dev/disk/by-label/BOOT";
- # fsType = "vfat";
- # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ];
- # };
- # }
- # {
- # name = "";
- # drive = {
- # device = "/dev/disk/by-label/ROOT";
- # fsType = "ext4";
- # options = [ "noatime" "nodiratime" "discard" ];
- # };
- # }
- # ];
- # You can also use disko to format your disks on installation.
- # Please refer to the Documentation about the drives module for an example.
- };
- };
-}
-```
-
-## First Login
-
-After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like.
-
-## Configuring pkgs
-
-While DashNix offers a default pkgs config, you may want to permit an unsecure packages,
-add additional modules/inputs, or add an overlay to them.
-You can configure both stable and unstable pkgs the following way:
-
-Please note that modules and inputs are merged together to ensure functionality.
-
-```nix
-currentSystem = "x86_64-linux";
-permittedPackages = [
- "some package"
-];
-config = {
- system = currentSystem;
- config = {
- allowUnfree = true;
- permittedInsecurePackages = permittedPackages;
- };
- inputs = {
- # Some inputs
- }
- mods = {
- home = [
- # Some home manager module
- ];
- nixos = [
- # Some nixos module
- ];
-}
-};
-unstableBundle = {
- pkgs = inputs.unstable;
- inherit config mods;
-};
-inputs.dashNix.dashNixLib.buildSystems {
- root = ./.;
- inherit unstableBundle;
-}
-```
-
-With this you could also change your input to something different should you wish to do so.
-Note that overriding inputs via the flake still works,
-this way however ensures you can also configure the inputs.
-
-## Stable/Unstable
-
-Sometimes you want to differentiate between systems that are stable and unstable, e.g. for servers and desktops/laptops.
-This can be done with the overridePkgs flag for the lib function:
-
-(overridePkgs simply inverts the default bundle that is used for the nix standard library as well as NixOS itself)
-
-```nix
-nixosConfigurations =
- inputs.dashNix.dashNixLib.buildSystems {
- root = ./stable;
- inherit stableBundle;
- overridePkgs = true;
- }
- // inputs.dashNix.dashNixLib.buildSystems {
- inherit unstableBundle;
- root = ./unstable;
- };
-```
-
-You can now place your systems in the respective directories.
-Keep in mind that the hosts directory will still need to exist in each variant.
-E.g. stable/hosts/yourserver and unstable/hosts/yourdesktop
-
-# Installation via ISO
-
-You can find a custom ISO in the releases: [Link](https://github.com/Xetibo/DashNix/releases).
-With this, you will receive the example config in /iso/example alongside the gnome desktop environment,
-as well as a few tools like gnome-disks, Neovim, Vscodium, a browser etc.
-
-Alternatively, you can use whatever NixOS installer and just install your config from there, just make sure to set the drive configuration before.
-
-## Commands
-
-First, copy the read-only config from /iso/example-config to a location of your choice.
-
-```sh
-cp /iso/example-config ~/config -r
-```
-
-Then configure as you please and choose a command below depending on your disk installation variant.
-
-Installation via manual configuration:
-
-```sh
-sudo nixos-install --flake # --root --option experimental-features "nix-command flakes pipe-operators"
-#example
-#nixos-install --flake ~/config#globi --root /mnt --option experimental-features "nix-command flakes pipe-operators"
-```
-
-Installation via disko:
-
-```sh
-sudo disko-install --flake # --disk --option experimental-features "nix-command flakes pipe-operators"
-#example
-#disko-install -- --flake ~/config#globi --disk main /dev/nvme0n1 --option experimental-features "nix-command flakes pipe-operators"
-```
-
-# Installation via flake
-
-If you already have nix installed, you can instead just copy the default config onto your system and install DashNix with it.
-To create the example config for a base to start with, you can just run this flake with the mkFlake command:
-
-```sh
-nix run github:Xetibo/DashNix#mkFlake
-```
-
-This command will put the default configuration into $HOME/gits/nixos
-
-# Modules
-
-This configuration features several modules that can be used as preconfigured "recipies".
-These modules attempt to combine the home-manager and nixos packages/options to one single configuration file for each new system.
-For package lists, please check the individual modules, as the lists can be long.
-
-- Hyprland: Installs and configures Hyprland with various additional packages
-- Niri: Installs and configures Niri with various additional packages
-- acpid : Enables the acpid daemon
-- base packages : A list of system packages to be installed by default
-- bluetooth : Configures/enables bluetooth and installs tools for bluetooth
-- coding packages : A list of coding packages to be installed by default
-- drives : A drive configuration module
-- firefox: Enables and configures firefox (extensions and settings)
-- fish: Enables and configures fish shell
-- gaming : Configures gaming related features (launchers, gamemode)
-- git : Git key and config module
-- gnome_services : Gnome services for minimal enviroments -> Window managers etc
-- gpu : GPU settings (AMD)
-- greetd : Enables and configures the greetd/regreet login manager with Hyprland
-- home packages : A list of home packages to be installed by default
-- kde_connect : Enables KDE connect and opens its ports
-- keepassxc : Configures keepassxc
-- kitty: Enables and configures kitty terminal
-- layout : Modules to configure keyboard layout system wide
-- media packages : A list of media packages to be installed by default
-- mime: Mime type configuration
-- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud)
-- oxi: My own programs, can be selectively disabled, or as a whole
-- piper : Installs and enables piper alongside its daemon
-- plymouth: enable or disable plymouth
-- printing : Enables and configures printing services
-- scripts: Various preconfigured scripts with the ability to add more
-- sops: Enables sops-nix
-- starship : Configures the starship prompt
-- stylix : Configures system themes, can also be applied to dashvim if used.
-- teams: For the poor souls that have to use this....
-- virtualbox : Enables and configures virtualbox
-- xkb: Keyboard layout configuration
-- xone : Installs the xone driver
-- yazi: Installs yazi and sets custom keybinds
-
-# Credits
-
-- [Fufexan](https://github.com/fufexan) for the xdg-mime config:
-- [Catppuccin](https://github.com/catppuccin) for base16 colors and zen-browser css
-- [Danth](https://github.com/danth) for providing a base for the nix docs
-- [chermnyx](https://github.com/chermnyx) for providing a base for zen configuration
-- [voronind-com](https://github.com/voronind-com) for providing the darkreader configuration
-- [Nix-Artwork](https://github.com/NixOS/nixos-artwork/tree/master/logo) for the Nix/NixOS logo (Tim Cuthbertson (@timbertson))
-- [xddxdd](https://github.com/xddxdd) for the CachyOS-Kernel flake
diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/src/coding.md b/docs/src/coding.md
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/src/conf.md b/docs/src/conf.md
deleted file mode 100755
index aa51f0b..0000000
--- a/docs/src/conf.md
+++ /dev/null
@@ -1 +0,0 @@
-# This file handles the basic configuration for settings like language, timezone, input, cpu etc.
diff --git a/docs/src/logo.svg b/docs/src/logo.svg
deleted file mode 100644
index 08baa43..0000000
--- a/docs/src/logo.svg
+++ /dev/null
@@ -1,238 +0,0 @@
-
-
-
-DashNix DashNix
diff --git a/docs/src/mods.md b/docs/src/mods.md
deleted file mode 100755
index df7fe4f..0000000
--- a/docs/src/mods.md
+++ /dev/null
@@ -1 +0,0 @@
-# This file handles configuration of individual modules.
diff --git a/example/flake.nix b/example/flake.nix
deleted file mode 100644
index 01ec944..0000000
--- a/example/flake.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- description = "some dots";
-
- inputs = {
- nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
- stable.url = "github:NixOs/nixpkgs/nixos-24.05";
- dashNix = {
- url = "github:Xetibo/DashNix";
- inputs = {
- nixpkgs.follows = "nixpkgs";
- stable.follows = "stable";
- };
- };
- };
-
- outputs = inputs: {
- nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems {root = ./.;};
- };
-
- nixConfig = {
- builders-use-substitutes = true;
-
- extra-substituters = [
- "https://hyprland.cachix.org"
- "https://anyrun.cachix.org"
- "https://cache.garnix.io"
- "https://oxipaste.cachix.org"
- "https://oxinoti.cachix.org"
- "https://oxishut.cachix.org"
- "https://oxidash.cachix.org"
- "https://oxicalc.cachix.org"
- "https://hyprdock.cachix.org"
- "https://reset.cachix.org"
- "https://dashvim.cachix.org"
- ];
-
- extra-trusted-public-keys = [
- "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
- "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
- "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
- "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
- "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
- "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
- "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
- "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
- "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
- "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
- "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
- ];
- };
-}
diff --git a/example/hosts/example/configuration.nix b/example/hosts/example/configuration.nix
deleted file mode 100644
index dbe8cd0..0000000
--- a/example/hosts/example/configuration.nix
+++ /dev/null
@@ -1,68 +0,0 @@
-{config, ...}: {
- # TODO denote important changes
-
- # variables for system
- conf = {
- # TODO your username
- username = "exampleName";
- # TODO only needed when you use intel -> amd is default
- # cpu = "intel";
- # TODO your xkb layout
- locale = "en_US.UTF-8";
- # TODO your timezone
- timezone = "Europe/Zurich";
- };
-
- # modules
- mods = {
- # default disk config has root home boot and swap partition, overwrite if you want something different
- sops.enable = false;
- nextcloud.enable = false;
- wm.monitors = [
- # Example
- # {
- # name = "DP-1";
- # resolutionX = 3440;
- # resolutionY = 1440;
- # refreshrate = 180;
- # positionX = 2560;
- # positionY = 0;
- # scale = 1;
- # transform = "0";
- # vrr = false;
- # }
- ];
- gpu.nvidia.enable = true;
- kdeConnect.enable = true;
- # login manager:
- # default is greetd
- # greetd = { };
- # sddm = { };
- # gdm = { };
- drives = {
- # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist
- # for an example without HOME see below
- # defaultDrives.enable = false;
- # extraDrives = [
- # {
- # name = "boot";
- # drive = {
- # device = "/dev/disk/by-label/BOOT";
- # fsType = "vfat";
- # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ];
- # };
- # }
- # {
- # name = "";
- # drive = {
- # device = "/dev/disk/by-label/ROOT";
- # fsType = "ext4";
- # options = [ "noatime" "nodiratime" "discard" ];
- # };
- # }
- # ];
- # You can also use disko to format your disks on installation.
- # Please refer to the Documentation about the drives module for an example.
- };
- };
-}
diff --git a/example/hosts/example/hardware.nix b/example/hosts/example/hardware.nix
deleted file mode 100644
index 855cafb..0000000
--- a/example/hosts/example/hardware.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- # this file adds custom NixOS configuration
-}
diff --git a/example/hosts/example/home.nix b/example/hosts/example/home.nix
deleted file mode 100644
index e011ea7..0000000
--- a/example/hosts/example/home.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- # this file adds custom home-manager configuration
-}
diff --git a/example/secrets/secrets.md b/example/secrets/secrets.md
deleted file mode 100644
index 86d99c6..0000000
--- a/example/secrets/secrets.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Secrets
-
-This file is for sops-nix and is also where your keys for various secrets will be stored.
diff --git a/example/secrets/secrets.yaml b/example/secrets/secrets.yaml
deleted file mode 100644
index e69de29..0000000
diff --git a/flake.nix b/flake.nix
deleted file mode 100644
index be1d5c2..0000000
--- a/flake.nix
+++ /dev/null
@@ -1,113 +0,0 @@
-{
- description = "DashNix";
-
- inputs = {
- unstable.url = "github:NixOs/nixpkgs/nixos-unstable";
- stable.url = "github:NixOs/nixpkgs/nixos-25.05";
- nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
- nur.url = "github:nix-community/NUR";
- lanzaboote = {
- url = "github:nix-community/lanzaboote/v0.4.2";
- inputs.nixpkgs.follows = "unstable";
- };
- statix.url = "github:oppiliappan/statix?ref=master";
- # Darkreader requires es20, hence a stable pin
- pkgsDarkreader.url = "github:NixOs/nixpkgs/nixos-24.11";
-
- home-manager = {
- url = "github:nix-community/home-manager";
- inputs.nixpkgs.follows = "unstable";
- };
- cachy.url = "github:xddxdd/nix-cachyos-kernel?rev=bb7b8aa687464f24dcd452354d9621331d6b0737";
-
- sops-nix.url = "github:Mic92/sops-nix";
-
- hyprland.url = "github:hyprwm/Hyprland";
-
- ironbar = {
- url = "github:JakeStanger/ironbar";
- inputs.nixpkgs.follows = "unstable";
- };
-
- zen-browser.url = "github:youwen5/zen-browser-flake";
-
- stylix.url = "github:danth/stylix";
- base16.url = "github:SenchoPens/base16.nix";
- disko.url = "github:nix-community/disko/latest";
-
- anyrun.url = "github:Kirottu/anyrun";
- oxicalc.url = "github:Xetibo/OxiCalc";
- oxishut.url = "github:Xetibo/OxiShut";
- oxinoti.url = "github:Xetibo/OxiNoti";
- oxidash.url = "github:Xetibo/OxiDash";
- oxipaste.url = "github:Xetibo/OxiPaste";
- oxirun.url = "github:Xetibo/OxiRun";
- dashvim.url = "github:Xetibo/DashVim";
-
- hyprdock.url = "github:Xetibo/hyprdock";
- reset.url = "github:Xetibo/ReSet";
- reset-plugins.url = "github:Xetibo/ReSet-Plugins";
-
- superfreq.url = "github:NotAShelf/superfreq";
-
- compose.url = "github:garnix-io/nixos-compose";
- };
-
- outputs = {self, ...} @ inputs: let
- currentSystem = "x86_64-linux";
- permittedPackages = [
- "olm-3.2.16"
- ];
- importPkgsFn = import ./lib/importPkgs.nix;
- defaultConfigureFn = pkgs:
- importPkgsFn {
- inherit inputs currentSystem permittedPackages pkgs;
- };
- stable = defaultConfigureFn inputs.stable;
- unstable = defaultConfigureFn inputs.unstable;
- pkgsDarkreader = defaultConfigureFn inputs.pkgsDarkreader;
- in rec {
- dashNixLib = import ./lib {
- inherit
- self
- inputs
- unstable
- permittedPackages
- ;
- dashNixAdditionalProps = {
- inherit pkgsDarkreader;
- };
- system = currentSystem;
- };
- docs = import ./docs {
- inherit inputs;
- pkgs = unstable;
- system = currentSystem;
- inherit (inputs.unstable) lib;
- inherit (dashNixLib) buildSystems;
- };
- lint = inputs.statix.packages.${currentSystem}.default;
- format = unstable.alejandra;
- dashNixInputs = inputs;
- stablePkgs = stable;
- unstablePkgs = unstable;
- modules = ./modules;
- iso = dashNixLib.buildIso.config.system.build.isoImage;
- nixosConfigurations = dashNixLib.buildSystems {root = ./example/.;};
-
- mkFlake = stablePkgs.writeShellApplication {
- name = "Create example config";
- text =
- /*
- bash
- */
- ''
- mkdir -p ~/gits/nixos
- mkdir -p ~/gits/backup_nixos
-
- mv ~/gits/nixos/* ~/gits/backup_nixos/
- cp -r ${./example}/* ~/gits/nixos/
- '';
- };
- };
-}
diff --git a/home/common.nix b/home/common.nix
deleted file mode 100644
index fe2fa53..0000000
--- a/home/common.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- pkgs,
- ...
-}: let
- username = config.conf.username;
-in {
- manual = {
- html.enable = mkDashDefault false;
- json.enable = mkDashDefault false;
- manpages.enable = mkDashDefault false;
- };
-
- fonts.fontconfig.enable = mkDashDefault true;
-
- home = {
- username = mkDashDefault username;
- homeDirectory = mkDashDefault "/home/${username}";
- sessionPath = ["$HOME/.cargo/bin"];
-
- enableNixpkgsReleaseCheck = mkDashDefault false;
- sessionVariables = {
- GOROOT = mkDashDefault "$HOME/.go";
- QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
- };
-
- keyboard = mkDashDefault null;
- };
-
- programs.nix-index = {
- enable = mkDashDefault true;
- enableFishIntegration = mkDashDefault true;
- };
-
- nix = {
- extraOptions = lib.mkIf (config ? sops.secrets && config.sops.secrets ? access.path) ''
- !include ${config.sops.secrets.access.path}
- '';
- };
-}
diff --git a/home/default.nix b/home/default.nix
deleted file mode 100644
index afc0ab3..0000000
--- a/home/default.nix
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- mkDashDefault,
- dashNixAdditionalProps,
- config,
- homeMods,
- inputs,
- lib,
- additionalHomeConfig,
- mod,
- pkgs,
- root,
- alternativePkgs,
- system,
- stable,
- unstable,
- ...
-}: {
- xdg = {
- portal.config.common = {
- default = mkDashDefault "hyprland;gtk";
- "org.freedesktop.impl.portal.FileChooser" = lib.mkIf (config.mods.media.filePickerPortal != "Default") "shana";
- };
- portal = {
- enable = mkDashDefault true;
- extraPortals = with pkgs; [
- xdg-desktop-portal-gtk # prob needed either way
- (lib.mkIf (config.mods.media.filePickerPortal != "Default") xdg-desktop-portal-shana)
- (lib.mkIf (config.mods.media.filePickerPortal == "Kde") kdePackages.xdg-desktop-portal-kde)
- # Gnome uses their file manager, kinda cool tbh
- (lib.mkIf (config.mods.media.filePickerPortal == "Gnome" && !config.mods.nautilus.enable) nautilus)
- (lib.mkIf (config.mods.media.filePickerPortal == "Lxqt") xdg-desktop-portal-lxqt)
- (lib.mkIf (config.mods.media.filePickerPortal == "Term") xdg-desktop-portal-termfilechooser)
- ];
- };
- };
- home-manager = {
- useGlobalPkgs = mkDashDefault true;
- useUserPackages = mkDashDefault true;
- extraSpecialArgs = {
- inherit
- inputs
- root
- alternativePkgs
- system
- stable
- unstable
- dashNixAdditionalProps
- ;
- mkDashDefault = import ../lib/override.nix {inherit lib;};
- };
-
- users.${config.conf.username} = {
- disabledModules = ["programs/anyrun.nix"];
- imports =
- [
- ./common.nix
- ./themes
- ./sync.nix
- ../lib/foxwrappers.nix
- ]
- ++ homeMods
- ++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig
- ++ lib.optional (builtins.pathExists mod) mod;
- };
- };
-}
diff --git a/home/sync.nix b/home/sync.nix
deleted file mode 100644
index 38dceea..0000000
--- a/home/sync.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-# derived from NixOS wiki
-{
- config,
- pkgs,
- lib,
- ...
-}: let
- username = config.mods.nextcloud.username;
- password =
- if (config.sops.secrets ? nextcloud.path)
- then config.sops.secrets.nextcloud.path
- else "";
- url = config.mods.nextcloud.url;
- synclist = config.mods.nextcloud.synclist;
-in
- lib.mkIf config.mods.nextcloud.enable {
- systemd.user = {
- services = builtins.listToAttrs (
- map (opts: {
- name = "${opts.name}";
- value = {
- Unit = {
- Description = "Auto sync Nextcloud";
- After = "network-online.target";
- };
- Service = {
- Type = "simple";
- ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'";
- TimeoutStopSec = "180";
- KillMode = "process";
- KillSignal = "SIGINT";
- };
- Install.WantedBy = ["multi-user.target"];
- };
- })
- synclist
- );
- timers = builtins.listToAttrs (
- map (opts: {
- name = "${opts.name}";
- value = {
- Unit.Description = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes";
- Timer.OnBootSec = "1min";
- Timer.OnUnitActiveSec = "60min";
- Install.WantedBy = [
- "multi-user.target"
- "timers.target"
- ];
- };
- })
- synclist
- );
- startServices = true;
- };
- }
diff --git a/home/themes/default.nix b/home/themes/default.nix
deleted file mode 100644
index 9976455..0000000
--- a/home/themes/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- imports = [
- ./qt.nix
- ./kdeglobals.nix
- ./oxiced.nix
- ./firefoxTheme.nix
- ];
-}
diff --git a/home/themes/firefoxTheme.nix b/home/themes/firefoxTheme.nix
deleted file mode 100644
index 0de46f6..0000000
--- a/home/themes/firefoxTheme.nix
+++ /dev/null
@@ -1,327 +0,0 @@
-# css from https://github.com/catppuccin/zen-browser/tree/main/themes
-{
- config,
- inputs,
- pkgs,
- lib,
- ...
-}: let
- # at time of using this here, stylix might not be evaluated yet
- # hence ensure it is by using base16 mkSchemeAttrs
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- userChrome =
- /*
- css
- */
- ''
- /* Catppuccin Mocha Blue userContent.css*/
-
- @media (prefers-color-scheme: dark) {
-
- /* Common variables affecting all pages */
- @-moz-document url-prefix("about:") {
- :root {
- --in-content-page-color: #${scheme.base05} !important;
- --color-accent-primary: #${scheme.base0D} !important;
- --color-accent-primary-hover: rgb(163, 197, 251) !important; // TODO
- --color-accent-primary-active: rgb(138, 153, 250) !important; // TODO
- background-color: #${scheme.base00} !important;
- --in-content-page-background: #${scheme.base00} !important;
- }
-
- }
-
- /* Variables and styles specific to about:newtab and about:home */
- @-moz-document url("about:newtab"), url("about:home") {
-
- :root {
- --newtab-background-color: #${scheme.base00} !important;
- --newtab-background-color-secondary: #${scheme.base02} !important;
- --newtab-element-hover-color: #${scheme.base02} !important;
- --newtab-text-primary-color: #${scheme.base05} !important;
- --newtab-wordmark-color: #${scheme.base05} !important;
- --newtab-primary-action-background: #${scheme.base0D} !important;
- }
-
- .icon {
- color: #${scheme.base0D} !important;
- }
-
- .search-wrapper .logo-and-wordmark .logo {
- //background: url("zen-logo-mocha.svg"), url("https://raw.githubusercontent.com/IAmJafeth/zen-browser/main/themes/Mocha/Blue/zen-logo-mocha.svg") no-repeat center !important; // TODO
- display: inline-block !important;
- height: 82px !important;
- width: 82px !important;
- background-size: 82px !important;
- }
-
- @media (max-width: 609px) {
- .search-wrapper .logo-and-wordmark .logo {
- background-size: 64px !important;
- height: 64px !important;
- width: 64px !important;
- }
- }
-
- .card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title {
- color: #${scheme.base0D} !important;
- }
-
- .top-site-outer .search-topsite {
- background-color: #${scheme.base0D} !important;
- }
-
- .compact-cards .card-outer .card-context .card-context-icon.icon-download {
- fill: #${scheme.base0B} !important;
- }
- }
-
- /* Variables and styles specific to about:preferences */
- @-moz-document url-prefix("about:preferences") {
- :root {
- --zen-colors-tertiary: #${scheme.base01} !important;
- --in-content-text-color: #${scheme.base05} !important;
- --link-color: #${scheme.base0D} !important;
- --link-color-hover: rgb(163, 197, 251) !important; // TODO
- --zen-colors-primary: #${scheme.base02} !important;
- --in-content-box-background: #${scheme.base02} !important;
- --zen-primary-color: #${scheme.base0D} !important;
- }
-
- groupbox , moz-card{
- background: #${scheme.base00} !important;
- }
-
- button,
- groupbox menulist {
- background: #${scheme.base02} !important;
- color: #${scheme.base05} !important;
- }
-
- .main-content {
- background-color: #${scheme.base01} !important;
- }
-
- .identity-color-blue {
- --identity-tab-color: #8aadf4 !important; // TODO
- --identity-icon-color: #8aadf4 !important; // TODO
- }
-
- .identity-color-turquoise {
- --identity-tab-color: #8bd5ca !important; // TODO
- --identity-icon-color: #8bd5ca !important; // TODO
- }
-
- .identity-color-green {
- --identity-tab-color: #${scheme.base0B} !important;
- --identity-icon-color: #${scheme.base0B} !important;
- }
-
- .identity-color-yellow {
- --identity-tab-color: #eed49f !important; // TODO
- --identity-icon-color: #eed49f !important; // TODO
- }
-
- .identity-color-orange {
- --identity-tab-color: #f5a97f !important; // TODO
- --identity-icon-color: #f5a97f !important; // TODO
- }
-
- .identity-color-red {
- --identity-tab-color: #ed8796 !important; // TODO
- --identity-icon-color: #ed8796 !important; // TODO
- }
-
- .identity-color-pink {
- --identity-tab-color: #f5bde6 !important; // TODO
- --identity-icon-color: #f5bde6 !important; // TODO
- }
-
- .identity-color-purple {
- --identity-tab-color: #c6a0f6 !important; // TODO
- --identity-icon-color: #c6a0f6 !important; // TODO
- }
- }
-
- /* Variables and styles specific to about:addons */
- @-moz-document url-prefix("about:addons") {
- :root {
- --zen-dark-color-mix-base: #${scheme.base01} !important;
- --background-color-box: #${scheme.base00} !important;
- }
- }
-
- /* Variables and styles specific to about:protections */
- @-moz-document url-prefix("about:protections") {
- :root {
- --zen-primary-color: #${scheme.base00} !important;
- --social-color: #${scheme.base0E} !important;
- --coockie-color: #${scheme.base08} !important;
- --fingerprinter-color: #${scheme.base0A} !important;
- --cryptominer-color: #${scheme.base07} !important;
- --tracker-color: #${scheme.base0B} !important;
- --in-content-primary-button-background-hover: rgb(81, 83, 05) !important;
- --in-content-primary-button-text-color-hover: #${scheme.base05} !important;
- --in-content-primary-button-background: #${scheme.base03} !important;
- --in-content-primary-button-text-color: #${scheme.base05} !important;
- }
-
-
- .card {
- background-color: #${scheme.base02} !important;
- }
- }
- }
- '';
- userContent =
- /*
- css
- */
- ''
- /* Catppuccin Mocha Blue userChrome.css*/
- @media (prefers-color-scheme: dark) {
-
- :root {
- --zen-colors-primary: #${scheme.base02} !important;
- --zen-primary-color: #${scheme.base0D} !important;
- --zen-colors-secondary: #${scheme.base02} !important;
- --zen-colors-tertiary: #${scheme.base01} !important;
- --zen-colors-border: #${scheme.base0D} !important;
- --toolbarbutton-icon-fill: #${scheme.base0D} !important;
- --lwt-text-color: #${scheme.base05} !important;
- --toolbar-field-color: #${scheme.base05} !important;
- --tab-selected-textcolor: rgb(171, 197, 247) !important; // TODO
- --toolbar-field-focus-color: #${scheme.base05} !important;
- --toolbar-color: #${scheme.base05} !important;
- --newtab-text-primary-color: #${scheme.base05} !important;
- --arrowpanel-color: #${scheme.base05} !important;
- --arrowpanel-background: #${scheme.base00} !important;
- --sidebar-text-color: #${scheme.base05} !important;
- --lwt-sidebar-text-color: #${scheme.base05} !important;
- --lwt-sidebar-background-color: #${scheme.base01} !important; //TODO 11111b !important;
- --toolbar-bgcolor: #${scheme.base02} !important;
- --newtab-background-color: #${scheme.base00} !important;
- --zen-themed-toolbar-bg: #${scheme.base01} !important;
- --zen-main-browser-background: #${scheme.base01} !important;
- }
-
- #permissions-granted-icon{
- color: #${scheme.base01} !important;
- }
-
- .sidebar-placesTree {
- background-color: #${scheme.base00} !important;
- }
-
- #zen-workspaces-button {
- background-color: #${scheme.base00} !important;
- }
-
- #TabsToolbar {
- background-color: #${scheme.base01} !important;
- }
-
- #urlbar-background {
- background-color: #${scheme.base00} !important;
- }
-
- .content-shortcuts {
- background-color: #${scheme.base00} !important;
- border-color: #${scheme.base0D} !important;
- }
-
- .urlbarView-url {
- color: #${scheme.base0D} !important;
- }
-
- #zenEditBookmarkPanelFaviconContainer {
- background: #${scheme.base01} !important;
- }
-
- toolbar .toolbarbutton-1 {
- &:not([disabled]) {
- &:is([open], [checked]) > :is(.toolbarbutton-icon, .toolbarbutton-text, .toolbarbutton-badge-stack){
- fill: #${scheme.base01};
- }
- }
- }
-
- .identity-color-blue {
- --identity-tab-color: #${scheme.base0D} !important;
- --identity-icon-color: #${scheme.base0D} !important;
- }
-
- .identity-color-turquoise {
- --identity-tab-color: #${scheme.base0C} !important;
- --identity-icon-color: #${scheme.base0C} !important;
- }
-
- .identity-color-green {
- --identity-tab-color: #${scheme.base0B} !important;
- --identity-icon-color: #${scheme.base0B} !important;
- }
-
- .identity-color-yellow {
- --identity-tab-color: #${scheme.base0A} !important;
- --identity-icon-color: #${scheme.base0A} !important;
- }
-
- .identity-color-orange {
- --identity-tab-color: #${scheme.base09} !important;
- --identity-icon-color: #${scheme.base09} !important;
- }
-
- .identity-color-red {
- --identity-tab-color: #${scheme.base08} !important;
- --identity-icon-color: #${scheme.base08} !important;
- }
-
- .identity-color-pink {
- --identity-tab-color: #${scheme.base0F} !important;
- --identity-icon-color: #${scheme.base0F} !important; // TODO f5c2e7
- }
-
- .identity-color-purple {
- --identity-tab-color: #${scheme.base0E} !important;
- --identity-icon-color: #${scheme.base0E} !important;
- }
- }
- '';
- browsername = config.mods.homePackages.browser;
- profiles =
- if config.mods.homePackages.browser == "firefox"
- then config.mods.browser.firefox.profiles
- else if config.mods.homePackages.browser == "zen"
- then config.mods.browser.zen.profiles
- else if config.mods.homePackages.browser == "librewolf"
- then [
- {
- name = "default";
- value = {};
- }
- ]
- else [];
- profileNamesFn =
- builtins.catAttrs "name";
- chromesFn = builtins.map (
- name:
- if (builtins.isString browsername)
- then {
- ".${browsername}/${name}/chrome/userContent.css" = {
- text = userChrome;
- };
-
- ".${browsername}/${name}/chrome/userChrome.css" = {
- text = userContent;
- };
- }
- else {}
- );
- moduleFn = lib.lists.foldr (attr1: attr2: attr1 // attr2) {};
- mkFirefoxTheme = profiles:
- profiles
- |> profileNamesFn
- |> chromesFn
- |> moduleFn;
-in {home.file = mkFirefoxTheme profiles;}
diff --git a/home/themes/kdeglobals.nix b/home/themes/kdeglobals.nix
deleted file mode 100644
index 8fa5003..0000000
--- a/home/themes/kdeglobals.nix
+++ /dev/null
@@ -1,252 +0,0 @@
-# This is ABSOLUTE GARGABE, KDE srsly, remove this!
-# props to catppuccin mocha for sparing me from doing this manually: https://github.com/catppuccin/kde/blob/main/Resources/Base.colors
-{
- pkgs,
- config,
- lib,
- inputs,
- ...
-}: let
- base16 = pkgs.callPackage inputs.base16.lib {};
-
- baseScheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- power = number: powerIndex:
- if powerIndex == 1
- then number
- else if powerIndex == 0
- then 1
- else number * power number (powerIndex - 1);
-
- lookupTable = powerIndex: {
- "0" = 0 * (power 16 powerIndex);
- "1" = 1 * (power 16 powerIndex);
- "2" = 2 * (power 16 powerIndex);
- "3" = 3 * (power 16 powerIndex);
- "4" = 4 * (power 16 powerIndex);
- "5" = 5 * (power 16 powerIndex);
- "6" = 6 * (power 16 powerIndex);
- "7" = 7 * (power 16 powerIndex);
- "8" = 8 * (power 16 powerIndex);
- "9" = 9 * (power 16 powerIndex);
- "a" = 10 * (power 16 powerIndex);
- "b" = 11 * (power 16 powerIndex);
- "c" = 12 * (power 16 powerIndex);
- "d" = 13 * (power 16 powerIndex);
- "e" = 14 * (power 16 powerIndex);
- "f" = 15 * (power 16 powerIndex);
- };
-
- convertHex = hexChars:
- recombineColors [
- (convertColor (lib.lists.take 2 hexChars))
- (convertColor (lib.lists.take 2 (lib.lists.drop 2 hexChars)))
- (convertColor (lib.lists.take 2 (lib.lists.drop 4 hexChars)))
- ];
-
- convertColor = color: (lookupTable 1).${(lib.lists.head color)} + (lookupTable 0).${(lib.lists.last color)};
- recombineColors = colors: lib.lists.foldr (a: b: (toString a) + "," + (toString b)) "end" colors;
-
- scheme = {
- base00 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base00)
- );
- base01 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base01)
- );
- base02 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base02)
- );
- base03 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base03)
- );
- base04 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base04)
- );
- base05 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base05)
- );
- base06 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base06)
- );
- base07 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base07)
- );
- base08 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base08)
- );
- base09 = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base09)
- );
- base0A = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base0A)
- );
- base0B = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base0B)
- );
- base0C = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base0C)
- );
- base0D = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base0D)
- );
- base0E = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base0E)
- );
- base0F = lib.strings.removeSuffix ",end" (
- convertHex (lib.strings.stringToCharacters baseScheme.base0F)
- );
- };
-in {
- # temp
- # crust -> surface1
- # subtext0 -> surface2
- # accentColor -> lavender
- xdg.configFile."kdeglobals" = {
- text = ''
- [ColorEffects:Disabled]
- Color=${scheme.base01}
- ColorAmount=0.30000000000000004
- ColorEffect=2
- ContrastAmount=0.1
- ContrastEffect=0
- IntensityAmount=-1
- IntensityEffect=0
-
- [ColorEffects:Inactive]
- ChangeSelectionColor=true
- Color=${scheme.base01}
- ColorAmount=0.5
- ColorEffect=3
- ContrastAmount=0
- ContrastEffect=0
- Enable=true
- IntensityAmount=0
- IntensityEffect=0
-
- [Colors:Button]
- BackgroundAlternate=${scheme.base07}
- BackgroundNormal=${scheme.base02}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundActive=${scheme.base09}
- ForegroundInactive=${scheme.base04}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base05}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [Colors:Complementary]
- BackgroundAlternate=${scheme.base03}
- BackgroundNormal=${scheme.base00}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundActive=${scheme.base09}
- ForegroundInactive=${scheme.base04}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base05}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [Colors:Header]
- BackgroundAlternate=${scheme.base03}
- BackgroundNormal=${scheme.base00}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundActive=${scheme.base09}
- ForegroundInactive=${scheme.base04}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base05}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [Colors:Selection]
- BackgroundAlternate=${scheme.base07}
- BackgroundNormal=${scheme.base07}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundLink=${scheme.base07}
- ForegroundInactive=${scheme.base00}
- ForegroundActive=${scheme.base09}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base03}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [Colors:Tooltip]
- BackgroundAlternate=27,25,35
- BackgroundNormal=${scheme.base01}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundActive=${scheme.base09}
- ForegroundInactive=${scheme.base04}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base05}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [Colors:View]
- BackgroundAlternate=${scheme.base00}
- BackgroundNormal=${scheme.base01}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundActive=${scheme.base09}
- ForegroundInactive=${scheme.base04}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base05}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [Colors:Window]
- BackgroundAlternate=${scheme.base03}
- BackgroundNormal=${scheme.base00}
- DecorationFocus=${scheme.base07}
- DecorationHover=${scheme.base02}
- ForegroundActive=${scheme.base09}
- ForegroundInactive=${scheme.base04}
- ForegroundLink=${scheme.base07}
- ForegroundNegative=${scheme.base08}
- ForegroundNeutral=${scheme.base0A}
- ForegroundNormal=${scheme.base05}
- ForegroundPositive=${scheme.base0B}
- ForegroundVisited=${scheme.base0E}
-
-
- [General]
- ColorScheme=CustomBase16Nix
- Name=CustomBase16Nix
- accentActiveTitlebar=false
- shadeSortColumn=true
-
-
- [KDE]
- contrast=4
-
-
- [WM]
- activeBackground=${scheme.base01}
- activeBlend=${scheme.base05}
- activeForeground=${scheme.base05}
- inactiveBackground=${scheme.base03}
- inactiveBlend=${scheme.base04}
- inactiveForeground=${scheme.base04}
- '';
- };
-}
diff --git a/home/themes/oxiced.nix b/home/themes/oxiced.nix
deleted file mode 100644
index 8a9e7dc..0000000
--- a/home/themes/oxiced.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- config,
- inputs,
- pkgs,
- ...
-}: let
- # at time of using this here, stylix might not be evaluated yet
- # hence ensure it is by using base16 mkSchemeAttrs
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- valueOrDefault = value: fallback:
- if (scheme ? oxiced && scheme.oxiced ? ${value})
- then scheme.oxiced.value
- else fallback;
-in {
- xdg.configFile."oxiced/theme.toml" = {
- source = (pkgs.formats.toml {}).generate "oxiced" {
- base = valueOrDefault "base" scheme.base00;
- mantle = valueOrDefault "mantle" scheme.base01;
- primary_bg = valueOrDefault "primary_bg" scheme.base02;
- secondary_bg = valueOrDefault "secondary_bg" scheme.base03;
- tertiary_bg = valueOrDefault "tertiary_bg" scheme.base04;
- text = valueOrDefault "text" scheme.base05;
-
- primary = valueOrDefault "primary" scheme.base0D;
- primary_contrast = valueOrDefault "primary_contrast" "FFFFFF";
- secondary = valueOrDefault "primary" scheme.base07;
- secondary_contrast = valueOrDefault "secondary_contrast" "FFFFFF";
-
- good = valueOrDefault "good" scheme.base0B;
- good_contrast = valueOrDefault "good_contrast" "000000";
- bad = valueOrDefault "bad" scheme.base08;
- bad_contrast = valueOrDefault "bad_contrast" "FFFFFF";
- warning = valueOrDefault "warning" scheme.base0A;
- warning_contrast = valueOrDefault "warning_contrast" "000000";
- info = valueOrDefault "info" scheme.base0C;
- info_contrast = valueOrDefault "info_contrast" "FFFFFF";
-
- rose = valueOrDefault "rose" scheme.base06;
- lavender = valueOrDefault "lavender" scheme.base07;
- blue = valueOrDefault "blue" scheme.base0D;
- mauve = valueOrDefault "mauve" scheme.base0E;
- flamingo = valueOrDefault "flamingo" scheme.base0F;
-
- border_color_weak = valueOrDefault "border_color_weak" scheme.base05;
- border_color_strong = valueOrDefault "border_color_strong" scheme.base0D;
-
- tint_amount = valueOrDefault "tint_amound" 0.10;
- shade_amount = valueOrDefault "shade_amount" 0.05;
-
- border_radius = valueOrDefault "border_radius" 10;
-
- padding_xs = valueOrDefault "padding_xs" 4.0;
- padding_sm = valueOrDefault "padding_sm" 8.0;
- padding_md = valueOrDefault "padding_md" 12.0;
- padding_lg = valueOrDefault "padding_lg" 16.0;
- padding_xl = valueOrDefault "padding_xl" 24.0;
- padding_xxl = valueOrDefault "padding_xxl" 32.0;
-
- font_sm = valueOrDefault "font_sm" 10.0;
- font_md = valueOrDefault "font_md" 14.0;
- font_lg = valueOrDefault "font_lg" 18.0;
- font_xl = valueOrDefault "font_xl" 24.0;
- font_xxl = valueOrDefault "font_xxl" 32.0;
-
- # legacy compatibility
- name = scheme.scheme;
- inherit (scheme) base00;
- inherit (scheme) base01;
- inherit (scheme) base02;
- inherit (scheme) base03;
- inherit (scheme) base04;
- inherit (scheme) base05;
- inherit (scheme) base06;
- inherit (scheme) base07;
- inherit (scheme) base08;
- inherit (scheme) base09;
- base0a = scheme.base0A;
- base0b = scheme.base0B;
- base0c = scheme.base0C;
- base0d = scheme.base0D;
- base0e = scheme.base0E;
- base0f = scheme.base0F;
- };
- };
-}
diff --git a/iso/configuration.nix b/iso/configuration.nix
deleted file mode 100644
index 9272a65..0000000
--- a/iso/configuration.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- pkgs,
- modulesPath,
- lib,
- self,
- inputs,
- ...
-}: let
- system = "x86_64-linux";
-in {
- imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"];
- nixpkgs.hostPlatform = {
- inherit system;
- };
-
- environment.systemPackages = with pkgs; [
- inputs.dashvim.packages.${system}.minimal
- disko
- git
- firefox
- kitty
- gnome-disk-utility
- inputs.disko.packages.${system}.disko-install
- ];
-
- networking = {
- wireless.enable = false;
- networkmanager.enable = true;
- };
-
- nix.settings.experimental-features = [
- "nix-command"
- "flakes"
- "pipe-operators"
- ];
-
- users.users.nixos = {
- isNormalUser = true;
- password = "nixos";
- extraGroups = ["wheel"];
- };
-
- image.baseName = lib.mkForce "DashNix";
-
- programs = {
- hyprland = {
- enable = true;
- withUWSM = true;
- xwayland.enable = false;
- };
- uwsm.enable = true;
- };
-
- fonts.packages = [pkgs.adwaita-fonts];
- i18n.defaultLocale = "en_US.UTF-8";
-
- services = {
- displayManager.autoLogin = {
- enable = true;
- user = "nixos";
- };
- greetd = {
- enable = true;
- settings = {
- terminal.vt = 1;
- default_session = {
- command = "${lib.getExe pkgs.hyprland}";
- user = "nixos";
- };
- };
- };
- };
-
- isoImage = {
- makeEfiBootable = true;
- makeUsbBootable = true;
- contents = [
- {
- source = "${self}/example";
- target = "example-config";
- }
- ];
- };
-
- system.stateVersion = "25.11";
-}
diff --git a/lib/default.nix b/lib/default.nix
deleted file mode 100644
index d8a7402..0000000
--- a/lib/default.nix
+++ /dev/null
@@ -1,292 +0,0 @@
-{
- inputs,
- unstable,
- self,
- system,
- permittedPackages,
- dashNixAdditionalProps ? {},
- ...
-}: let
- defaultConfig = {
- config = {
- allowUnfree = true;
- permittedInsecurePackages = permittedPackages;
- };
- overlays = [
- inputs.cachy.overlays.default
- inputs.nur.overlays.default
- ];
- inherit system;
- };
- mkPkgs = {
- pkgs,
- config,
- }: let
- overlays =
- if (config ? overlays)
- then config.overlays
- else [];
- comnbinedConfig = config // {overlays = overlays ++ defaultConfig.overlays;};
- in
- import pkgs comnbinedConfig;
-in rec {
- mkNixos = {
- root,
- inputLib,
- lib,
- stablePkgs,
- unstablePkgs,
- stableMods,
- unstableMods,
- overridePkgs,
- ...
- }:
- builtins.listToAttrs (
- map
- (name: {
- inherit name;
- value = let
- mod = root + /hosts/${name}/configuration.nix;
- additionalNixosConfig = root + /hosts/${name}/hardware.nix;
- additionalHomeConfig = root + /hosts/${name}/home.nix;
- args = {
- inherit
- self
- inputs
- mod
- additionalHomeConfig
- system
- root
- dashNixAdditionalProps
- lib
- ;
- stable = stablePkgs;
- unstable = unstablePkgs;
- pkgs = lib.mkForce (
- if overridePkgs
- then stablePkgs
- else unstablePkgs
- );
- alternativePkgs =
- if overridePkgs
- then unstablePkgs
- else stablePkgs;
- hostName = name;
- homeMods =
- if overridePkgs
- then unstableMods.home
- else stableMods.home;
- mkDashDefault = import ./override.nix {inherit lib;};
- };
- nixosMods =
- if overridePkgs
- then unstableMods.nixos
- else stableMods.nixos;
- in
- inputLib.nixosSystem {
- modules =
- [
- {_module.args = args;}
- mod
- ]
- ++ nixosMods
- ++ lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
- ++ lib.optional (builtins.pathExists mod) mod;
- };
- })
- (
- lib.lists.remove "" (
- lib.attrsets.mapAttrsToList (name: fType:
- if fType == "directory"
- then name
- else "") (
- builtins.readDir (root + /hosts)
- )
- )
- )
- );
-
- mkHome = {
- root,
- lib,
- stablePkgs,
- unstablePkgs,
- stableMods,
- unstableMods,
- overridePkgs,
- ...
- }:
- builtins.listToAttrs (
- map
- (name: {
- inherit name;
- value = let
- mod = root + /homes/${name}/configuration.nix;
- additionalHomeConfig = root + /homes/${name}/home.nix;
- args = {
- inherit
- self
- inputs
- mod
- additionalHomeConfig
- system
- root
- dashNixAdditionalProps
- lib
- ;
- stable = stablePkgs;
- unstable = unstablePkgs;
- pkgs = lib.mkForce (
- if overridePkgs
- then stablePkgs
- else unstablePkgs
- );
- alternativePkgs =
- if overridePkgs
- then unstablePkgs
- else stablePkgs;
- userName = name;
- mkDashDefault = import ./override.nix {inherit lib;};
- };
- homeMods =
- if overridePkgs
- then unstableMods.home
- else stableMods.home;
- in
- inputs.home-manager.lib.homeManagerConfiguration
- {
- inherit (args) pkgs;
- modules =
- [
- {_module.args = args;}
- mod
- ]
- ++ homeMods
- ++ [
- ../home/common.nix
- ../home/themes
- ../home/sync.nix
- ./foxwrappers.nix
- ]
- ++ lib.optional (builtins.pathExists mod) mod;
- };
- })
- (
- lib.lists.remove "" (
- lib.attrsets.mapAttrsToList (name: fType:
- if fType == "directory"
- then name
- else "") (
- builtins.readDir (root + /homes)
- )
- )
- )
- );
-
- /*
- *
- # buildSystems
-
- Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well.
-
- A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
-
- The second parameter is the root of your configuration, which should be ./. in most cases.
-
- `root`
-
- : the root path of your configuration
-
- # Example usage
- :::{.example}
- ```nix
- nixosConfigurations = buildSystems { root = ./.; };
- ```
- :::
- */
- # let
- # paths = builtins.readDir ;
- # names = lib.lists.remove "default" (
- # map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
- # );
-
- # in
- buildFunc = func: {
- root,
- unstableBundle ? {},
- stableBundle ? {},
- overridePkgs ? false,
- ...
- }: let
- defaultNixosMods = inputs: [
- inputs.lanzaboote.nixosModules.lanzaboote
- inputs.nixos-wsl.nixosModules.default
- inputs.home-manager.nixosModules.home-manager
- inputs.stylix.nixosModules.stylix
- inputs.disko.nixosModules.disko
- inputs.superfreq.nixosModules.default
- inputs.sops-nix.nixosModules.sops
- ../base
- ../home
- ../modules
- ];
-
- defaultHomeMods = inputs: [
- inputs.anyrun.homeManagerModules.default
- inputs.ironbar.homeManagerModules.default
- inputs.oxicalc.homeManagerModules.default
- inputs.oxishut.homeManagerModules.default
- inputs.oxinoti.homeManagerModules.default
- inputs.oxidash.homeManagerModules.default
- inputs.oxipaste.homeManagerModules.default
- inputs.oxirun.homeManagerModules.default
- inputs.hyprdock.homeManagerModules.default
- inputs.hyprland.homeManagerModules.default
- inputs.reset.homeManagerModules.default
- inputs.sops-nix.homeManagerModules.sops
- inputs.dashvim.homeManagerModules.dashvim
- ../modules
- ];
-
- unstableInput = unstableBundle.pkgs or inputs.unstable;
- stableInput = stableBundle.pkgs or inputs.stable;
- unstableConfig = unstableBundle.config or defaultConfig;
- stableConfig = stableBundle.config or defaultConfig;
- unstableInputs = (unstableBundle.inputs or {}) // inputs;
- stableInputs = (stableBundle.inputs or {}) // inputs;
- unstableMods = {
- home = (defaultHomeMods unstableInputs) ++ (unstableBundle.mods.home or []);
- nixos = (defaultNixosMods unstableInputs) ++ (unstableBundle.mods.nixos or []);
- };
- stableMods = {
- home = (defaultHomeMods stableInputs) ++ (stableBundle.mods.home or []);
- nixos = (defaultNixosMods stableInputs) ++ (stableBundle.mods.nixos or []);
- };
-
- unstablePkgs = mkPkgs {
- pkgs = unstableInput;
- config = unstableConfig;
- };
- stablePkgs = mkPkgs {
- pkgs = stableInput;
- config = stableConfig;
- };
- inputLib = unstableInput.lib;
- inherit (unstablePkgs) lib;
- in
- func {
- inherit lib inputLib stablePkgs unstablePkgs stableMods unstableMods stableInputs unstableInputs root overridePkgs;
- };
-
- buildSystems = buildFunc mkNixos;
- buildHome = buildFunc mkHome;
-
- buildIso = inputs.unstable.lib.nixosSystem {
- specialArgs = {
- inherit self inputs unstable;
- };
- modules = [
- ../iso/configuration.nix
- ];
- };
-}
diff --git a/lib/foxextensions.nix b/lib/foxextensions.nix
deleted file mode 100644
index d2360ad..0000000
--- a/lib/foxextensions.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- lib,
- name,
- ...
-}: let
- mkExtension = id: install_url: {
- ${id} = {
- inherit install_url;
- installation_mode = "normal_installed";
- };
- };
-in {
- options.mods.browser.${name} = {
- darkreader = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to enable darkreader";
- };
- extensions = lib.mkOption {
- default = [
- (mkExtension "uBlock0@raymondhill.net" "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi")
- (mkExtension "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi")
- (mkExtension "{d7742d87-e61d-4b78-b8a1-b469842139fa}" "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi")
- (mkExtension "firefox@ghostery.com" "https://addons.mozilla.org/firefox/downloads/latest/ghostery/latest.xpi")
- (mkExtension "CanvasBlocker@kkapsner.de" "https://addons.mozilla.org/firefox/downloads/latest/canvasblocker/latest.xpi")
- (mkExtension "jid1-KKzOGWgsW3Ao4Q@jetpack" "https://addons.mozilla.org/firefox/downloads/latest/i-dont-care-about-cookies/latest.xpi")
- (mkExtension "keepassxc-browser@keepassxc.org" "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi")
- (mkExtension "@react-devtools" "https://addons.mozilla.org/firefox/downloads/latest/react-devtools/latest.xpi")
- (mkExtension "extension@redux.devtools" "https://addons.mozilla.org/firefox/downloads/latest/reduxdevtools/latest.xpi")
- (mkExtension "{20a9bb38-ed7c-4faf-9aaf-7c5d241fd747}" "https://addons.mozilla.org/firefox/downloads/file/4524699/angular_devtools-1.0.37.xpi")
- (mkExtension "private-relay@firefox.com" "https://addons.mozilla.org/firefox/downloads/latest/private-relay/latest.xpi")
- ];
- example = [
- {
- "78272b6fa58f4a1abaac99321d503a20@proton.me" = {
- install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/proton-pass/latest.xpi";
- installation_mode = "normal_installed";
- };
- }
- ];
- type = with lib.types; listOf anything;
- description = ''
- List of extensions via attrsets:
- ```nix
- # id
- # figure out the id via:
- # nix run github:tupakkatapa/mozid -- 'https://addons.mozilla.org/en/firefox/addon/ublock-origin'
- "uBlock0@raymondhill.net" = {
- # install url
- install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
- # method https://mozilla.github.io/policy-templates/#extensionsettings
- installation_mode = "force_installed";
- };
- ```
- '';
- };
- };
-}
diff --git a/lib/foxwrappers.nix b/lib/foxwrappers.nix
deleted file mode 100644
index e5c39a7..0000000
--- a/lib/foxwrappers.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-# https://github.com/0xc000022070/zen-browser-flake/issues/9#issuecomment-2711057434
-{inputs, ...}: let
- mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix";
-in {
- imports = [
- (mkFirefoxModule {
- modulePath = [
- "programs"
- "zen-browser"
- ];
- name = "Zen Browser";
- wrappedPackageName = "zen";
- unwrappedPackageName = "zen-unwrapped";
- visible = true;
- platforms = {
- linux = {
- vendorPath = ".zen";
- configPath = ".zen";
- };
- darwin = {
- configPath = "Library/Application Support/Zen";
- };
- };
- })
- (mkFirefoxModule {
- modulePath = [
- "programs"
- "librewolf-dashnix"
- ];
- name = "LibreWolf";
- description = "LibreWolf is a privacy enhanced Firefox fork.";
- wrappedPackageName = "librewolf";
- unwrappedPackageName = "librewolf-unwrapped";
-
- platforms.linux = {configPath = ".librewolf";};
- platforms.darwin = {
- configPath = "Library/Application Support/LibreWolf";
- };
-
- enableBookmarks = false;
- })
- ];
-}
diff --git a/lib/importPkgs.nix b/lib/importPkgs.nix
deleted file mode 100644
index cfcd413..0000000
--- a/lib/importPkgs.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- inputs,
- currentSystem,
- permittedPackages,
- pkgs,
-}:
-import pkgs {
- system = currentSystem;
- config = {
- allowUnfree = true;
- permittedInsecurePackages = permittedPackages;
- };
- overlays = [
- inputs.nur.overlays.default
- inputs.cachy.overlays.default
- ];
-}
diff --git a/lib/override.nix b/lib/override.nix
deleted file mode 100644
index 4d222f8..0000000
--- a/lib/override.nix
+++ /dev/null
@@ -1 +0,0 @@
-{lib, ...}: value: lib.mkOverride 999 value
diff --git a/lib/wm.nix b/lib/wm.nix
deleted file mode 100644
index 416956a..0000000
--- a/lib/wm.nix
+++ /dev/null
@@ -1,446 +0,0 @@
-let
- browserName = config:
- if (builtins.isString config.mods.homePackages.browser)
- then config.mods.homePackages.browser
- else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram
- then config.mods.homePackages.browser.meta.mainProgram
- else config.mods.homePackages.browser.pname;
- mkSimpleBind = modKeys: key: command: args: {
- inherit modKeys key command args;
- };
- mkRepeatSimpleBind = modKeys: key: command: args: {
- inherit modKeys key command args;
- meta.hyprland.repeat = true;
- };
- mkSimpleCustomBind = modKeys: key: niri: hyprland: args: {
- inherit modKeys key args;
- command = {
- inherit niri hyprland;
- };
- };
- mkRepeatCustomBind = modKeys: key: niri: hyprland: args: {
- inherit modKeys key args;
- command = {
- inherit niri hyprland;
- };
- meta.hyprland.repeat = true;
- };
- mkBindWithDesc = modKeys: key: command: args: desc:
- {
- meta.niri.desc = desc;
- }
- // mkSimpleBind modKeys key command args;
-in {
- defaultWindowRules = {
- niri = [
- ''
- match app-id=r#"^org\.keepassxc\.KeePassXC$"#
- match app-id=r#"^org\.gnome\.World\.Secrets$"#
-
- block-out-from "screen-capture"
- ''
- ''
- match app-id=r#"^steam$"#
- open-on-workspace "0"
- ''
- ''
- geometry-corner-radius 12
- clip-to-geometry true
- ''
- ];
- hyprland = [
- # window rules
- "match:class OxiCalc, float on"
- "match:class winecfg.exe, float on"
- "match:class copyq, float on"
- "match:class swappy, center on"
- "match:class steam, workspace 10 silent"
- ];
- };
-
- defaultStartup = config: {
- all = [
- "systemctl --user import-environment"
- "dbus-update-activation-environment --systemd --all"
- "hyprctl setcursor ${config.mods.stylix.cursor.name} ${toString config.mods.stylix.cursor.size}"
- # ensures the systemd service knows what "hyprctl" is :)
- (
- if config.mods.gaming.gamemode
- then "systemctl try-restart gamemoded.service --user"
- else ""
- )
-
- # other programs
- "${browserName config}"
- (
- if config.mods.oxi.hyprdock.enable
- then "hyprdock --server"
- else ""
- )
- (
- if config.mods.hypr.hyprpaper.enable
- then "hyprpaper"
- else ""
- )
- (
- if config.mods.hypr.hyprland.useIronbar
- then "ironbar"
- else ""
- )
- (
- if config.mods.oxi.oxipaste.enable
- then "oxipaste_daemon"
- else ""
- )
- (
- if config.mods.oxi.oxinoti.enable
- then "oxinoti"
- else ""
- )
- ];
- niri = [
- "XDG_CURRENT_DESKTOP=Niri"
- "XDG_SESSION_DESKTOP=Niri"
- "XDG_SESSION_TYPE=wayland"
- ];
- hyprland = [
- "XDG_CURRENT_DESKTOP=Hyprland"
- "XDG_SESSION_DESKTOP=Hyprland"
- "XDG_SESSION_TYPE=wayland"
- ];
- };
-
- defaultEnv = config: {
- all = {
- GTK_CSD = "0";
- TERM = "kitty /bin/fish";
- HYPRCURSOR_THEME = config.mods.stylix.cursor.name;
- HYPRCURSOR_SIZE = toString config.mods.stylix.cursor.size;
- XCURSOR_THEME = config.mods.stylix.cursor.name;
- XCURSOR_SIZE = toString config.mods.stylix.cursor.size;
- QT_QPA_PLATFORM = "wayland";
- QT_QPA_PLATFORMTHEME = "qt5ct";
- QT_WAYLAND_FORCE_DPI = "96";
- QT_AUTO_SCREEN_SCALE_FACTOR = "0";
- QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
- QT_SCALE_FACTOR = "1";
- EDITOR = "neovide --novsync --nofork";
-
- LIBVA_DRIVER_NAME =
- if config.mods.gpu.nvidia.enable
- then "nvidia"
- else "";
- GBM_BACKEND =
- if config.mods.gpu.nvidia.enable
- then "nvidia-drm"
- else "";
- __GLX_VENDOR_LIBRARY_NAME =
- if config.mods.gpu.nvidia.enable
- then "nvidia"
- else "";
- };
- niri = {};
- hyprland = {};
- };
-
- defaultBinds = config: [
- (mkSimpleBind ["Mod"] "1" "focusWorkspace" ["1"])
- (mkSimpleBind ["Mod"] "2" "focusWorkspace" ["2"])
- (mkSimpleBind ["Mod"] "3" "focusWorkspace" ["3"])
- (mkSimpleBind ["Mod"] "4" "focusWorkspace" ["4"])
- (mkSimpleBind ["Mod"] "5" "focusWorkspace" ["5"])
- (mkSimpleBind ["Mod"] "6" "focusWorkspace" ["6"])
- (mkSimpleBind ["Mod"] "7" "focusWorkspace" ["7"])
- (mkSimpleBind ["Mod"] "8" "focusWorkspace" ["8"])
- (mkSimpleBind ["Mod"] "9" "focusWorkspace" ["9"])
- (mkSimpleBind ["Mod"] "0" "focusWorkspace" ["10"])
- (mkSimpleBind ["Mod" "Shift"] "1" "moveToWorkspace" ["1"])
- (mkSimpleBind ["Mod" "Shift"] "2" "moveToWorkspace" ["2"])
- (mkSimpleBind ["Mod" "Shift"] "3" "moveToWorkspace" ["3"])
- (mkSimpleBind ["Mod" "Shift"] "4" "moveToWorkspace" ["4"])
- (mkSimpleBind ["Mod" "Shift"] "5" "moveToWorkspace" ["5"])
- (mkSimpleBind ["Mod" "Shift"] "6" "moveToWorkspace" ["6"])
- (mkSimpleBind ["Mod" "Shift"] "7" "moveToWorkspace" ["7"])
- (mkSimpleBind ["Mod" "Shift"] "8" "moveToWorkspace" ["8"])
- (mkSimpleBind ["Mod" "Shift"] "9" "moveToWorkspace" ["9"])
- (mkSimpleBind ["Mod" "Shift"] "0" "moveToWorkspace" ["10"])
- (mkSimpleBind ["Mod"] "B" "toggleFullscreen" [])
- (mkSimpleBind ["Mod"] "V" "toggleFloating" [])
- (mkSimpleBind ["Mod" "Shift"] "M" "quit" [])
- (mkSimpleBind ["Mod"] "Left" "moveWindowLeft" [])
- (mkSimpleBind ["Mod"] "Down" "moveWindowDown" [])
- (mkSimpleBind ["Mod"] "Up" "moveWindowUp" [])
- (mkSimpleBind ["Mod"] "Right" "moveWindowRight" [])
-
- (mkRepeatSimpleBind ["Mod"] "J" "moveFocusLeft" [])
- (mkRepeatSimpleBind ["Mod"] "K" "moveFocusDown" [])
- (mkRepeatSimpleBind ["Mod"] "L" "moveFocusUp" [])
- (mkRepeatSimpleBind ["Mod"] "semicolon" "moveFocusRight" [])
-
- (mkBindWithDesc ["Mod"] "Q" "killActive" [] "Kill active window")
-
- (mkBindWithDesc ["Mod"] "N" "spawn" ["neovide"] "Open Neovide")
- (mkBindWithDesc ["Mod"] "T" "spawn-sh" ["kitty" "-1"] "Open Kitty")
- (mkBindWithDesc ["Mod" "Shift"] "L" "spawn" ["hyprlock"] "Lock screen")
-
- (
- if config.mods.yazi.enable
- then mkBindWithDesc ["Mod"] "E" "spawn-sh" ["EDITOR='neovide --no-fork' kitty yazi"] "Open Yazi"
- else {}
- )
- (
- if config.mods.anyrun.enable
- then mkBindWithDesc ["Mod"] "R" "spawn" ["anyrun"] "Open Anyrun"
- else {}
- )
- (
- if config.mods.oxi.oxirun.enable
- then mkBindWithDesc ["Mod"] "R" "spawn" ["oxirun"] "Open OxiRun"
- else {}
- )
- (
- if config.mods.oxi.oxidash.enable
- then mkBindWithDesc ["Mod"] "M" "spawn" ["oxidash"] "Open OxiDash"
- else {}
- )
- (
- if config.mods.oxi.oxicalc.enable
- then mkBindWithDesc ["Mod"] "G" "spawn" ["oxicalc"] "Open Oxicalc"
- else {}
- )
- (
- if config.mods.oxi.oxishut.enable
- then mkBindWithDesc ["Mod"] "D" "spawn" ["oxishut"] "Open OxiShut"
- else {}
- )
- (
- if config.mods.oxi.oxipaste.enable
- then mkBindWithDesc ["Mod"] "A" "spawn" ["oxipaste"] "Open Oxipaste"
- else {}
- )
- (
- if config.mods.oxi.hyprdock.enable
- then mkBindWithDesc ["Mod" "Shift"] "P" "spawn" ["hyprdock --gui"] "Open Hyprdock"
- else {}
- )
- (
- if config.mods.hypr.hyprlock.enable
- then mkBindWithDesc ["Mod" "Shift" "Alt"] "L" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl suspend"] "Lock and suspend"
- else {}
- )
- (
- if config.mods.hypr.hyprlock.enable
- then mkBindWithDesc ["Mod" "Shift" "Alt"] "K" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl hibernate"] "Lock and hibernate"
- else {}
- )
-
- (mkBindWithDesc ["Mod"] "F" "spawn" ["${browserName config}"] "Open Browser")
- (
- if
- (
- browserName config == "firefox" || browserName config == "zen"
- )
- then mkBindWithDesc ["Mod" "Shift"] "F" "spawn" ["${browserName config} -p special"] "Open Browser Special Profile"
- else {}
- )
-
- (mkBindWithDesc ["Mod"] "S" "spawn-sh" [''grim -g "$(slurp)" - | wl-copy''] "Take Screenshot")
- (mkBindWithDesc ["Mod" "Shift"] "S" "spawn-sh" [''grim -g "$(slurp)" - | satty -f -''] "Take Screenshot and edit")
-
- (
- if config.mods.scripts.audioControl
- then {
- key = "XF86AudioMute";
- command = "spawn-sh";
- args = ["audioControl mute"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Mute Audio";
- };
- }
- else {}
- )
- (
- if config.mods.scripts.audioControl
- then {
- key = "XF86AudioRaiseVolume";
- command = "spawn-sh";
- args = ["audioControl +5%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Raise Audio Volume";
- };
- }
- else {}
- )
- (
- if config.mods.scripts.audioControl
- then {
- key = "XF86AudioLowerVolume";
- command = "spawn-sh";
- args = ["audioControl -5%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Lower Audio Volume";
- };
- }
- else {}
- )
- {
- key = "XF86AudioPlay";
- command = "spawn-sh";
- args = ["playerctl play-pause"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Play/Pause";
- };
- }
- {
- key = "XF86AudioNext";
- command = "spawn-sh";
- args = ["playerctl next"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Next Song";
- };
- }
- {
- key = "XF86AudioPrev";
- command = "spawn-sh";
- args = ["playerctl previous"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Previous Song";
- };
- }
- (
- if config.mods.scripts.changeBrightness
- then {
- key = "XF86MonBrightnessDown";
- command = "spawn-sh";
- args = ["changeBrightness -10%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Lower Brigthness";
- };
- }
- else {}
- )
- (
- if config.mods.scripts.changeBrightness
- then {
- key = "XF86MonBrightnessUp";
- command = "spawn-sh";
- args = ["changeBrightness +10%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Raise Brigthness";
- };
- }
- else {}
- )
-
- # Niri only keybinds
- (mkSimpleCustomBind ["Mod"] "BracketLeft" "consume-or-expel-window-left" null [])
- (mkSimpleCustomBind ["Mod"] "BracketRight" "consume-or-expel-window-right" null [])
- (mkSimpleCustomBind ["Mod"] "Comma" "consume-window-into-column" null [])
- (mkSimpleCustomBind ["Mod"] "Period" "expel-window-from-column" null [])
- (mkSimpleCustomBind ["Mod"] "Y" "switch-preset-column-width" null [])
- (mkSimpleCustomBind ["Mod"] "Tab" "focus-workspace-previous" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "V" "switch-focus-between-floating-and-tiling" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "B" "expand-column-to-available-width" null [])
- (mkSimpleCustomBind ["Mod"] "U" "set-column-width" null ["-10%"])
- (mkSimpleCustomBind ["Mod"] "P" "set-column-width" null ["+10%"])
- (mkSimpleCustomBind ["Mod"] "O" "set-column-width" null ["50%"])
- (mkSimpleCustomBind ["Mod" "Shift"] "Minus" "set-window-height" null ["-10%"])
- (mkSimpleCustomBind ["Mod" "Shift"] "Equal" "set-window-height" null ["+10%"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "1" "move-column-to-workspace" null ["1"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "2" "move-column-to-workspace" null ["2"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "3" "move-column-to-workspace" null ["3"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "4" "move-column-to-workspace" null ["4"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "5" "move-column-to-workspace" null ["5"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "6" "move-column-to-workspace" null ["6"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "7" "move-column-to-workspace" null ["7"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "8" "move-column-to-workspace" null ["8"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "9" "move-column-to-workspace" null ["9"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "0" "move-column-to-workspace" null ["10"])
- (mkSimpleCustomBind ["Mod" "Shift"] "J" "focus-monitor-left" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "semicolon" "focus-monitor-right" null [])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "J" "move-column-to-monitor-left" null [])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "semicolon" "move-column-to-monitor-right" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "Slash" "show-hotkey-overlay" null [])
- {
- modKeys = ["Mod"];
- key = "W";
- command.niri = "toggle-overview";
- meta.niri = {
- desc = "Overview";
- repeat = false;
- };
- }
- {
- modKeys = ["Mod"];
- key = "Escape";
- command.niri = "toggle-keyboard-shortcuts-inhibit";
- meta.niri = {
- allowInhibit = false;
- };
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollUp";
- command.niri = "focus-workspace-up";
- meta.niri.cooldown = 150;
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollDown";
- command.niri = "focus-workspace-down";
- meta.niri.cooldown = 150;
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollRight";
- command.niri = "focus-column-right";
- meta.niri.cooldown = 150;
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollLeft";
- command.niri = "focus-column-left";
- meta.niri.cooldown = 150;
- }
-
- # Hyprland only keybinds
- (mkSimpleCustomBind ["Mod"] "C" null "togglesplit" [])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "1" null "movetoworkspacesilent" ["1"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "2" null "movetoworkspacesilent" ["2"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "3" null "movetoworkspacesilent" ["3"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "4" null "movetoworkspacesilent" ["4"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "5" null "movetoworkspacesilent" ["5"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "6" null "movetoworkspacesilent" ["6"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "7" null "movetoworkspacesilent" ["7"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "8" null "movetoworkspacesilent" ["8"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "9" null "movetoworkspacesilent" ["9"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "0" null "movetoworkspacesilent" ["10"])
- (mkRepeatCustomBind ["Mod"] "U" null "resizeactive" ["-20" "0"])
- (mkRepeatCustomBind ["Mod"] "P" null "resizeactive" ["20" "0"])
- (mkRepeatCustomBind ["Mod"] "O" null "resizeactive" ["0" "-20"])
- (mkRepeatCustomBind ["Mod"] "I" null "resizeactive" ["0" "20"])
- (mkSimpleCustomBind ["Mod" "ALT"] "J" null "layoutmsg" ["preselect" "l"])
- (mkSimpleCustomBind ["Mod" "ALT"] "K" null "layoutmsg" ["preselect" "d"])
- (mkSimpleCustomBind ["Mod" "ALT"] "L" null "layoutmsg" ["preselect" "u"])
- (mkSimpleCustomBind ["Mod" "ALT"] "semicolon" null "layoutmsg" ["preselect" "r"])
- (mkSimpleCustomBind ["Mod" "ALT"] "H" null "layoutmsg" ["preselect" "n"])
- (
- if config.mods.hypr.hyprland.hyprspaceEnable
- then {
- modKeys = ["Mod"];
- key = "W";
- command.hyprland = "overview:toggle";
- args = [];
- }
- else {}
- )
- ];
-}
diff --git a/logo.svg b/logo.svg
deleted file mode 100644
index 8c9526c..0000000
--- a/logo.svg
+++ /dev/null
@@ -1,293 +0,0 @@
-
-
-
-DashNix DashNix
diff --git a/modules/conf.nix b/modules/conf.nix
deleted file mode 100644
index 0e3a166..0000000
--- a/modules/conf.nix
+++ /dev/null
@@ -1,170 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.conf = {
- system = lib.mkOption {
- default = "x86_64-linux";
- # no fisherprice unix support
- type = with lib.types; (enum [
- "x86_64-linux"
- "aarch64-linux"
- "aarch64-linux-android"
- ]);
- example = "aarch64-linux";
- description = ''
- System architecture.
- '';
- };
-
- systemLocalTime = lib.mkOption {
- default = false;
- example = true;
- description = ''
- System time for dualbooting
- '';
- };
-
- wsl = lib.mkOption {
- default = false;
- example = true;
- description = ''
- Runs Nix in wsl
- '';
- };
-
- secureBoot = lib.mkOption {
- default = false;
- example = true;
- description = ''
- enables secure boot.
- Note: Secure boot is NOT reproducible
- Here are the necessary steps:
- + create your keys with sbctl -> sudo sbctl create-keys
- + build with systemd once -> set this to false and build once
- + build with secureBoot true
- + verify that your keys are signed (note, only systemd and your generations should now be signed): sudo sbtcl verify
- + enroll your keys (microsoft is necessary for windows dualboot support, leave it there): sudo sbctl enroll-keys --microsoft
- + reboot with secureboot enabled
- Note: Some motherboards have vendor specific keys for secure boot, this may not necessarily work with our self signed keys
- You likely have to disable these vendor specific keys (example HP: sure boot)
- '';
- };
-
- useSystemdBootloader = lib.mkOption {
- default = true;
- example = false;
- description = ''
- use systemd bootloader.
- '';
- };
-
- cpu = lib.mkOption {
- # TODO: how to enable arm?
- default = "amd";
- type = with lib.types; (enum [
- "amd"
- "intel"
- ]);
- example = "intel";
- description = ''
- cpu microcode.
- '';
- };
-
- additionalBootKernalParams = lib.mkOption {
- default = [];
- example = [];
- type = with lib.types; listOf str;
- description = ''
- additional kernelParams passed to bootloader
- '';
- };
-
- bootParams = lib.mkOption {
- default = [];
- example = ["resume=something"];
- type = with lib.types; listOf str;
- description = ''
- Boot params
- '';
- };
-
- kernelOverride = lib.mkOption {
- default = null;
- type = with lib.types; nullOr package;
- description = ''
- kernel to be used
- Has no examples as doc complains...
- #example = pkgs.linuxPackages_xanmod_latest;
- '';
- };
-
- username = lib.mkOption {
- default = "DashNix";
- example = "pingpang";
- type = lib.types.str;
- description = ''
- The username.
- '';
- };
-
- timezone = lib.mkOption {
- default = "Europe/Zurich";
- example = "Europe/Berlin";
- type = lib.types.str;
- description = ''
- The timezone.
- '';
- };
-
- locale = lib.mkOption {
- default = "en_US.UTF-8";
- example = "de_DE.UTF-8";
- type = lib.types.str;
- description = ''
- The locale.
- '';
- };
-
- nixosConfigPath = lib.mkOption {
- default = "/home/${config.conf.username}/gits/nixos/.";
- example = "yourpath/.";
- type = lib.types.str;
- description = ''
- The path for your build command, you can then simply type rebuild to switch to a new configuration.
- '';
- };
-
- systemStateVersion = lib.mkOption {
- example = "24.11";
- default = "23.05";
- type = lib.types.str;
- description = ''
- System state version
- '';
- };
- homeStateVersion = lib.mkOption {
- default = "24.11";
- example = "23.05";
- type = lib.types.str;
- description = ''
- Home state version
- '';
- };
- };
-
- config =
- (lib.optionalAttrs (options ? system.stateVersion) {
- boot = {
- kernelPackages = lib.mkIf (config.conf.kernelOverride != null) config.conf.kernel;
- kernelParams = config.conf.additionalBootKernalParams;
- };
- system.stateVersion = config.conf.systemStateVersion;
- })
- // (lib.optionalAttrs (options ? home.stateVersion) {
- home.stateVersion = config.conf.homeStateVersion;
- });
-}
diff --git a/modules/default.nix b/modules/default.nix
deleted file mode 100644
index 683596a..0000000
--- a/modules/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- imports = [
- ./programs
- ./conf.nix
- ];
-}
diff --git a/modules/programs/acpid.nix b/modules/programs/acpid.nix
deleted file mode 100644
index 228c402..0000000
--- a/modules/programs/acpid.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods = {
- acpid.enable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables acpid.
- '';
- };
- };
-
- config = lib.mkIf config.mods.acpid.enable (
- lib.optionalAttrs (options ? virtualisation.virtualbox.host) {services.acpid.enable = true;}
- );
-}
diff --git a/modules/programs/anyrun.nix b/modules/programs/anyrun.nix
deleted file mode 100644
index b1b7922..0000000
--- a/modules/programs/anyrun.nix
+++ /dev/null
@@ -1,145 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- pkgs,
- options,
- inputs,
- ...
-}: {
- options.mods.anyrun = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables anyrun";
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured anyrun config.
- '';
- };
- customConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom anyrun configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- useDefaultCss = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured anyrun css.
- '';
- };
- customCss = lib.mkOption {
- default = '''';
- example = ''
- #window {
- border-radius: none;
- }
- '';
- type = lib.types.lines;
- description = ''
- Custom anyrun css.
- Will be merged with default css if enabled.
- '';
- };
- };
-
- config = lib.mkIf config.mods.anyrun.enable (
- lib.optionalAttrs (options ? home.packages) {
- programs.anyrun = lib.mkForce {
- package = pkgs.anyrun;
- enable = true;
- config =
- if config.mods.anyrun.useDefaultConfig
- then
- lib.mkMerge
- [
- {
- plugins = [
- inputs.anyrun.packages.${pkgs.system}.applications
- inputs.anyrun.packages.${pkgs.system}.rink
- inputs.anyrun.packages.${pkgs.system}.translate
- inputs.anyrun.packages.${pkgs.system}.websearch
- ];
- hideIcons = mkDashDefault false;
- width = {
- fraction = mkDashDefault 0.3;
- };
- y = {
- fraction = mkDashDefault 0.5;
- };
- layer = mkDashDefault "overlay";
- hidePluginInfo = mkDashDefault true;
- closeOnClick = mkDashDefault true;
- }
- config.mods.anyrun.customConfig
- ]
- else config.mods.anyrun.customConfig;
-
- extraCss =
- if config.mods.anyrun.useDefaultCss
- then
- ''
- #window {
- border-radius: 10px;
- background-color: transparent;
- }
-
- box#main {
- border-radius: 10px;
- }
-
- list#main {
- border-radius: 10px;
- margin: 0px 10px 10px 10px;
- }
-
- list#plugin {
- border-radius: 10px;
- }
-
- list#match {
- border-radius: 10px;
- }
-
- entry#entry {
- border: 0;
- border-radius: 10px;
- margin: 10px 10px 0px 10px;
- }
-
- label#match-desc {
- font-size: 12px;
- border-radius: 10px;
- }
-
- label#match-title {
- font-size: 12px;
- border-radius: 10px;
- }
-
- label#plugin {
- font-size: 16px;
- border-radius: 10px;
- }
-
- * {
- border-radius: 10px;
- }
- ''
- + config.mods.anyrun.customCss
- else config.mods.anyrun.customCss;
- };
- }
- );
-}
diff --git a/modules/programs/basePackages.nix b/modules/programs/basePackages.nix
deleted file mode 100644
index 1d1b2b9..0000000
--- a/modules/programs/basePackages.nix
+++ /dev/null
@@ -1,132 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- options,
- pkgs,
- inputs,
- system,
- ...
-}: {
- options.mods = {
- basePackages = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables default system packages.
- '';
- };
- additionalPackages = lib.mkOption {
- default = [];
- example = [pkgs.openssl];
- type = with lib.types; listOf package;
- description = ''
- Additional packages to install.
- Note that these are installed even if base packages is disabled, e.g. you can also use this as the only packages to install.
- '';
- };
- specialPrograms = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- special program configuration to be added which require programs.something notation.
- '';
- };
- specialServices = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- special services configuration to be added which require an services.something notation.
- '';
- };
- };
- };
-
- config = lib.optionalAttrs (options ? environment.systemPackages) {
- environment.systemPackages =
- if config.mods.basePackages.enable
- then
- with pkgs;
- [
- inputs.statix.packages.${system}.default
- adwaita-icon-theme
- dbus
- dconf
- direnv
- glib
- gnome.nixos-gsettings-overrides
- gsettings-desktop-schemas
- gtk-layer-shell
- gtk3
- gtk4
- gtk4-layer-shell
- hicolor-icon-theme
- icon-library
- kdePackages.breeze-icons
- kdePackages.breeze
- kdePackages.qtstyleplugin-kvantum
- libsForQt5.qtstyleplugin-kvantum
- libadwaita
- libxkbcommon
- alejandra
- openssl
- seahorse
- upower
- xorg.xkbutils
- sbctl
- ]
- ++ config.mods.basePackages.additionalPackages
- else config.mods.basePackages.additionalPackages;
-
- gtk.iconCache.enable = mkDashDefault false;
- services =
- if config.mods.basePackages.enable
- then
- {
- upower.enable = mkDashDefault true;
- dbus = {
- enable = mkDashDefault true;
- };
- avahi = {
- enable = mkDashDefault true;
- nssmdns4 = mkDashDefault true;
- openFirewall = mkDashDefault true;
- };
- }
- // config.mods.basePackages.specialServices
- else config.mods.basePackages.specialServices;
-
- programs =
- if config.mods.basePackages.enable
- then
- lib.mkMerge
- [
- {
- nix-ld = {
- enable = mkDashDefault true;
- libraries = with pkgs; [
- jdk
- zlib
- ];
- };
- direnv = {
- package = mkDashDefault pkgs.direnv;
- silent = mkDashDefault false;
- loadInNixShell = mkDashDefault true;
- direnvrcExtra = mkDashDefault "";
- nix-direnv = {
- enable = mkDashDefault true;
- package = mkDashDefault pkgs.nix-direnv;
- };
- };
- gnupg.agent.enable = mkDashDefault true;
- }
- config.mods.basePackages.specialPrograms
- ]
- else config.mods.basePackages.specialPrograms;
- };
-}
diff --git a/modules/programs/bluetooth.nix b/modules/programs/bluetooth.nix
deleted file mode 100644
index f0e2ef1..0000000
--- a/modules/programs/bluetooth.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- ...
-}: {
- options.mods = {
- bluetooth.enable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables bluetooth.
- '';
- };
- };
-
- config = lib.mkIf config.mods.bluetooth.enable (
- lib.optionalAttrs (options ? hardware.bluetooth) {
- hardware.bluetooth = {
- enable = mkDashDefault true;
- powerOnBoot = mkDashDefault true;
- };
- }
- );
-}
diff --git a/modules/programs/browser/brave.nix b/modules/programs/browser/brave.nix
deleted file mode 100644
index 404fddd..0000000
--- a/modules/programs/browser/brave.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.browser.brave = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables brave";
- };
- # TODO configure brave
- };
- config = lib.mkIf (config.mods.browser.brave.enable || config.mods.homePackages.browser == "brave") (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = with pkgs; [brave];
- }
- );
-}
diff --git a/modules/programs/browser/chromium.nix b/modules/programs/browser/chromium.nix
deleted file mode 100644
index 5d48046..0000000
--- a/modules/programs/browser/chromium.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.browser.chromium = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables chromium";
- };
- # TODO configure chromium
- };
- config = lib.mkIf (config.mods.browser.chromium.enable || config.mods.homePackages.browser == "chromium") (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = with pkgs; [chromium];
- }
- );
-}
diff --git a/modules/programs/browser/default.nix b/modules/programs/browser/default.nix
deleted file mode 100644
index ade4ecf..0000000
--- a/modules/programs/browser/default.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- imports = [
- ./brave.nix
- ./chromium.nix
- ./firefox.nix
- ./librewolf.nix
- ./zen.nix
- ];
-}
diff --git a/modules/programs/browser/firefox.nix b/modules/programs/browser/firefox.nix
deleted file mode 100644
index d93ac58..0000000
--- a/modules/programs/browser/firefox.nix
+++ /dev/null
@@ -1,125 +0,0 @@
-{
- lib,
- dashNixAdditionalProps,
- config,
- options,
- pkgs,
- ...
-}: let
- name = "firefox";
-in {
- imports = [
- (import ../../../lib/foxextensions.nix
- {inherit lib dashNixAdditionalProps pkgs name;})
- ];
- options.mods.browser.${name} = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables firefox";
- };
- configuration = lib.mkOption {
- default = {
- EnableTrackingProtection = {
- Value = true;
- Locked = true;
- Cryptomining = true;
- Fingerprinting = true;
- };
- DisablePocket = true;
- DisplayBookmarksToolbar = "never";
- DisplayMenuBar = "default-off";
- CaptivePortal = false;
- DisableFirefoxStudies = true;
- DisableTelemetry = true;
- DisableFirefoxAccounts = false;
- NoDefaultBookmarks = true;
- OfferToSaveLogins = false;
- OfferToSaveLoginsDefault = false;
- PasswordManagerEnabled = false;
- FirefoxHome = {
- Search = true;
- Pocket = false;
- Snippets = false;
- TopSites = true;
- Highlights = false;
- };
- UserMessaging = {
- ExtensionRecommendations = false;
- SkipOnboarding = true;
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Firefox policy configuration. See https://mozilla.github.io/policy-templates/ for more information.";
- };
- profiles = lib.mkOption {
- default = [
- {
- name = "${config.conf.username}";
- value = {
- isDefault = true;
- id = 0;
- };
- }
- {
- name = "special";
- value = {
- isDefault = false;
- id = 1;
- };
- }
- ];
- example = [
- {
- name = "custom";
- value = {
- isDefault = true;
- id = 0;
- extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
- };
- }
- ];
- type = with lib.types; listOf (attrsOf anything);
- description = "Firefox profiles";
- };
- };
- config = lib.mkIf (config.mods.browser.firefox.enable || config.mods.homePackages.browser == "firefox") (
- lib.optionalAttrs (options ? programs.firefox.profiles) {
- stylix.targets.firefox.profileNames =
- map (
- {name, ...}:
- name
- )
- config.mods.browser.firefox.profiles;
- programs.firefox = {
- enable = true;
- package =
- pkgs.wrapFirefox
- pkgs.firefox-unwrapped
- {
- pname = "firefox";
- extraPolicies =
- config.mods.browser.firefox.configuration
- // {
- ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.firefox.extensions
- ++ (
- if config.mods.browser.firefox.darkreader
- then [
- {
- "addon@darkreader.org" = {
- install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
- installation_mode = "normal_installed";
- };
- }
- ]
- else []
- ));
- };
- };
- profiles = builtins.listToAttrs config.mods.browser.firefox.profiles;
- };
- }
- );
-}
diff --git a/modules/programs/browser/librewolf.nix b/modules/programs/browser/librewolf.nix
deleted file mode 100644
index fc74bf3..0000000
--- a/modules/programs/browser/librewolf.nix
+++ /dev/null
@@ -1,119 +0,0 @@
-{
- lib,
- dashNixAdditionalProps,
- config,
- options,
- pkgs,
- ...
-}: let
- name = "librewolf";
-in {
- imports = [
- (import ../../../lib/foxextensions.nix
- {inherit lib dashNixAdditionalProps pkgs name;})
- ];
- options.mods.browser.${name} = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the librwolf browser";
- };
- configuration = lib.mkOption {
- default = {
- EnableTrackingProtection = {
- Value = true;
- Locked = true;
- Cryptomining = true;
- Fingerprinting = true;
- };
- DisablePocket = true;
- DisplayBookmarksToolbar = "never";
- DisplayMenuBar = "default-off";
- CaptivePortal = false;
- DisableFirefoxStudies = true;
- DisableTelemetry = true;
- DisableFirefoxAccounts = false;
- NoDefaultBookmarks = true;
- OfferToSaveLogins = false;
- OfferToSaveLoginsDefault = false;
- PasswordManagerEnabled = false;
- FirefoxHome = {
- Search = true;
- Pocket = false;
- Snippets = false;
- TopSites = true;
- Highlights = false;
- };
- UserMessaging = {
- ExtensionRecommendations = false;
- SkipOnboarding = true;
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Librewolf policy configuration. See https://mozilla.github.io/policy-templates/ for more information.";
- };
- profiles = lib.mkOption {
- default = [
- {
- name = "${config.conf.username}";
- value = {
- isDefault = true;
- id = 0;
- };
- }
- {
- name = "special";
- value = {
- isDefault = false;
- id = 1;
- };
- }
- ];
- example = [
- {
- name = "custom";
- value = {
- isDefault = true;
- id = 0;
- extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
- };
- }
- ];
- type = with lib.types; listOf (attrsOf anything);
- description = "Librewolf profiles";
- };
- };
- config = lib.mkIf (config.mods.browser.librewolf.enable || config.mods.homePackages.browser == "librewolf") (
- lib.optionalAttrs (options ? home.packages) {
- programs.librewolf-dashnix = {
- enable = true;
- package =
- pkgs.wrapFirefox
- pkgs.librewolf-unwrapped
- {
- pname = "librewolf";
- extraPolicies =
- config.mods.browser.librewolf.configuration
- // {
- ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.librewolf.extensions
- ++ (
- if config.mods.browser.firefox.darkreader
- then [
- {
- "addon@darkreader.org" = {
- install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
- installation_mode = "normal_installed";
- };
- }
- ]
- else []
- ));
- };
- };
- profiles = builtins.listToAttrs config.mods.browser.librewolf.profiles;
- };
- }
- );
-}
diff --git a/modules/programs/browser/zen.nix b/modules/programs/browser/zen.nix
deleted file mode 100644
index db32900..0000000
--- a/modules/programs/browser/zen.nix
+++ /dev/null
@@ -1,157 +0,0 @@
-# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix
-{
- lib,
- dashNixAdditionalProps,
- config,
- options,
- inputs,
- system,
- pkgs,
- ...
-}: let
- # at time of using this here, stylix might not be evaluated yet
- # hence ensure it is by using base16 mkSchemeAttrs
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- name = "zen";
-in {
- imports = [
- (import ../../../lib/foxextensions.nix
- {inherit lib dashNixAdditionalProps pkgs name;})
- ];
- options.mods.browser.${name} = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the zen browser";
- };
- configuration = lib.mkOption {
- default = {
- EnableTrackingProtection = {
- Value = true;
- Locked = true;
- Cryptomining = true;
- Fingerprinting = true;
- };
- DisablePocket = true;
- CaptivePortal = false;
- DisableFirefoxStudies = true;
- DisableTelemetry = true;
- NoDefaultBookmarks = true;
- PasswordManagerEnabled = false;
- FirefoxHome = {
- Search = true;
- Pocket = false;
- Snippets = false;
- TopSites = true;
- Highlights = false;
- };
- UserMessaging = {
- ExtensionRecommendations = false;
- SkipOnboarding = true;
- };
- "3rdparty".Extensions = {
- "addon@darkreader.org" = {
- theme = {
- darkSchemeBackgroundColor = "#${scheme.base00}";
- darkSchemeTextColor = "#${scheme.base05}";
- };
- previewNewDesign = true;
- };
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Zen policy configuration. See https://mozilla.github.io/policy-templates for more information.";
- };
- profiles = lib.mkOption {
- default = [
- {
- name = "${config.conf.username}";
- value = {
- settings = {
- "zen.view.compact.hide-tabbar" = false;
- "zen.view.compact.hide-toolbar" = true;
- "zen.view.sidebar-expanded" = false;
- "zen.view.use-single-toolbar" = false;
- "zen.view.welcome-screen.seen" = true;
- "zen.theme.accent-color" = "#b4bbff";
- "extensions.autoDisableScopes" = 0;
- "cookiebanners.service.mode" = 2;
- "widget.use-xdg-desktop-portal.file-picker" = 1;
- };
- isDefault = true;
- id = 0;
- };
- }
- {
- name = "special";
- value = {
- settings = {
- "zen.view.compact.hide-tabbar" = false;
- "zen.view.compact.hide-toolbar" = true;
- "zen.view.sidebar-expanded" = false;
- "zen.view.use-single-toolbar" = false;
- "zen.view.welcome-screen.seen" = true;
- "zen.theme.accent-color" = "#b4bbff";
- "extensions.autoDisableScopes" = 0;
- "widget.use-xdg-desktop-portal.file-picker" = 1;
- };
- isDefault = false;
- id = 1;
- };
- }
- ];
- example = [
- {
- name = "custom";
- value = {
- settings = {
- extensions.autoDisableScopes = 0;
- };
- extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
- isDefault = true;
- id = 0;
- };
- }
- ];
- type = with lib.types; listOf (attrsOf anything);
- description = "Zen profiles";
- };
- };
- config = lib.mkIf (config.mods.browser.zen.enable || config.mods.homePackages.browser == "zen") (
- (lib.optionalAttrs (options ? home.packages) {
- programs.zen-browser = {
- enable = true;
- package =
- pkgs.wrapFirefox
- inputs.zen-browser.packages.${system}.zen-browser-unwrapped
- {
- pname = "zen-browser";
- extraPolicies =
- config.mods.browser.zen.configuration
- // {
- ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.zen.extensions
- ++ (
- if config.mods.browser.firefox.darkreader
- then [
- {
- "addon@darkreader.org" = {
- install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
- installation_mode = "normal_installed";
- };
- }
- ]
- else []
- ));
- };
- };
- profiles = builtins.listToAttrs config.mods.browser.zen.profiles;
- };
- })
- // (lib.optionalAttrs (options ? stylix.targets.zen-browser) {
- stylix.targets.zen-browser.profileNames = lib.map (profile: profile.name) config.mods.browser.zen.profiles;
- })
- );
-}
diff --git a/modules/programs/clam.nix b/modules/programs/clam.nix
deleted file mode 100644
index e212529..0000000
--- a/modules/programs/clam.nix
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.clam = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the clamav program and its daemon";
- };
- scanner = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the clamav scanner";
- };
- interval = lib.mkOption {
- type = lib.types.str;
- default = "*-*-* 04:00:00";
- description = ''
- How often clamdscan is invoked.
- By default this runs using 10 cores at most, be sure to run it at a time of low traffic.
- '';
- };
- scanDirectories = lib.mkOption {
- type = with lib.types; listOf str;
- default = [
- "/home"
- "/var/lib"
- "/tmp"
- "/etc"
- "/var/tmp"
- ];
- description = ''List of directories to scan'';
- };
- };
- };
- config = lib.mkIf config.mods.clam.enable (
- lib.optionalAttrs (options ? services.clamav) {
- services.clamav = {
- daemon.enable = true;
- updater.enable = true;
- scanner = {
- inherit (config.mods.clam.scanner) enable;
- inherit (config.mods.clam.scanner) interval;
- inherit (config.mods.clam.scanner) scanDirectories;
- };
- };
- environment.systemPackages = [
- pkgs.clamav
- ];
- }
- // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [clamtk];}
- );
-}
diff --git a/modules/programs/coding.nix b/modules/programs/coding.nix
deleted file mode 100644
index 5a22205..0000000
--- a/modules/programs/coding.nix
+++ /dev/null
@@ -1,575 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- pkgs,
- options,
- inputs,
- system,
- ...
-}: let
- font_family = "${config.mods.stylix.fonts.monospace.name}";
-in {
- options.mods = {
- coding = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables coding packages.
- '';
- };
- dashvim = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables dashvim package.
- '';
- };
- jetbrains = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables jetbrains toolbox.
- '';
- };
- vscodium = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables vscodium.
- '';
- };
- extensions = lib.mkOption {
- default = [];
- example = [];
- type = with lib.types; listOf package;
- description = "Extensions to be installed";
- };
- };
- penpot = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables penpot";
- };
- neovide = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables neovide";
- };
- config = lib.mkOption {
- default = {
- font = {
- size = 12;
- normal = {
- family = font_family;
- style = "";
- };
- bold = {
- family = font_family;
- style = "ExtraBold";
- };
- italic = {
- family = font_family;
- style = "Italic";
- };
- bold_italic = {
- family = font_family;
- style = "Bold Italic";
- };
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Config for neovide";
- };
- };
- gh = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables and configures gh";
- };
- config = lib.mkOption {
- default = {
- version = 1;
- git_protocol = "ssh";
- editor = "";
- prompt = "enabled";
- prefer_editor_prompt = "disabled";
- pager = "";
- aliases = {
- co = "pr checkout";
- };
- http_unix_socket = "";
- browser = "";
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "config for gh. Keep in mind, empty values refer to using environment variables";
- };
- hosts = lib.mkOption {
- default = {
- "github.com" = {
- git_protocol = "ssh";
- users = {
- ${config.mods.git.username} = "";
- };
- user = "${config.mods.git.username}";
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "hosts for gh";
- };
- };
- useDefaultPackages = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default base packages (only additionalPackages are installed if false)";
- };
- additionalPackages = lib.mkOption {
- default = [];
- example = [];
- type = with lib.types; listOf package;
- description = "Additional packages to be installed";
- };
- languages = {
- haskell = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables haskell.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- haskellPackages.cabal-install
- ghc
- haskellPackages.haskell-language-server
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- haskell packages
- '';
- };
- };
- typst = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables typst.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- typst
- tinymist
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- typst packages
- '';
- };
- };
- go = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables go.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- go
- gopls
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- Go packages
- '';
- };
- };
- rust = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables rust.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [rustup];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- Rust packages
- '';
- };
- };
- ts-js = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables TS/JS.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- nodejs_20
- deno
- typescript
- nodePackages.typescript-language-server
- nodePackages.prettier
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- TS/JS packages
- '';
- };
- };
- zig = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables zig.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- zig
- zls
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- zig packages
- '';
- };
- };
- java = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables java.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- gradle
- maven
- jdt-language-server
- temurin-jre-bin
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- Java packages
- '';
- };
- };
- dotnet = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables C#/F#.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- #.!
- (with dotnetCorePackages;
- combinePackages [
- sdk_8_0
- sdk_9_0
- ])
- csharpier
- netcoredbg
- fsharp
- fsautocomplete
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- C#/F# packages
- '';
- };
- };
- C-CPP = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables C/C++.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- bear
- gdb
- gcc
- clang-tools
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- C/C++ packages
- '';
- };
- };
- python = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables python.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- python3
- python312Packages.python-lsp-server
- python312Packages.python-lsp-ruff
- python312Packages.python-lsp-black
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- python packages
- '';
- };
- };
- configFiles = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables Json/toml/yaml etc.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- #yaml
- yamlfmt
- yamllint
- yaml-language-server
-
- #json
- jq
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- packages for said filetypes
- '';
- };
- };
- bash = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables bash.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- bash-language-server
- shfmt
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- bash packages
- '';
- };
- };
- html-css = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables html/css.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- tailwindcss
- tailwindcss-language-server
- # html-tidy
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- html/css packages
- '';
- };
- };
- sql = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables sql.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [
- nodePackages.sql-formatter
- sqls
- ];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- sql packages
- '';
- };
- };
- gleam = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables gleam.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [gleam];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- gleam packages
- '';
- };
- };
- asm = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables assembly.
- '';
- };
- packages = lib.mkOption {
- default = with pkgs; [asm-lsp];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- assembly packages
- '';
- };
- };
- };
- };
- };
-
- config = let
- basePackages = with pkgs; [
- gitui
- meson
- ninja
- tree-sitter
- unzip
- pkg-config
- sqlite
- plantuml
- d-spy
- tmux
- tmate
- inputs.compose.packages.${system}.default
- ];
- in
- lib.mkIf config.mods.coding.enable (
- lib.optionalAttrs (options ? home.packages) {
- programs.dashvim = lib.mkIf config.mods.coding.dashvim {
- enable = true;
- inherit (config.mods.stylix) colorscheme;
- };
- programs.vscode = lib.mkIf config.mods.coding.vscodium.enable {
- enable = true;
- package = mkDashDefault pkgs.vscodium;
- profiles.default.extensions = config.mods.coding.vscodium.extensions;
- };
- xdg.configFile = {
- "neovide/config.toml" = lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) {
- source =
- (pkgs.formats.toml {}).generate "neovide"
- config.mods.coding.neovide.config;
- };
-
- "gh/config.yml" = lib.mkIf config.mods.coding.gh.enable {
- source =
- (pkgs.formats.yaml {}).generate "config"
- config.mods.coding.gh.config;
- };
- "gh/hosts.yml" = lib.mkIf config.mods.coding.gh.enable {
- source =
- (pkgs.formats.yaml {}).generate "hosts"
- config.mods.coding.gh.hosts;
- };
- };
-
- home.packages = with pkgs;
- [
- (lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) neovide)
- (lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox)
- (lib.mkIf config.mods.coding.penpot pkgs.penpot-desktop)
- (lib.mkIf config.mods.coding.gh.enable gh)
- ]
- ++ config.mods.coding.additionalPackages
- ++ (lib.lists.optionals config.mods.coding.useDefaultPackages basePackages)
- ++ (lib.lists.optionals config.mods.coding.languages.haskell.enable config.mods.coding.languages.haskell.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.rust.enable config.mods.coding.languages.rust.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.go.enable config.mods.coding.languages.go.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.java.enable config.mods.coding.languages.java.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.dotnet.enable config.mods.coding.languages.dotnet.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.bash.enable config.mods.coding.languages.bash.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.C-CPP.enable config.mods.coding.languages.C-CPP.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.asm.enable config.mods.coding.languages.asm.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.sql.enable config.mods.coding.languages.sql.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.html-css.enable config.mods.coding.languages.html-css.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.configFiles.enable config.mods.coding.languages.configFiles.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.ts-js.enable config.mods.coding.languages.ts-js.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.typst.enable config.mods.coding.languages.typst.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.zig.enable config.mods.coding.languages.zig.packages)
- ++ (lib.lists.optionals config.mods.coding.languages.gleam.enable config.mods.coding.languages.gleam.packages);
- }
- );
-}
diff --git a/modules/programs/containers.nix b/modules/programs/containers.nix
deleted file mode 100644
index b62ee25..0000000
--- a/modules/programs/containers.nix
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.containers = {
- variant = lib.mkOption {
- default = "";
- example = "podman";
- type = lib.types.enum [
- ""
- "podman"
- "docker"
- ];
- description = "Enables and configures a containerization solution: podman/docker";
- };
- podmanPackages = lib.mkOption {
- default = with pkgs; [
- podman-tui
- podman-compose
- ];
- example = [];
- type = with lib.types; listOf package;
- description = "Podman packages";
- };
- dockerPackages = lib.mkOption {
- default = with pkgs; [
- docker-compose
- ];
- example = [];
- type = with lib.types; listOf package;
- description = "Docker packages";
- };
- combinedPackages = lib.mkOption {
- default = with pkgs; [
- dive
- ];
- example = [];
- type = with lib.types; listOf package;
- description = "Container packages";
- };
- };
- config = lib.optionalAttrs (options ? environment.systemPackages) {
- environment.systemPackages =
- (lib.lists.optionals (
- config.mods.containers.variant == "podman"
- )
- config.mods.containers.podmanPackages)
- ++ (lib.lists.optionals (
- config.mods.containers.variant == "docker"
- )
- config.mods.containers.dockerPackages)
- ++ (lib.lists.optionals (
- config.mods.containers.variant == "podman" || config.mods.containers.variant == "docker"
- )
- config.mods.containers.combinedPackages);
- virtualisation =
- if (config.mods.containers.variant == "podman")
- then {
- containers.enable = true;
- podman = {
- enable = true;
- dockerCompat = mkDashDefault true;
- defaultNetwork.settings.dns_enabled = mkDashDefault true;
- };
- }
- else if (config.mods.containers.variant == "docker")
- then {
- containers.enable = true;
- docker = {
- enable = true;
- };
- }
- else {};
- };
-}
diff --git a/modules/programs/default.nix b/modules/programs/default.nix
deleted file mode 100644
index 08a4a2d..0000000
--- a/modules/programs/default.nix
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- imports = [
- ./acpid.nix
- ./anyrun.nix
- ./basePackages.nix
- ./bluetooth.nix
- ./browser
- ./clam.nix
- ./coding.nix
- ./containers.nix
- ./drives.nix
- ./fancontrol.nix
- ./fastfetch.nix
- ./fish.nix
- ./flatpak.nix
- ./gaming.nix
- ./gdm.nix
- ./git.nix
- ./gnome.nix
- ./gnomeServices.nix
- ./gpu.nix
- ./greetd.nix
- ./homePackages.nix
- ./hypr
- ./ironbar.nix
- ./kde.nix
- ./kdeConnect.nix
- ./keepassxc.nix
- ./kitty.nix
- ./media.nix
- ./mime.nix
- ./ncspot.nix
- ./nextcloud.nix
- ./niri.nix
- ./onedrive.nix
- ./oxi
- ./piper.nix
- ./plymouth.nix
- ./printing.nix
- ./scripts.nix
- ./sddm.nix
- ./sops.nix
- ./starship.nix
- ./streamcontroller.nix
- ./stylix.nix
- ./superfreq.nix
- ./supersonic.nix
- ./sway.nix
- ./teams.nix
- ./virtmanager.nix
- ./wm.nix
- ./xkb.nix
- ./xone.nix
- ./yazi
- ];
-}
diff --git a/modules/programs/drives.nix b/modules/programs/drives.nix
deleted file mode 100644
index a631802..0000000
--- a/modules/programs/drives.nix
+++ /dev/null
@@ -1,312 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.drives = {
- variant = lib.mkOption {
- default = "manual";
- example = "disko";
- type = with lib.types; (enum [
- "manual"
- "disko"
- ]);
- description = ''
- Disk configuration type, either "manual" for regular NixOS disk configuration,
- or "disko" for using disko to automatically format your drives.
- '';
- };
- useSwap = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use swap in drive.
- '';
- };
- useEncryption = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables encryption.
- !WARNING!
- You need your root drive to be named root exactly!
- Otherwise there will not be a root crypt!
- !WARNING!
- '';
- };
- homeAndRootFsTypes = lib.mkOption {
- default = "ext4";
- example = "btrfs";
- type = with lib.types; (enum [
- "btrfs"
- "ext2"
- "ext3"
- "ext4"
- "exfat"
- "f2fs"
- "fat8"
- "fat16"
- "fat32"
- "ntfs"
- "xfs"
- "zfs"
- ]);
- description = ''
- Filesystem for the home and root partitions.
- '';
- };
- defaultDrives = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use default drive config.
-
- - Manual variant
- This config expects 4 different partitions on a single drive:
- - boot partition with BOOT label and vfat format (filesystem configurable)
- - swap partition with SWAP label
- - root partition with ROOT label and ext4 format (filesystem configurable)
- - home partition with HOME label and ext4 format (filesystem configurable)
- - gpt disk format
-
- NOTE: Any different configuration must be done manually with this turned off.
-
- - Disko variant
- This config creates 4 different partitions on a single drive:
- - boot partition with 1GB size and vfat format
- - swap partition with 32GB (size configurable)
- - root partition with 30% size and ext4 format (size and filesystem configurable)
- - home partition with 70%~ size and ext4 format (size and filesystem configurable)
- - gpt disk format
-
- NOTE: Any different configuration must be done manually with this turned off.
- '';
- };
- };
- extraDrives = lib.mkOption {
- default = [
- ];
- example = [
- {
- name = "drive2";
- drive = {
- device = "/dev/disk/by-label/DRIVE2";
- fsType = "ext4";
- options = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
- }
- ];
- type = with lib.types; listOf (attrsOf anything);
- description = ''
- Extra drives to add.
- Please ensure to add variant compliant attrsets (manual/disko).
- (The example is for manual variant, here an example for disko):
- ```nix
- drive2 = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
- device = "/dev/nvme1n1"
- type = "disk";
- content = {
- type = "gpt";
- partitions = {
- drive2 = {
- start = "0%";
- end = "100%";
- content = {
- type = "filesystem";
- format = "ext4";
- mountpoint = "/drive2";
- mountOptions = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
- };
- };
- };
- };
- ```
- '';
- };
- disko = {
- defaultDiskId = lib.mkOption {
- default = "TODO";
- example = "/dev/nvme0n1";
- type = lib.types.str;
- description = "The name, ID, UUID or similar for the default drive.";
- };
- rootAmount = lib.mkOption {
- default = 30;
- example = 40;
- type = lib.types.number;
- description = "The percentage of the disk for root. (Home will take up the rest) (Only for disko)";
- };
- swapAmount = lib.mkOption {
- default = 32;
- example = 64;
- type = lib.types.number;
- description = "The amount of swap to use. (Only for disko)";
- };
- };
- };
-
- config = lib.optionalAttrs (options ? fileSystems) {
- boot.initrd.luks.devices = lib.mkIf (config.mods.drives.variant == "manual" && config.mods.drives.useEncryption) (
- builtins.listToAttrs (
- map (
- {
- name,
- drive,
- }: {
- cryptstorage.device = lib.mkIf (name != "root") drive?device;
- cryptoroot.device = lib.mkIf (name == "root") drive?device;
- }
- )
- config.mods.drives.extraDrives
- )
- );
-
- fileSystems = lib.mkIf (config.mods.drives.variant == "manual" && !config.conf.wsl) (
- builtins.listToAttrs (
- map (
- {
- name,
- drive,
- }: {
- name = "/" + name;
- value = drive;
- }
- )
- config.mods.drives.extraDrives
- )
- // (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
- "/" = {
- device = "/dev/disk/by-label/ROOT";
- fsType = config.mods.drives.homeAndRootFsTypes;
- options = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
-
- "/boot" = {
- device = "/dev/disk/by-label/BOOT";
- fsType = "vfat";
- options = [
- "rw"
- "fmask=0022"
- "dmask=0022"
- "noatime"
- ];
- };
-
- "/home" = {
- device = "/dev/disk/by-label/HOME";
- fsType = config.mods.drives.homeAndRootFsTypes;
- options = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
- }
- );
-
- swapDevices = lib.mkIf (config.mods.drives.useSwap && config.mods.drives.variant == "manual" && !config.conf.wsl) [
- {device = "/dev/disk/by-label/SWAP";}
- ];
-
- disko.devices = lib.mkIf (config.mods.drives.variant == "disko") {
- disk =
- {
- main = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
- device = "${config.mods.drives.disko.defaultDiskId}";
- type = "disk";
- content = {
- type = "gpt";
- partitions = {
- root = {
- start = "${
- if config.mods.drives.useSwap
- then builtins.toString config.mods.drives.disko.swapAmount
- else builtins.toString 1
- }G";
- end = "${builtins.toString config.mods.drives.disko.rootAmount}%";
- content = {
- type = "filesystem";
- format = config.mods.drives.homeAndRootFsTypes;
- mountpoint = "/";
- mountOptions = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
- };
- plainSwap = {
- start = "1G";
- end = "33G";
- content = {
- type = "swap";
- discardPolicy = "both";
- resumeDevice = true;
- };
- };
- boot = {
- start = "0G";
- end = "1G";
- content = {
- type = "filesystem";
- format = "vfat";
- mountpoint = "/boot";
- mountOptions = [
- "rw"
- "fmask=0022"
- "dmask=0022"
- "noatime"
- ];
- };
- };
- home = {
- start = "${builtins.toString config.mods.drives.disko.rootAmount}%";
- end = "100%";
- content = {
- type = "filesystem";
- format = config.mods.drives.homeAndRootFsTypes;
- mountpoint = "/home";
- mountOptions = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
- };
- };
- };
- };
- }
- // builtins.listToAttrs (
- map (
- {
- name,
- drive,
- }: {
- name = "/" + name;
- value = drive;
- }
- )
- config.mods.drives.extraDrives
- );
- };
- };
-}
diff --git a/modules/programs/fancontrol.nix b/modules/programs/fancontrol.nix
deleted file mode 100644
index 8abf24d..0000000
--- a/modules/programs/fancontrol.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- lib,
- pkgs,
- config,
- options,
- ...
-}: {
- options.mods.fancontrol = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables fancontrol-gui with needed drivers";
- };
- forceId = lib.mkOption {
- default = null;
- example = "force_id=0x8628";
- type = with lib.types; nullOr str;
- description = "Modprobe options for the it87 driver. Information at: https://wiki.archlinux.org/title/Lm_sensors#Gigabyte_B250/Z370/B450M/B560M/B660M/Z690/B550_motherboards";
- };
- };
- config = lib.mkIf config.mods.fancontrol.enable (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = [pkgs.fancontrol-gui];
- }
- // (lib.optionalAttrs (options ? boot.kernelModules) {
- boot = {
- kernelParams = ["acpi_enforce_resources=lax"];
- extraModulePackages = with config.boot.kernelPackages; [liquidtux it87];
- kernelModules = ["v4l2loopback" "it87"];
- extraModprobeConfig = lib.mkIf (config.mods.fancontrol.forceId != null) ''
- options it87 ${config.mods.fancontrol.forceId}
- '';
- };
- })
- );
-}
diff --git a/modules/programs/fastfetch.nix b/modules/programs/fastfetch.nix
deleted file mode 100644
index 9953d84..0000000
--- a/modules/programs/fastfetch.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- pkgs,
- lib,
- options,
- config,
- ...
-}: {
- options.mods.dashfetch = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "A custom configuration for fastfetch";
- };
- modules = lib.mkOption {
- default = [
- "title"
- "separator"
- {
- type = "os";
- key = "OS";
- format = "DashNix ({name} {version})";
- }
- "host"
- "kernel"
- "uptime"
- "packages"
- "shell"
- "display"
- "de"
- "wm"
- "wmtheme"
- "theme"
- "icons"
- "font"
- "cursor"
- "terminal"
- "terminalfont"
- "cpu"
- "gpu"
- "memory"
- "swap"
- "disk"
- "localip"
- "battery"
- "poweradapter"
- "locale"
- "break"
- "colors"
- ];
- example = [];
- type = with lib.types; listOf anything;
- description = "modules for fastfetch";
- };
- };
-
- config = lib.optionalAttrs (options ? home.packages) {
- xdg.configFile."fastfetch/config.jsonc" = lib.mkIf config.mods.dashfetch.enable {
- source =
- (pkgs.formats.json {}).generate "config.jsonc"
- {
- "$schema" = "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json";
- logo = {
- type = "kitty";
- source = ../../assets/logo2.png;
- width = 35;
- padding = {
- top = 1;
- };
- };
- modules = config.mods.dashfetch.modules;
- };
- };
- };
-}
diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix
deleted file mode 100644
index 1d8c8c8..0000000
--- a/modules/programs/fish.nix
+++ /dev/null
@@ -1,190 +0,0 @@
-{
- lib,
- pkgs,
- inputs,
- config,
- options,
- ...
-}: let
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
-in {
- options.mods.fish = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables fish";
- };
- additionalConfig = lib.mkOption {
- default = '''';
- example = '''';
- type = lib.types.lines;
- description = "Additional fish config";
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default fish config";
- };
- };
- config = lib.mkIf config.mods.fish.enable (
- lib.optionalAttrs (options ? programs.fish) {
- programs.fish = {
- enable = true;
- shellInit =
- if config.mods.fish.useDefaultConfig
- then
- ''
- if status is-interactive
- # Commands to run in interactive sessions can go here
- end
-
- # =============================================================================
- #
- # Utility functions for zoxide.
- #
-
- export NIX_PATH="$NIX_PATH:${config.conf.nixosConfigPath}"
-
- set EDITOR "neovide --no-fork"
-
- alias rebuild='nh os switch -- --accept-flake-config'
- alias update='nix flake update --flake $FLAKE --accept-flake-config'
- alias gcli='gh'
- abbr --add ls 'lsd'
- abbr --add :q 'exit'
- abbr --add gh 'git push origin'
- abbr --add gu 'git push upstream'
- abbr --add gl 'git pull origin'
- abbr --add gm 'git commit -m'
- abbr --add ga "git add -A"
- abbr --add gc "git commit --amend --no-edit"
- abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20'
- abbr --add s "kitty +kitten ssh"
- abbr --add zl 'z "" '
- abbr --add nv 'neovide'
- abbr --add cr 'cargo run'
- abbr --add grep 'rg'
- abbr --add cat 'bat'
- abbr --add find 'fd'
- abbr --add rm 'rip'
- abbr --add cp 'cpz'
- abbr --add cd 'z'
- abbr --add y 'yazi'
-
- set fish_color_autosuggestion '${scheme.base07}'
- set fish_color_param '${scheme.base06}'
- set fish_color_operator '${scheme.base0E}'
-
- set fish_greeting
- # pwd based on the value of _ZO_RESOLVE_SYMLINKS.
- function __zoxide_pwd
- builtin pwd -L
- end
-
- # A copy of fish's internal cd function. This makes it possible to use
- # `alias cd=z` without causing an infinite loop.
- if ! builtin functions --query __zoxide_cd_internal
- if builtin functions --query cd
- builtin functions --copy cd __zoxide_cd_internal
- else
- alias __zoxide_cd_internal='builtin cd'
- end
- end
-
- # cd + custom logic based on the value of _ZO_ECHO.
- function __zoxide_cd
- __zoxide_cd_internal $argv
- end
-
- # =============================================================================
- #
- # Hook configuration for zoxide.
- #
-
- # Initialize hook to add new entries to the database.
- function __zoxide_hook --on-variable PWD
- test -z "$fish_private_mode"
- and command zoxide add -- (__zoxide_pwd)
- end
-
- # =============================================================================
- #
- # When using zoxide with --no-cmd, alias these internal functions as desired.
- #
-
- if test -z $__zoxide_z_prefix
- set __zoxide_z_prefix 'z!'
- end
- set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix)
-
- # Jump to a directory using only keywords.
- function __zoxide_z
- set -l argc (count $argv)
- if test $argc -eq 0
- __zoxide_cd $HOME
- else if test "$argv" = -
- __zoxide_cd -
- else if test $argc -eq 1 -a -d $argv[1]
- __zoxide_cd $argv[1]
- else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result
- __zoxide_cd $result
- else
- set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv)
- and __zoxide_cd $result
- end
- end
-
- # Completions.
- function __zoxide_z_complete
- set -l tokens (commandline --current-process --tokenize)
- set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize)
-
- if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1
- # If there are < 2 arguments, use `cd` completions.
- complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$'
- else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1]
- # If the last argument is empty and the one before doesn't start with
- # $__zoxide_z_prefix, use interactive selection.
- set -l query $tokens[2..-1]
- set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query)
- and echo $__zoxide_z_prefix$result
- commandline --function repaint
- end
- end
- complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)'
-
- # Jump to a directory using interactive search.
- function __zoxide_zi
- set -l result (command zoxide query --interactive -- $argv)
- and __zoxide_cd $result
- end
-
- # =============================================================================
- #
- # Commands for zoxide. Disable these using --no-cmd.
- #
-
- abbr --erase z &>/dev/null
- alias z=__zoxide_z
-
- abbr --erase zi &>/dev/null
- alias zi=__zoxide_zi
-
- # =============================================================================
- #
- # To initialize zoxide, add this to your configuration (usually
- # ~/.config/fish/config.fish):
- #
- # zoxide init fish | source
-
- direnv hook fish | source
- ''
- + config.mods.fish.additionalConfig
- else config.mods.fish.additionalConfig;
- };
- }
- );
-}
diff --git a/modules/programs/flatpak.nix b/modules/programs/flatpak.nix
deleted file mode 100644
index 68ec2da..0000000
--- a/modules/programs/flatpak.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.flatpak = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the flatpak package manager";
- };
- };
- config = lib.mkIf config.mods.flatpak.enable (
- lib.optionalAttrs (options ? environment.systemPackages) {
- environment.systemPackages = [pkgs.flatpak];
- }
- );
-}
diff --git a/modules/programs/gaming.nix b/modules/programs/gaming.nix
deleted file mode 100644
index 6c3eb0a..0000000
--- a/modules/programs/gaming.nix
+++ /dev/null
@@ -1,149 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.gaming = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enabled gaming related features.";
- };
- tools = lib.mkOption {
- default = with pkgs; [
- protonplus
- gamescope
- gamemode
- steam
- # TODO broken
- # lutris
- wineWowPackages.stable
- adwsteamgtk
- heroic
- mangohud
- nexusmods-app
- steamtinkerlaunch
- winetricks
- ];
- example = [];
- type = with lib.types; listOf package;
- description = "Install gaming related packages";
- };
- kernel = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Whether to use the CachyOS kernel.
- WARNING: This is a manual compiled kernel!
- (Please also ensure you use your own input hash for the source as the compilation can often fail due to temporary broken changes.)
- '';
- };
- steam = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use steam";
- };
- gamemode = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use gamemode";
- };
- pinCores = lib.mkOption {
- default = "false";
- example = "true";
- type = lib.types.str;
- description = "Pin Cores gamemode config";
- };
- parkCores = lib.mkOption {
- default = "false";
- example = "true";
- type = lib.types.str;
- description = "Park Cores gamemode config";
- };
- gpuOptimization = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use GPU performance setting. NOTE: this is at your own risk!";
- };
- gpuDevice = lib.mkOption {
- default = 0;
- example = 1;
- type = lib.types.int;
- description = "Your gpu device.(Physical id of lshw)";
- };
- scheduler = lib.mkOption {
- default = "scx_rustland";
- example = "scx_rusty";
- type = with lib.types;
- nullOr (enum [
- "scx_bpfland"
- "scx_chaos"
- "scx_cosmos"
- "scx_central"
- "scx_flash"
- "scx_flatcg"
- "scx_lavd"
- "scx_layered"
- "scx_mitosis"
- "scx_nest"
- "scx_p2dq"
- "scx_pair"
- "scx_prev"
- "scx_qmap"
- "scx_rlfifo"
- "scx_rustland"
- "scx_rusty"
- "scx_sdt"
- "scx_simple"
- "scx_tickless"
- "scx_userland"
- "scx_wd40"
- ]);
- description = "Scheduler to use, null disables this";
- };
- };
- config = lib.mkIf config.mods.gaming.enable (
- lib.optionalAttrs (options ? environment.systemPackages) {
- environment.systemPackages = config.mods.gaming.tools;
- boot.kernelPackages = lib.mkForce pkgs.cachyosKernels.linuxPackages-cachyos-latest;
- services.scx = lib.mkIf (config.mods.gaming.scheduler != null) {
- enable = true;
- inherit (config.mods.gaming) scheduler;
- };
-
- programs = {
- steam.enable = mkDashDefault config.mods.gaming.steam;
- gamemode.enable = true;
- gamemode = {
- settings = {
- general = {
- desiredgov = mkDashDefault "performance";
- };
- cpu = {
- pin_cores = mkDashDefault config.mods.gaming.pinCores;
- park_cores = mkDashDefault config.mods.gaming.parkCores;
- };
- gpu = lib.mkIf config.mods.gaming.gpuOptimization {
- apply_gpu_optimisations = mkDashDefault "accept-responsibility";
- gpu_device = mkDashDefault config.mods.gaming.gpuDevice;
- amd_performance_level = mkDashDefault "high";
- nv_powermizer_mode = mkDashDefault 1;
- };
- custom = {
- start = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations activated'";
- end = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations deactivated'";
- };
- };
- };
- };
- }
- );
-}
diff --git a/modules/programs/gdm.nix b/modules/programs/gdm.nix
deleted file mode 100644
index 343c6cd..0000000
--- a/modules/programs/gdm.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- lib,
- options,
- config,
- ...
-}: {
- options.mods.gdm = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the gdm displayManager";
- };
- extraOptions = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Extra options to be applied to the gnome config";
- };
- };
-
- config = lib.mkIf config.mods.gdm.enable (
- lib.optionalAttrs (options ? services.xserver.displayManager.gdm) (
- {
- services.xserver.enable = true;
- services.xserver.displayManager.gdm.enable = true;
- }
- // {
- services.xserver.displayManager.gdm = config.mods.gdm.extraOptions;
- }
- )
- );
-}
diff --git a/modules/programs/git.nix b/modules/programs/git.nix
deleted file mode 100644
index 57c1623..0000000
--- a/modules/programs/git.nix
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.git = {
- username = lib.mkOption {
- default = "";
- example = "globi";
- type = lib.types.str;
- description = "Git user name";
- };
- email = lib.mkOption {
- default = "";
- example = "globi@globus.glob";
- type = lib.types.str;
- description = "Git email";
- };
- additionalConfig = lib.mkOption {
- default = {
- merge = {
- tool = "nvimdiff";
- };
- diff = {
- tool = "nvimdiff";
- };
- pull.rebase = true;
- };
- example = {
- pull.rebase = false;
- };
- type = with lib.types; attrsOf anything;
- description = "Additional git config";
- };
- sshConfig = lib.mkOption {
- default = "";
- example = ''
- Host github.com
- ${
- if (config ? sops.secrets && config.sops.secrets ? hub.path)
- then "IdentityFile ${config.sops.secrets.hub.path}"
- else ""
- }
- '';
- type = lib.types.lines;
- description = "ssh configuration (keys for git)";
- };
- };
- config = lib.optionalAttrs (options ? programs.git && options ? home.file) {
- programs.git = {
- enable = true;
- settings =
- {
- user = {
- name = config.mods.git.username;
- inherit (config.mods.git) email;
- };
- }
- // config.mods.git.additionalConfig;
- };
- home.file.".ssh/config".text = config.mods.git.sshConfig;
- };
-}
diff --git a/modules/programs/gnome.nix b/modules/programs/gnome.nix
deleted file mode 100644
index faf2b1e..0000000
--- a/modules/programs/gnome.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- lib,
- options,
- config,
- pkgs,
- ...
-}: {
- options.mods.gnome = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the Gnome desktop environment";
- };
- useDefaultOptions = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default options provided by module. If disabled, will only apply extraOptions.";
- };
- extraOptions = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Extra options to be applied to the gnome config";
- };
- extraDconf = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Extra options to be applied to the dconf config";
- };
- };
-
- config = let
- defaultExtensions = with pkgs.gnomeExtensions; [
- blur-my-shell
- dash-to-dock
- tray-icons-reloaded
- ];
- in
- lib.mkIf config.mods.gnome.enable (
- lib.optionalAttrs (options ? services.xserver.desktopManager.gnome) (
- {
- services.xserver = {
- enable = true;
- desktopManager.gnome.enable = true;
- };
- }
- // lib.mkIf config.mods.gnome.useDefaultOptions {environment.systemPackages = defaultExtensions;}
- // {
- services.xserver.desktopManager.gnome = config.mods.gnome.extraOptions;
- }
- )
- // lib.optionalAttrs (options ? dconf) (
- lib.mkIf config.mods.gnome.useDefaultOptions {
- dconf = {
- enable = true;
- settings = {
- "org/gnome/shell" = {
- disable-user-extensions = false;
- enabled-extensions = map (extension: extension.extensionUuid) defaultExtensions;
- };
- "org/gnome/desktop/interface" = {
- cursor-theme = config.mods.stylix.cursor.name;
- cursor-size = config.mods.stylix.cursor.size;
- color-scheme = "prefer-dark";
- };
- };
- };
- }
- // {
- dconf = config.mods.gnome.extraDconf;
- }
- )
- );
-}
diff --git a/modules/programs/gnomeServices.nix b/modules/programs/gnomeServices.nix
deleted file mode 100644
index 29bdea8..0000000
--- a/modules/programs/gnomeServices.nix
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods = {
- gnomeServices.enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables gnome services: keyring and settings daemon.
- Note: Do not use these for environments which ship these functionalities by default: GNOME, KDE
- '';
- };
- nautilus.enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables and configures Nautilus
- '';
- };
- };
-
- config = lib.mkIf config.mods.gnomeServices.enable (
- lib.optionalAttrs (options ? services.gnome.gnome-keyring) {
- programs.dconf = {
- enable = true;
- profiles.user.databases = [
- {
- settings = {
- "org/gnome/desktop/interface" = {
- cursor-theme = config.mods.stylix.cursor.name;
- cursor-size = lib.gvariant.mkInt32 config.mods.stylix.cursor.size;
- color-scheme = "prefer-dark";
- };
- };
- }
- ];
- };
- environment.extraInit = ''
- export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/keyring/ssh"
- '';
- services = {
- # needed for GNOME services outside of GNOME Desktop
- dbus.packages = with pkgs; [
- gcr
- gnome-settings-daemon
- ];
-
- gnome.gnome-keyring.enable = true;
- gvfs.enable = true;
- };
- }
- // lib.optionalAttrs (options ? home.packages) {
- services.gnome-keyring.enable = true;
- dconf.settings = {
- "org/gnome/desktop/interface" = {
- cursor-theme = config.mods.stylix.cursor.name;
- cursor-size = config.mods.stylix.cursor.size;
- color-scheme = "prefer-dark";
- };
- };
- home = {
- packages = let
- packages = with pkgs; [
- gcr
- nautilus
- sushi
- nautilus-python
- nautilus-open-any-terminal
- ];
- in
- lib.mkIf config.mods.nautilus.enable packages;
- };
- }
- );
-}
diff --git a/modules/programs/gpu.nix b/modules/programs/gpu.nix
deleted file mode 100644
index 023b462..0000000
--- a/modules/programs/gpu.nix
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.gpu = {
- nvidia.enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables nvidia support.
- '';
- };
- amdgpu.enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables amdgpu support.
- '';
- };
- intelgpu.enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables intel support.
- '';
- };
- vapi = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables vapi.
- '';
- };
- rocm.enable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables rocm support.
- '';
- };
- };
- };
-
- config = lib.optionalAttrs (options ? boot) {
- boot = lib.mkIf config.mods.gpu.amdgpu.enable {
- kernelModules = ["kvm-amd"];
- initrd.kernelModules = ["amdgpu"];
- kernelParams = ["amdgpu.ppfeaturemask=0xffffffff"];
- };
- services.xserver.videoDrivers =
- if config.mods.gpu.amdgpu.enable
- then ["amdgpu"]
- else if config.mods.gpu.nvidia.enable
- then ["nvidia"]
- else [];
-
- environment.variables =
- if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable)
- then {
- RUSTICL_ENABLE = mkDashDefault "radeonsi";
- }
- else {};
-
- hardware = {
- nvidia = lib.mkIf config.mods.gpu.nvidia.enable {
- modesetting.enable = mkDashDefault true;
- open = mkDashDefault true;
- nvidiaSettings = mkDashDefault true;
- package = mkDashDefault config.boot.kernelPackages.nvidiaPackages.beta;
- };
- graphics = let
- amdPackages = [
- (lib.mkIf (config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt)
- (lib.mkIf (
- config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable
- )
- pkgs.intel-media-driver)
- (lib.mkIf config.mods.gpu.vapi.enable pkgs.libvdpau-va-gl)
- (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva)
- (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva-vdpau-driver)
- (lib.mkIf (config.mods.gpu.intelgpu.enable || config.mods.gpu.amdgpu.enable) pkgs.mesa)
- ];
- rocmPackages = [
- pkgs.rocmPackages.clr.icd
- pkgs.mesa
- pkgs.mesa.opencl
- pkgs.vulkan-loader
- pkgs.vulkan-validation-layers
- pkgs.vulkan-tools
- pkgs.clinfo
- ];
- in {
- enable = true;
- enable32Bit = mkDashDefault true;
- extraPackages =
- amdPackages
- ++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu.enable) rocmPackages);
- };
- };
- };
-}
diff --git a/modules/programs/greetd.nix b/modules/programs/greetd.nix
deleted file mode 100644
index fe3e455..0000000
--- a/modules/programs/greetd.nix
+++ /dev/null
@@ -1,164 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- inputs,
- pkgs,
- options,
- system,
- ...
-}: {
- options.mods = {
- greetd = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables the greetd login manager.
- '';
- };
- monitor = lib.mkOption {
- default =
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else "";
- example = "eDP-1";
- type = lib.types.str;
- description = ''
- main monitor for the login screen.
- By default the main monitor is used.
- '';
- };
- scale = lib.mkOption {
- default =
- if config.mods.wm.monitors != []
- then builtins.toString (builtins.elemAt config.mods.wm.monitors 0).scale
- else "";
- example = "1.5";
- type = lib.types.str;
- description = ''
- Scale used by the monitor in the login screen.
- By default the scale of the main monitor is used.
- '';
- };
- greeterCommand = lib.mkOption {
- default = "${
- lib.getExe inputs.hyprland.packages.${system}.hyprland
- } --config /etc/greetd/hyprgreet.conf";
- example = "${
- lib.getExe pkgs.cage
- } -s -- ${lib.getExe pkgs.regreet}";
- type = lib.types.str;
- description = "The compositor/greeter command to run";
- };
- resolution = lib.mkOption {
- default =
- if config.mods.wm.monitors != []
- then let
- resX = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionX;
- resY = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionY;
- refresh = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).refreshrate;
- in "${resX}x${resY}@${refresh}"
- else "";
- example = "3440x1440@180";
- type = lib.types.str;
- description = ''
- Resolution/refreshrate used by the monitor in the login screen.
- '';
- };
- environments = lib.mkOption {
- default = [
- (lib.mkIf config.mods.hypr.hyprland.enable inputs.hyprland.packages.${config.conf.system}.hyprland)
- (lib.mkIf config.mods.niri.enable pkgs.niri)
- ];
- # no idea if these are written correctly
- example = [
- pkgs.niri
- pkgs.river-classic
- pkgs.swayfx
- ];
- type = with lib.types; listOf package;
- description = ''
- List of environments that should be available in the login prompt.
- '';
- };
- regreet = {
- customSettings = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom regret settings. See https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml for more information.
- '';
- };
- };
- };
- };
-
- config = let
- inherit (config.conf) username;
- in
- lib.mkIf config.mods.greetd.enable (
- lib.optionalAttrs (options ? environment) {
- # greetd display manager
- programs.hyprland.enable = mkDashDefault true;
- services = {
- displayManager.sessionPackages = config.mods.greetd.environments;
- greetd = {
- enable = true;
- settings = {
- terminal.vt = mkDashDefault 1;
- default_session = {
- command = mkDashDefault config.mods.greetd.greeterCommand;
- user = mkDashDefault username;
- };
- };
- };
- };
-
- # should technically be the same, but this is configured instead in order to provide a decent out of the box login experience.
- environment.etc."greetd/hyprgreet.conf".text = ''
- monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale}
- monitor=,disable
-
- input {
- kb_layout = ${config.mods.xkb.layout}
- kb_variant = ${config.mods.xkb.variant}
- force_no_accel = true
- }
-
- misc {
- disable_splash_rendering = false
- disable_hyprland_logo = true
- disable_xdg_env_checks = true
- disable_scale_notification = true
- }
-
- env=STATE_DIR,var/cache/regreet
- env=CACHE_DIR,var/cache/regreet
- env=HYPRCURSOR_THEME,${config.mods.stylix.cursor.name}
- env=HYPRCURSOR_SIZE,${toString config.mods.stylix.cursor.size}
- env=XCURSOR_THEME,${config.mods.stylix.cursor.name}
- env=XCURSOR_SIZE,${toString config.mods.stylix.cursor.size}
- env=QT_QPA_PLATFORMTHEME,qt5ct
-
- exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css --config /home/${username}/.config/regreet/regreet.toml; hyprctl dispatch exit
- '';
-
- # unlock GPG keyring on login
- security.pam = {
- services.greetd = {
- enableGnomeKeyring = mkDashDefault true;
- sshAgentAuth = mkDashDefault true;
- };
- sshAgentAuth.enable = mkDashDefault true;
- };
- }
- // lib.optionalAttrs (options ? home) {
- xdg.configFile."regreet/regreet.toml".source =
- (pkgs.formats.toml {}).generate "regreet"
- config.mods.greetd.regreet.customSettings;
- }
- );
-}
diff --git a/modules/programs/homePackages.nix b/modules/programs/homePackages.nix
deleted file mode 100644
index 6a995f0..0000000
--- a/modules/programs/homePackages.nix
+++ /dev/null
@@ -1,154 +0,0 @@
-{
- lib,
- options,
- config,
- pkgs,
- ...
-}
-: {
- options.mods.homePackages = {
- useDefaultPackages = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default packages (will use additional_packages only if disabled)";
- };
- additionalPackages = lib.mkOption {
- default = [];
- example = [pkgs.flatpak];
- type = with lib.types; listOf package;
- description = ''
- Additional Home manager packages.
- Will be installed regardless of default home manager packages are installed.
- '';
- };
- specialPrograms = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- special program configuration to be added which require programs.something notation.
- '';
- };
- specialServices = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- special services configuration to be added which require an services.something notation.
- '';
- };
- matrixClient = lib.mkOption {
- default = pkgs.nheko;
- example = null;
- type = with lib.types; nullOr package;
- description = "The matrix client";
- };
- vesktop = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Adds the vesktop discord client";
- };
- ncspot = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Adds the ncspot spotify client";
- };
- orcaSlicer = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables orca slicer";
- };
- nextcloudClient = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Adds the full desktop nextcloud client (the nextcloud module in dashnix only provides the cli tool)";
- };
- mailClient = lib.mkOption {
- default = pkgs.thunderbird;
- example = null;
- type = with lib.types; nullOr package;
- description = "The email client";
- };
- browser = lib.mkOption {
- default = "zen";
- example = "firefox";
- type = with lib.types;
- nullOr (
- either (enum [
- "firefox"
- "zen"
- "librewolf"
- "chromium"
- "brave"
- ])
- package
- );
- description = "The browser (the enum variants have preconfigured modules)";
- };
- };
-
- config = lib.optionalAttrs (options ? home.packages) {
- home.packages =
- if config.mods.homePackages.useDefaultPackages
- then
- with pkgs;
- [
- (lib.mkIf config.mods.homePackages.ncspot ncspot)
- (lib.mkIf config.mods.homePackages.orcaSlicer orca-slicer)
- (lib.mkIf config.mods.homePackages.vesktop vesktop)
- (lib.mkIf config.mods.homePackages.nextcloudClient nextcloud-client)
- (lib.mkIf (config.mods.homePackages.matrixClient != null) config.mods.homePackages.matrixClient)
- (lib.mkIf (config.mods.homePackages.mailClient != null) config.mods.homePackages.mailClient)
- (lib.mkIf (
- # NOTE: This should be package, but nix doesn't have that....
- builtins.isAttrs config.mods.homePackages.browser && config.mods.homePackages.browser != null
- )
- config.mods.homePackages.browser)
- adw-gtk3
- bat
- brightnessctl
- dbus
- fastfetch
- fd
- ffmpeg
- flake-checker
- gnome-keyring
- gnutar
- regreet
- killall
- kitty
- libnotify
- lsd
- networkmanager
- nh
- nix-index
- playerctl
- poppler-utils
- pulseaudio
- libsForQt5.qt5ct
- qt6Packages.qt6ct
- fuc
- ripgrep
- rm-improved
- system-config-printer
- xournalpp
- zenith
- zoxide
- ]
- ++ config.mods.homePackages.additionalPackages
- else config.mods.homePackages.additionalPackages;
-
- xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml {}).generate "direnv" {
- global = {
- warn_timeout = "-1s";
- };
- };
- programs = config.mods.homePackages.specialPrograms;
- services = config.mods.homePackages.specialServices;
- };
-}
diff --git a/modules/programs/hypr/default.nix b/modules/programs/hypr/default.nix
deleted file mode 100644
index 68b88ea..0000000
--- a/modules/programs/hypr/default.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- imports = [
- ./hyprland.nix
- ./hyprlock.nix
- ./hyprpaper.nix
- ];
-}
diff --git a/modules/programs/hypr/hyprland.nix b/modules/programs/hypr/hyprland.nix
deleted file mode 100644
index 442b964..0000000
--- a/modules/programs/hypr/hyprland.nix
+++ /dev/null
@@ -1,357 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- options,
- pkgs,
- ...
-}: let
- defaultWmConf = import ../../../lib/wm.nix;
-in {
- options.mods.hypr.hyprland = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enable Hyprland
- '';
- };
- noAtomic = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Use tearing (Warning, can be buggy)
- '';
- };
- useIronbar = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Whether to use ironbar in hyprland.
- '';
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured Hyprland config.
- '';
- };
- customConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom Hyprland configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- plugins = lib.mkOption {
- default = [];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- Plugins to be added to Hyprland.
- '';
- };
- pluginConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Plugin configuration to be added to Hyprland.
- '';
- };
- hyprspaceEnable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables Hyprspace plugin for hyprland.
- Please note, plugins tend to break VERY often.
- '';
- };
- };
-
- config = lib.mkIf config.mods.hypr.hyprland.enable (
- lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
- # install Hyprland related packages
- home.packages = with pkgs; [
- xorg.xprop
- grim
- slurp
- satty
- xdg-desktop-portal-gtk
- xdg-desktop-portal-gnome
- kdePackages.xdg-desktop-portal-kde
- xdg-desktop-portal-shana
- copyq
- wl-clipboard
- hyprcursor
- hyprpicker
- ];
-
- wayland.windowManager.hyprland = let
- mkWorkspace = workspaces:
- builtins.map (workspace: let
- default =
- if workspace.default
- then ",default:true"
- else "";
- in "${workspace.name},monitor:${workspace.monitor}${default}")
- workspaces;
- mkTransform = transform:
- if transform == "0"
- then 0
- else if transform == "90"
- then 1
- else if transform == "180"
- then 2
- else if transform == "270"
- then 3
- else 4;
- mkVrr = vrr:
- if vrr
- then "1"
- else "0";
- mkMonitors = monitors:
- builtins.map (
- monitor: "${monitor.name},${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate},${builtins.toString monitor.positionX}x${builtins.toString monitor.positionY},${builtins.toString monitor.scale}, transform,${builtins.toString (mkTransform monitor.transform)}, vrr,${mkVrr monitor.vrr}"
- )
- monitors;
-
- mkMods = bind: let
- mods = bind.modKeys or [];
- in
- builtins.map (mod:
- if mod == "Mod"
- then (lib.strings.toUpper config.mods.wm.modKey) + " "
- else lib.strings.toUpper mod)
- mods
- |> lib.strings.concatStringsSep "";
- mkArgs = args:
- if args != []
- then (lib.strings.concatStringsSep " " args)
- else "";
- shouldRepeat = bind: bind ? meta && bind.meta ? hyprland && bind.meta.hyprland ? repeat && bind.meta.hyprland.repeat == true;
-
- defaultBinds = cfg:
- if cfg.mods.wm.useDefaultBinds
- then defaultWmConf.defaultBinds cfg
- else [];
-
- mkEBinds = cfg: let
- binds = cfg.mods.wm.binds ++ defaultBinds cfg;
- in
- binds
- |> builtins.filter (bind: bind ? command && shouldRepeat bind && !(hasInvalidCustomCommand bind))
- |> builtins.map (
- bind: "${mkMods bind},${bind.key},${mkCommand bind}"
- );
- mkBinds = cfg: let
- binds = cfg.mods.wm.binds ++ defaultBinds cfg;
- in
- binds
- |> builtins.filter (bind: bind ? command && !(shouldRepeat bind) && !(hasInvalidCustomCommand bind))
- |> builtins.map (
- bind: "${mkMods bind},${bind.key},${mkCommand bind}"
- );
- mkCommand = bind: let
- args = bind.args or [];
- in
- if bind.command == "quit"
- then "exit"
- else if bind.command == "killActive"
- then "killactive"
- else if bind.command == "moveWindowRight"
- then "movewindow,r"
- else if bind.command == "moveWindowDown"
- then "movewindow,d"
- else if bind.command == "moveWindowLeft"
- then "movewindow,l"
- else if bind.command == "moveWindowUp"
- then "movewindow,u"
- else if bind.command == "moveFocusUp"
- then "movefocus,u"
- else if bind.command == "moveFocusRight"
- then "movefocus,r"
- else if bind.command == "moveFocusDown"
- then "movefocus,d"
- else if bind.command == "moveFocusLeft"
- then "movefocus,l"
- else if bind.command == "toggleFloating"
- then "togglefloating"
- else if bind.command == "toggleFullscreen"
- then "fullscreen"
- else if bind.command == "focusWorkspace"
- then "workspace" + "," + mkArgs args
- else if bind.command == "moveToWorkspace"
- then "movetoworkspace" + "," + mkArgs args
- else if bind.command == "spawn"
- then "exec" + "," + mkArgs args
- else if bind.command == "spawn-sh"
- then "exec" + "," + mkArgs args
- else bind.command.hyprland + "," + mkArgs args;
- hasInvalidCustomCommand = bind: !(builtins.isString bind.command) && bind.command.hyprland or null == null;
-
- mkEnv = config: let
- defaultEnv =
- if config.mods.wm.useDefaultEnv
- then defaultWmConf.defaultEnv config
- else {
- all = {};
- hyprland = {};
- };
- userEnv =
- if config.mods.wm.env ? all
- then config.mods.wm.env.all // config.mods.wm.env.hyprland
- else config.mods.wm.env;
- env = userEnv // defaultEnv.all // defaultEnv.hyprland;
- in
- lib.attrsets.mapAttrsToList (
- name: value: "${name},${value}"
- )
- env;
- mkAutoStart = config: let
- defaultStartup =
- if config.mods.wm.useDefaultStartup
- then defaultWmConf.defaultStartup config
- else {
- all = [];
- hyprland = [];
- };
- userStartup =
- if config.mods.wm.startup ? all
- then config.mods.wm.startup.all ++ config.mods.wm.startup.hyprland
- else config.mods.wm.startup;
- autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.hyprland;
- in
- autoStart;
- mkWindowRule = config: let
- defaultWindowRules =
- if config.mods.wm.useDefaultWindowRules
- then defaultWmConf.defaultWindowRules.hyprland
- else [];
- in
- # defaultWindowRules ++ config.mods.wm.windowRules.hyprland;
- defaultWindowRules;
- in {
- enable = true;
- plugins =
- [
- (lib.mkIf config.mods.hypr.hyprland.hyprspaceEnable pkgs.hyprlandPlugins.hyprspace)
- ]
- ++ config.mods.hypr.hyprland.plugins;
- settings =
- if config.mods.hypr.hyprland.useDefaultConfig
- then
- lib.mkMerge
- [
- {
- "$mod" = mkDashDefault config.mods.wm.modKey;
-
- bindm = [
- "$mod, mouse:272, movewindow"
- "$mod, mouse:273, resizeactive"
- ];
-
- general = {
- gaps_out = mkDashDefault "3,5,5,5";
- border_size = mkDashDefault 3;
- "col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
- allow_tearing = lib.mkIf config.mods.hypr.hyprland.noAtomic true;
- };
-
- decoration = {
- rounding = mkDashDefault 4;
- };
-
- render = {
- direct_scanout = mkDashDefault config.mods.gaming.enable;
- };
-
- animations = {
- bezier = mkDashDefault "overshot, 0.05, 0.9, 0.1, 1.2";
- animation = [
- "windowsMove,1,4,default"
- "windows,1,3,overshot,slide bottom"
- "windowsOut,1,7,default,popin 70%"
- "border,1,4,default"
- "fade,1,7,default"
- "workspaces,1,4,default"
- "layers,1,2,default,slide"
- ];
- };
-
- dwindle = {
- preserve_split = mkDashDefault true;
- pseudotile = mkDashDefault 0;
- permanent_direction_override = mkDashDefault false;
- };
-
- input = {
- kb_layout = mkDashDefault "${config.mods.xkb.layout}";
- kb_variant = mkDashDefault "${config.mods.xkb.variant}";
- repeat_delay = mkDashDefault 200;
- force_no_accel = mkDashDefault true;
- touchpad = {
- natural_scroll = mkDashDefault true;
- tap-to-click = mkDashDefault true;
- tap-and-drag = mkDashDefault true;
- };
- };
-
- misc = {
- animate_manual_resizes = mkDashDefault 1;
- enable_swallow = mkDashDefault true;
- disable_splash_rendering = mkDashDefault true;
- disable_hyprland_logo = mkDashDefault true;
- disable_xdg_env_checks = mkDashDefault true;
- disable_scale_notification = mkDashDefault true;
- swallow_regex = mkDashDefault "^(.*)(kitty)(.*)$";
- initial_workspace_tracking = mkDashDefault 1;
- # just doesn't work
- enable_anr_dialog = false;
- };
-
- cursor = {
- enable_hyprcursor = mkDashDefault true;
- no_hardware_cursors = mkDashDefault (
- if config.mods.gpu.nvidia.enable
- then 2
- else 0
- );
- # done with nix, this would break the current setup otherwise
- sync_gsettings_theme = mkDashDefault false;
- };
-
- gesture = [
- "3, horizontal, workspace"
- ];
-
- layerrule = [
- # layer rules
- # mainly to disable animations within slurp and grim
- "match:namespace selection, no_anim on"
- ];
-
- workspace = mkWorkspace config.mods.wm.workspaces;
- monitor = mkMonitors config.mods.wm.monitors;
- env = mkEnv config;
- bind = mkBinds config;
- binde = mkEBinds config;
- windowrule = mkWindowRule config;
- exec-once = mkAutoStart config;
- plugin = config.mods.hypr.hyprland.pluginConfig;
- }
- config.mods.hypr.hyprland.customConfig
- ]
- else lib.mkForce config.mods.hypr.hyprland.customConfig;
- };
- }
- );
-}
diff --git a/modules/programs/hypr/hyprlock.nix b/modules/programs/hypr/hyprlock.nix
deleted file mode 100644
index c152b22..0000000
--- a/modules/programs/hypr/hyprlock.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- config,
- lib,
- options,
- pkgs,
- ...
-}: {
- options.mods.hypr.hyprlock = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables Hyprlock";
- };
- config = lib.mkOption {
- default = {
- background = [
- {
- monitor = "";
- path = "";
- color = "rgba(26, 27, 38, 1.0)";
- }
- ];
-
- input-field = [
- {
- monitor = "${
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else ""
- }";
- placeholder_text = "password or something";
- }
- ];
-
- label = [
- {
- monitor = "${
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else ""
- }";
- text = "$TIME";
- font_size = 50;
- position = "0, 200";
- valign = "center";
- halign = "center";
- }
- ];
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "config";
- };
- };
-
- config = lib.mkIf config.mods.hypr.hyprlock.enable (
- lib.optionalAttrs (options ? xdg.configFile) {
- stylix.targets.hyprlock = {
- enable = false;
- };
- home.packages = with pkgs; [hyprlock];
- programs.hyprlock = lib.mkIf config.mods.hypr.hyprlock.enable {
- enable = true;
- settings = config.mods.hypr.hyprlock.config;
- };
- }
- );
-}
diff --git a/modules/programs/hypr/hyprpaper.nix b/modules/programs/hypr/hyprpaper.nix
deleted file mode 100644
index b392b54..0000000
--- a/modules/programs/hypr/hyprpaper.nix
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- config,
- lib,
- options,
- pkgs,
- ...
-}: {
- options.mods.hypr.hyprpaper = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables Hyprpaper";
- };
- config = lib.mkOption {
- default = "";
- example = ''
- preload = path/to/wallpaper
- wallpaper = YOURMONITOR,path/to/wallpaper
- '';
- type = lib.types.lines;
- description = ''
- Hyprpaper config
- '';
- };
- };
-
- config = lib.mkIf config.mods.hypr.hyprpaper.enable (
- lib.optionalAttrs (options ? xdg.configFile) {
- home.packages = with pkgs; [hyprpaper];
- xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hypr.hyprpaper.enable {
- text = config.mods.hypr.hyprpaper.config;
- };
- }
- );
-}
diff --git a/modules/programs/ironbar.nix b/modules/programs/ironbar.nix
deleted file mode 100644
index b955d51..0000000
--- a/modules/programs/ironbar.nix
+++ /dev/null
@@ -1,552 +0,0 @@
-{
- lib,
- config,
- pkgs,
- inputs,
- options,
- mkDashDefault,
- ...
-}: let
- inherit (config.conf) username;
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- ironbarDefaultConfig = useBatteryModule: {
- end = [
- (lib.mkIf useBatteryModule
- {
- type = "battery";
- class = "battery";
- icon_size = 0;
- format = "{percentage}%";
- thresholds = {
- warning = 20;
- critical = 5;
- };
- })
- {
- class = "music";
- type = "music";
- format = "";
- truncate = {
- mode = "end";
- max_length = 0;
- };
- icons = {
- play = "";
- pause = "";
- };
- truncate_popup_title = {
- mode = "end";
- max_length = 15;
- };
- truncate_popup_album = {
- mode = "end";
- max_length = 15;
- };
- truncate_popup_artist = {
- mode = "end";
- max_length = 15;
- };
- }
- {
- bar = [
- {
- class = "popup-button";
- label = "";
- on_click = "popup:toggle";
- type = "button";
- }
- ];
- class = "popup-button-box";
- popup = [
- {
- class = "audio-box";
- orientation = "vertical";
- type = "box";
- widgets = [
- {
- class = "audio-button-box";
- orientation = "horizontal";
- type = "box";
- widgets = [
- {
- class = "audio-button";
- label = "";
- on_click = "!audioControl bluetooth";
- type = "button";
- }
- {
- class = "audio-button";
- label = "";
- on_click = "!audioControl internal";
- type = "button";
- }
- ];
- }
- {
- class = "audio-label";
- label = "Output";
- type = "label";
- }
- {
- class = "audio-slider";
- length = 200;
- on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
- step = 1.0;
- type = "slider";
- value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
- label = "{{pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }'}}";
- }
- {
- class = "audio-label";
- label = "Input";
- type = "label";
- }
- {
- class = "audio-slider";
- length = 200;
- on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
- step = 1.0;
- type = "slider";
- value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
- }
- ];
- }
- ];
- type = "custom";
- }
- {
- bar = [
- {
- class = "popup-button";
- label = "";
- on_click = "!oxidash";
- type = "button";
- }
- ];
- class = "popup-button-box";
- type = "custom";
- }
- {
- bar = [
- {
- class = "popup-button";
- label = "";
- on_click = "popup:toggle";
- type = "button";
- }
- ];
- type = "custom";
- class = "popup-button-box";
- popup = [
- {
- class = "system-box";
- type = "box";
- widgets = [
- {
- class = "memory-usage";
- format = [
- " {cpu_percent}%"
- " {memory_used} / {memory_total} GB ({memory_percent}%)"
- " {swap_used} / {swap_total} GB ({swap_free} | {swap_percent}%)"
- " {uptime}"
- ];
- direction = "vertical";
- interval = {
- memory = 30;
- cpu = 5;
- temps = 5;
- disks = 5;
- network = 5;
- };
- type = "sys_info";
- }
- ];
- }
- ];
- }
- {
- type = "tray";
- }
- ];
- position = "top";
- height = 10;
- anchor_to_edges = true;
- start = [
- {
- type = "workspaces";
- all_monitors = true;
- }
- ];
- center = [
- {
- format = "%I:%M";
- format_popup = "%a %d:%m/%I:%M %p";
- locale = "en_US";
- type = "clock";
- }
- ];
- };
- monitorConfig = useBatteryModule:
- if config.mods.ironbar.ironbarSingleMonitor
- then {
- monitors.${
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else ""
- } =
- ironbarDefaultConfig useBatteryModule;
- }
- else ironbarDefaultConfig useBatteryModule;
-in {
- options.mods = {
- ironbar = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables ironbar";
- };
- ironbarSingleMonitor = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Whether to use ironbar on a single monitor.
- '';
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured ironbar config.
- '';
- };
- useBatteryModule = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Whether to use the preconfigured battery module.";
- };
- customConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom ironbar configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- useDefaultCss = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured ironbar css.
- '';
- };
- customCss = lib.mkOption {
- default = '''';
- example = ''
- #window {
- border-radius: none;
- }
- '';
- type = lib.types.lines;
- description = ''
- Custom ironbar css.
- Will be merged with default css if enabled.
- '';
- };
- };
- };
- config = lib.mkIf (config.mods.ironbar.enable || config.mods.hypr.hyprland.useIronbar) (
- lib.optionalAttrs (options ? programs.ironbar) {
- programs.ironbar = {
- package = mkDashDefault pkgs.ironbar;
- enable = true;
- style =
- if config.mods.ironbar.useDefaultCss
- then
- /*
- css
- */
- ''
- @import url("/home/${username}/.config/gtk-3.0/gtk.css");
-
- @define-color primary #${scheme.base0D};
- @define-color warning #${scheme.base0F};
- @define-color muted-text #${scheme.base05};
- @define-color background #${scheme.base00};
- @define-color secondary-background #${scheme.base02};
-
- * slider {
- background-color: @muted-text;
- }
-
- * {
- transition:
- background-color 0.15s ease-in-out,
- color 0.15s ease-in-out,
- border-color 0.15s ease-in-out;
- }
-
- .background {
- background-color: rgba(0, 0, 0, 0);
- padding: 0px;
- margin: 0px;
- }
-
- .focused {
- padding: 0px 5px;
- background-color: @background;
- font-size: 17px;
- border-radius: 10px;
- }
-
- #bar #end {
- margin: 0px 5px;
- padding: 0px 5px;
- background-color: @background;
- border-radius: 10px;
- }
-
- .popup-button {
- padding: 0px 5px 0px 2px;
- border-radius: 100%;
- font-size: 13px;
- background-color: @background;
- }
-
- .popup-button-box {
- padding: 2px 0px;
- margin-right: 4px;
- }
-
- .custom button {
- background-color: @background;
- color: @primary;
- }
-
- .custom button:hover {
- background-color: @secondary-background;
- }
-
- /* audio */
- .audio-box * {
- color: @primary;
- }
-
- .audio-box {
- padding: 2em;
- background-color: @background;
- border-radius: 5px;
- border: 1px solid @primary;
- }
-
- .audio-slider {
- padding: 5px;
- margin: 5px 5px 15px;
- }
-
- .audio-label {
- font-size: 19px;
- }
-
- .audio-button {
- padding: 10px 10px 10px 8px;
- min-height: 35px;
- min-width: 35px;
- margin: 0px 1em;
- border-radius: 50%;
- font-size: 25px;
- }
-
- .audio-button-box {
- padding: 0px 2.5em 0px 2.5em;
- margin: 0em 0em 1.5em;
- }
-
- /* clock */
- .clock {
- padding: 0px 5px;
- font-size: 20px;
- border-radius: 5px;
- background-color: @background;
- color: @primary;
- }
-
- .clock:hover {
- background-color: @secondary-background;
- }
-
- .popup-clock {
- font-size: 2.5em;
- background-color: @background;
- border: 1px solid @primary;
- padding: 0.5em;
- border-radius: 8px;
- color: @primary;
- }
-
- .popup-clock .calendar-clock {
- margin: 0.25em 0em 0.75em;
- color: @primary;
- }
-
- .popup-clock .calendar {
- font-size: 24px;
- color: @primary;
- }
-
- .popup-clock .calendar:selected {
- background-color: @secondary-background;
- }
-
- /* workspaces */
- .workspaces {
- margin: 0px 0px 0px 5px;
- border-radius: 10px;
- background-color: @background;
- padding: 2px 5px;
- }
-
- .workspaces .item {
- margin: 0px 3px;
- font-size: 13px;
- border-radius: 100%;
- padding: 0px 3px 0px 3px;
- background-color: rgba(0, 0, 0, 0);
- color: @primary;
- }
-
- .workspaces .item:hover {
- background-color: @secondary-background;
- color: @primary;
- }
-
- .workspaces .item:not(.visible) {
- color: @warning;
- }
-
- .workspaces .item.focused {
- background-color: @primary;
- color: @background;
- }
-
- /* battery */
- .battery {
- font-size: 13px;
- padding: 0px 4px 0px 0px;
- margin: 2px 0px 2px 0px;
- background-color: @background;
- color: @primary;
- }
-
- .battery .icon {
- opacity: 0.0;
- }
-
- .battery .label {
- margin: 2px 0px 0px -8px;
- color: @primary;
- }
-
- .battery:hover {
- background-color: @secondary-background;
- border-radius: 5px;
- }
-
- .popup-battery {
- background-color: @background;
- color: @primary;
- border-radius: 8px;
- border: 1px solid @primary;
- padding: 16px;
- font-size: 20px;
- }
-
- /* music */
- .music {
- font-size: 13px;
- padding: 0px 4px 0px 3px;
- margin: 2px 0px 2px 0px;
- background-color: @background;
- color: @primary;
- }
-
- .music:hover {
- background-color: @secondary-background;
- border-radius: 100%;
- }
-
- .music .contents .icon {
- margin: 0px 0px 0px 5px;
- }
-
- .popup-music {
- background-color: @background;
- color: @primary;
- border-radius: 8px;
- border: 1px solid @primary;
- padding: 16px;
- font-size: 20px;
- }
-
- .popup-music .controls .btn-prev {
- color: @primary;
- margin-right: 16px;
- }
-
- .popup-music .controls .btn-next {
- color: @primary;
- margin-right: 16px;
- }
-
- .popup-music .controls .btn-play {
- color: @primary;
- margin-right: 16px;
- }
-
- .popup-music .controls .btn-pause {
- color: @primary;
- margin-right: 16px;
- }
-
- /* system */
- .system-box {
- padding: 16px;
- color: @primary;
- border: 1px solid @primary;
- background-color: @background;
- border-radius: 8px;
- }
-
- .memory-usage {
- font-size: 15px;
- color: @primary;
- }
-
- .memory-usage:hover {
- background-color: @secondary-background;
- }
- ''
- + config.mods.ironbar.customCss
- else config.mods.ironbar.customCss;
- features = [
- #"another_feature"
- ];
- config =
- if config.mods.ironbar.useDefaultConfig
- then
- lib.mkMerge
- [
- (monitorConfig config.mods.ironbar.useBatteryModule)
- config.mods.ironbar.customConfig
- ]
- else config.mods.ironbar.customConfig;
- };
- }
- );
-}
diff --git a/modules/programs/kde.nix b/modules/programs/kde.nix
deleted file mode 100644
index f81194d..0000000
--- a/modules/programs/kde.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- lib,
- options,
- config,
- ...
-}: {
- options.mods.kde = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the KDE desktop environment";
- };
- };
-
- config = lib.mkIf config.mods.kde.enable (
- lib.optionalAttrs (options ? services.desktopManager.plasma6) {
- # apparently kde integration is bad -> kdeconfig is too much even for nix, can't blame them :)
- services.desktopManager.plasma6.enable = true;
- }
- );
-}
diff --git a/modules/programs/kdeConnect.nix b/modules/programs/kdeConnect.nix
deleted file mode 100644
index 46b12e8..0000000
--- a/modules/programs/kdeConnect.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods = {
- kdeConnect.enable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables kde_connect.
- '';
- };
- };
-
- config = lib.mkIf config.mods.kdeConnect.enable (
- lib.optionalAttrs (options ? networking.firewall) {
- networking.firewall = {
- allowedTCPPortRanges = [
- {
- from = 1714;
- to = 1764;
- }
- # KDE Connect
- ];
- allowedUDPPortRanges = [
- {
- from = 1714;
- to = 1764;
- }
- # KDE Connect
- ];
- };
- }
- // lib.optionalAttrs (options ? home.packages) {
- home.packages = with pkgs; [kdePackages.kdeconnect-kde];
- }
- );
-}
diff --git a/modules/programs/keepassxc.nix b/modules/programs/keepassxc.nix
deleted file mode 100644
index d8c0c6a..0000000
--- a/modules/programs/keepassxc.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.keepassxc = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the piper program and its daemon";
- };
- useConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to overwrite the config of keepassxc. Note, this means that changes can't be applied via the program anymore!";
- };
- config = lib.mkOption {
- default = ''
- [General]
- ConfigVersion=2
-
- [Browser]
- Enabled=true
-
- [GUI]
- ApplicationTheme=classic
- HidePasswords=true
- MinimizeOnClose=true
- MinimizeToTray=true
- ShowTrayIcon=true
- TrayIconAppearance=monochrome-light
-
- [PasswordGenerator]
- Length=30
-
- [Security]
- EnableCopyOnDoubleClick=true
- '';
- example = "";
- type = lib.types.lines;
- description = "Cache config to be used.";
- };
- useCacheConfig = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Whether to overwrite the cache config of keepassxc. Note, this means that changes can't be applied via the program anymore!";
- };
- cacheConfig = lib.mkOption {
- default = '''';
- example = ''
- [General]
- LastDatabases=/path/to/database
- '';
- type = lib.types.lines;
- description = "Cache config to be used.";
- };
- };
- config = lib.mkIf config.mods.keepassxc.enable (
- lib.optionalAttrs (options ? home.file) {
- home.packages = [pkgs.keepassxc];
- xdg.configFile."keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useConfig {
- text = config.mods.keepassxc.config;
- };
-
- home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useCacheConfig {
- text = config.mods.keepassxc.cacheConfig;
- };
- }
- );
-}
diff --git a/modules/programs/kitty.nix b/modules/programs/kitty.nix
deleted file mode 100644
index ab2ae5a..0000000
--- a/modules/programs/kitty.nix
+++ /dev/null
@@ -1,129 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- inputs,
- ...
-}: let
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- hexTable = {
- "0" = "1";
- "1" = "0";
- "2" = "1";
- "3" = "2";
- "4" = "3";
- "5" = "4";
- "6" = "5";
- "7" = "6";
- "8" = "7";
- "9" = "8";
- "a" = "9";
- "b" = "a";
- "c" = "b";
- "d" = "c";
- "e" = "d";
- "f" = "e";
- };
- # don't ask :)
- base =
- "#"
- + lib.strings.concatStrings (
- (lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00))
- ++ [hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}"]
- );
-in {
- options.mods.kitty = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables kitty";
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enable default config for kitty";
- };
- additionalConfig = lib.mkOption {
- default = {};
- example = {
- # for the insane people out there :P
- enable_audio_bell = "yes";
- };
- type = with lib.types; attrsOf anything;
- description = "Additional kitty configuration. Will be the only configuration if useDefaultConfig is disabled.";
- };
- };
- config = lib.mkIf config.mods.kitty.enable (
- lib.optionalAttrs (options ? home.packages) {
- stylix.targets.kitty = {
- enable = false;
- };
- programs.kitty = {
- enable = true;
- settings =
- if config.mods.kitty.useDefaultConfig
- then
- {
- enable_audio_bell = "no";
- window_alert_on_bell = "no";
- cursor_blink_interval = "0";
- window_padding_width = "1";
- shell_integration = "yes";
- sync_with_monitor = "no";
- background_opacity = "0.8";
-
- font_family = "${config.mods.stylix.fonts.monospace.name}";
- bold_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold";
- italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Italic";
- bold_italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold Italic";
-
- background = base;
- foreground = "#" + scheme.base05;
- selection_foreground = "#" + scheme.base05;
- selection_background = base;
- url_color = "#" + scheme.base04;
- cursor = "#" + scheme.base05;
- active_border_color = "#" + scheme.base03;
- inactive_border_color = "#" + scheme.base01;
- active_tab_background = base;
- active_tab_foreground = "#" + scheme.base05;
- inactive_tab_background = "#" + scheme.base01;
- inactive_tab_foreground = "#" + scheme.base04;
- tab_bar_background = "#" + scheme.base01;
-
- mark1_foreground = "#" + scheme.base00;
- mark1_background = "#" + scheme.base07;
- mark2_foreground = "#" + scheme.base00;
- mark2_background = "#" + scheme.base0E;
- mark3_foreground = "#" + scheme.base00;
- mark3_background = "#" + scheme.base08;
-
- color0 = "#" + scheme.base03;
- color1 = "#" + scheme.base08;
- color2 = "#" + scheme.base0B;
- color3 = "#" + scheme.base0A;
- color4 = "#" + scheme.base0D;
- color5 = "#" + scheme.base06;
- color6 = "#" + scheme.base0C;
- color7 = "#" + scheme.base07;
-
- color8 = "#" + scheme.base04;
- color9 = "#" + scheme.base08;
- color10 = "#" + scheme.base0B;
- color11 = "#" + scheme.base0A;
- color12 = "#" + scheme.base0D;
- color13 = "#" + scheme.base06;
- color14 = "#" + scheme.base0C;
- color15 = "#" + scheme.base0B;
- shell = lib.mkIf config.mods.fish.enable "fish";
- }
- // config.mods.kitty.additionalConfig
- else config.mods.kitty.additionalConfig;
- };
- }
- );
-}
diff --git a/modules/programs/media.nix b/modules/programs/media.nix
deleted file mode 100644
index c37d62b..0000000
--- a/modules/programs/media.nix
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- lib,
- options,
- config,
- pkgs,
- ...
-}: {
- options.mods.media = {
- useBasePackages = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Default media packages (If disabled, only the additional packages will be installed)";
- };
- additionalPackages = lib.mkOption {
- default = [];
- example = [pkgs.flatpak];
- type = with lib.types; listOf package;
- description = ''
- Additional media packages.
- '';
- };
- specialPrograms = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- special program configuration to be added which require programs.something notation.
- '';
- };
- specialServices = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- special services configuration to be added which require an services.something notation.
- '';
- };
- filePickerPortal = lib.mkOption {
- default = "Term";
- example = "Gnome";
- type = with lib.types; oneOf [(enum ["Gnome" "Kde" "Lxqt" "Gtk" "Term" "Default"]) str];
- description = ''
- The file picker portal to use (set with shana).
- Default removes the config, allowing you to set it yourself.
- '';
- };
- termFileChooserConfig = lib.mkOption {
- default = {
- cmd = "${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh";
- default_dir = "$HOME";
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Termfilechooser config
- '';
- };
- };
- config = lib.optionalAttrs (options ? home.packages) {
- xdg.configFile."xdg-desktop-portal-termfilechooser/config" = lib.mkIf (config.mods.media.filePickerPortal != "Term") {
- source = (pkgs.formats.ini {}).generate "termchooser" {
- filechooser = config.mods.media.termFileChooserConfig;
- };
- };
- xdg.configFile."xdg-desktop-portal-shana/config.toml" = lib.mkIf (config.mods.media.filePickerPortal != "Default") {
- source = let
- name =
- if (config.mods.media.filePickerPortal == "Term")
- then "org.freedesktop.impl.portal.desktop.termfilechooser"
- else config.mods.media.filePickerPortal;
- in
- (pkgs.formats.toml {}).generate "shana" {
- open_file = name;
- save_file = name;
- save_files = name;
- };
- };
- home.packages =
- if config.mods.media.useBasePackages
- then
- with pkgs;
- [
- # base audio
- pipewire
- wireplumber
- # audio control
- playerctl
- # images
- eog
- # videos
- mpv
- # pdf
- zathura
- evince
- libreoffice-fresh
- onlyoffice-desktopeditors
- pdftk
- pdfpc
- polylux2pdfpc
- # spotify
- # video editing
- kdePackages.kdenlive
- # image creation
- inkscape
- gimp
- krita
- yt-dlp
- ]
- ++ config.mods.media.additionalPackages
- else config.mods.media.additionalPackages;
- programs =
- if config.mods.media.useBasePackages
- then
- {
- obs-studio.enable = true;
- obs-studio.plugins = with pkgs; [obs-studio-plugins.obs-vaapi];
- }
- // config.mods.media.specialPrograms
- else config.mods.media.specialPrograms;
- services = config.mods.media.specialServices;
- };
-}
diff --git a/modules/programs/mime.nix b/modules/programs/mime.nix
deleted file mode 100644
index 4da7aff..0000000
--- a/modules/programs/mime.nix
+++ /dev/null
@@ -1,161 +0,0 @@
-# Copyright (c) 2020-2021 Mihai Fufezan
-# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix
-{
- mkDashDefault,
- config,
- lib,
- options,
- ...
-}: let
- browserName =
- if (builtins.isString config.mods.homePackages.browser)
- then config.mods.homePackages.browser
- else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram
- then config.mods.homePackages.browser.meta.mainProgram
- else config.mods.homePackages.browser.pname;
-in {
- options.mods.mime = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables mime handling with nix";
- };
- imageTypes = lib.mkOption {
- default = [
- "png"
- "svg"
- "jpeg"
- "gif"
- ];
- example = [];
- type = with lib.types; listOf str;
- description = "Image mime handlers";
- };
- videoTypes = lib.mkOption {
- default = [
- "mp4"
- "avi"
- "mkv"
- ];
- example = [];
- type = with lib.types; listOf str;
- description = "Video mime handlers";
- };
- audioTypes = lib.mkOption {
- default = [
- "mp3"
- "flac"
- "wav"
- "aac"
- ];
- example = [];
- type = with lib.types; listOf str;
- description = "Audio mime handlers";
- };
- browserTypes = lib.mkOption {
- default = [
- "json"
- "x-extension-htm"
- "x-extension-html"
- "x-extension-shtml"
- "x-extension-xht"
- "x-extension-xhtml"
- ];
- example = [];
- type = with lib.types; listOf str;
- description = "Browser mime handlers";
- };
- browserXTypes = lib.mkOption {
- default = [
- "about"
- "ftp"
- "http"
- "https"
- "unknown"
- ];
- example = [];
- type = with lib.types; listOf str;
- description = "Browser X mime handlers";
- };
- browserApplications = lib.mkOption {
- default = ["${browserName}"];
- example = [];
- type = with lib.types; listOf str;
- description = "Applications used for handling browser mime types";
- };
- imageApplications = lib.mkOption {
- default = ["eog"];
- example = [];
- type = with lib.types; listOf str;
- description = "Applications used for handling image mime types";
- };
- videoApplications = lib.mkOption {
- default = ["mpv"];
- example = [];
- type = with lib.types; listOf str;
- description = "Applications used for handling video mime types";
- };
- audioApplications = lib.mkOption {
- default = ["io.bassi.Amberol"];
- example = [];
- type = with lib.types; listOf str;
- description = "Applications used for handling audio mime types";
- };
- # TODO additional config
- };
- config = lib.optionalAttrs (options ? home) {
- xdg = let
- xdgAssociations = type: program: list:
- builtins.listToAttrs (
- map (e: {
- name = "${type}/${e}";
- value = program;
- })
- list
- );
-
- imageAc = xdgAssociations "image" config.mods.mime.imageApplications config.mods.mime.imageTypes;
- videoAc = xdgAssociations "video" config.mods.mime.videoApplications config.mods.mime.videoTypes;
- audioAc = xdgAssociations "audio" config.mods.mime.audioApplications config.mods.mime.audioTypes;
- browserAc =
- (xdgAssociations "application" config.mods.mime.browserApplications config.mods.mime.browserTypes)
- // (
- xdgAssociations "x-scheme-handler" config.mods.mime.browserApplications
- config.mods.mime.browserXTypes
- );
- associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) (
- # TODO make configurable
- {
- "application/pdf" = ["org.pwmt.zathura-pdf-mupdf"];
- "text/html" = config.mods.mime.browserApplications;
- "text/plain" = ["neovide"];
- "x-scheme-handler/chrome" = ["com.brave.browser"];
- "inode/directory" = ["yazi"];
- }
- // imageAc
- // audioAc
- // videoAc
- // browserAc
- );
- in
- lib.mkIf config.mods.mime.enable {
- enable = true;
- cacheHome = config.home.homeDirectory + "/.local/cache";
-
- mimeApps = {
- enable = true;
- defaultApplications = associations;
- };
-
- userDirs = {
- enable = mkDashDefault true;
- createDirectories = mkDashDefault true;
- extraConfig = {
- XDG_SCREENSHOTS_DIR = mkDashDefault "${config.xdg.userDirs.pictures}/Screenshots";
- pws = mkDashDefault "${config.home.homeDirectory}/pws";
- };
- };
- };
- };
-}
diff --git a/modules/programs/ncspot.nix b/modules/programs/ncspot.nix
deleted file mode 100644
index b998942..0000000
--- a/modules/programs/ncspot.nix
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.ncspot = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables ncspot with a config";
- };
- config = lib.mkOption {
- default = {
- notify = true;
- shuffle = true;
- cover_max_scale = 2;
- initial_screen = "library";
- library_tabs = ["playlists"];
- theme = {
- background = "#1a1b26";
- primary = "#9aa5ce";
- secondary = "#414868";
- title = "#9ece6a";
- playing = "#7aa2f7";
- playing_selected = "#bb9af7";
- playing_bg = "#24283b";
- highlight = "#c0caf5";
- highlight_bg = "#24283b";
- error = "#414868";
- error_bg = "#f7768e";
- statusbar = "#ff9e64";
- statusbar_progress = "#7aa2f7";
- statusbar_bg = "#1a1b26";
- cmdline = "#c0caf5";
- cmdline_bg = "#24283b";
- search_match = "#f7768e";
- };
- keybindings = {
- "j" = "move left 1";
- "k" = "move down 1";
- "l" = "move up 1";
- ";" = "move right 1";
- };
- notification_format = {
- title = "%artists";
- body = "%title";
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "config";
- };
- };
- config = lib.mkIf config.mods.ncspot.enable (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = with pkgs; [ncspot];
- xdg.configFile."ncspot/config.toml".source =
- lib.mkIf config.mods.ncspot.useConfig (pkgs.formats.toml {}).generate "ncspot" config.mods.ncspot.config;
- }
- );
-}
diff --git a/modules/programs/nextcloud.nix b/modules/programs/nextcloud.nix
deleted file mode 100644
index 31216ee..0000000
--- a/modules/programs/nextcloud.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{lib, ...}: {
- options.mods = {
- nextcloud = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enable nextcloud";
- };
- username = lib.mkOption {
- default = "";
- example = "globi";
- type = lib.types.str;
- description = "Your username";
- };
- url = lib.mkOption {
- default = "";
- example = "cloud.globi.org";
- type = lib.types.str;
- description = "Your url";
- };
- synclist = lib.mkOption {
- default = [];
- example = [
- {
- name = "sync globi folder";
- remote = "globi";
- local = "/home/globi";
- }
- ];
- description = ''
- A list of folders to synchronize.
- This has to be an attribute list with the name, remote and local field (all strings).
- '';
- };
- };
- };
-}
diff --git a/modules/programs/niri.nix b/modules/programs/niri.nix
deleted file mode 100644
index 0531829..0000000
--- a/modules/programs/niri.nix
+++ /dev/null
@@ -1,392 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- options,
- pkgs,
- ...
-}: let
- defaultWmConf = import ../../lib/wm.nix;
-in {
- options.mods.niri = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enable Niri
- '';
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured Niri config.
- '';
- };
- customConfig = lib.mkOption {
- default = '''';
- example = '''';
- type = lib.types.lines;
- description = ''
- Custom Niri configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- };
-
- config = lib.mkIf config.mods.niri.enable (
- lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
- # TODO deduplicate and abstract away base window management config
- # install Niri related packages
- home.packages = with pkgs; [
- xorg.xprop
- grim
- slurp
- satty
- xdg-desktop-portal-gtk
- xdg-desktop-portal-gnome
- kdePackages.xdg-desktop-portal-kde
- xdg-desktop-portal-shana
- copyq
- wl-clipboard
-
- niri
- xwayland-satellite
- ];
-
- xdg.configFile."niri/config.kdl" = let
- mkNiriMod = mods:
- builtins.map (mod:
- if mod == "Mod"
- then config.mods.wm.modKey + "+"
- else "${mod}" + "+")
- mods
- |> lib.strings.concatStringsSep "";
- mkNiriArg = args:
- if args != []
- then let
- concatCommand = lib.strings.concatStringsSep " " args;
- validCommand = builtins.replaceStrings [''"''] [''\"''] concatCommand;
- in "\"${validCommand}\""
- else "";
- mkNiriCommand = bind: let
- args = bind.args or [];
- in
- if bind.command == "quit"
- then "quit;"
- else if bind.command == "killActive"
- then "close-window;"
- else if bind.command == "moveFocusTop"
- then "focus-window-up;"
- else if bind.command == "focusWorkspace"
- then "focus-workspace" + " " + mkNiriArg args + ";"
- else if bind.command == "moveWindowRight"
- then "move-column-right-or-to-monitor-right;"
- else if bind.command == "moveWindowDown"
- then "move-window-down;"
- else if bind.command == "moveWindowLeft"
- then "move-column-left-or-to-monitor-left;"
- else if bind.command == "moveWindowUp"
- then "move-window-up;"
- else if bind.command == "moveFocusUp"
- then "focus-window-up;"
- else if bind.command == "moveFocusRight"
- then "focus-column-or-monitor-right;"
- else if bind.command == "moveFocusDown"
- then "focus-window-down;"
- else if bind.command == "moveFocusLeft"
- then "focus-column-or-monitor-left;"
- else if bind.command == "toggleFloating"
- then "toggle-window-floating;"
- else if bind.command == "toggleFullscreen"
- then "fullscreen-window;"
- else if bind.command == "moveToWorkspace"
- then "move-window-to-workspace" + " " + mkNiriArg args + ";"
- else if bind.command == "spawn"
- then "spawn" + " " + mkNiriArg args + ";"
- else if bind.command == "spawn-sh"
- then "spawn-sh" + " " + mkNiriArg args + ";"
- else if bind.command.niri != null
- then bind.command.niri + " " + mkNiriArg args + ";"
- else "";
-
- mkNiriBinds = cfg:
- '' binds {
- ''
- + (
- (
- builtins.map (
- bind:
- /*
- kdl
- */
- if bind ? key && bind ? command
- then ''
- ${mkNiriMod (bind.modKeys or [])}${bind.key} ${
- if
- bind ? meta
- && bind.meta ? niri
- then
- (
- if
- bind.meta.niri ? desc
- && bind.meta.niri.desc != ""
- then "hotkey-overlay-title=\"" + bind.meta.niri.desc + "\""
- else ""
- )
- + " "
- + (
- if
- bind.meta.niri ? repeat
- && bind.meta.niri.repeat
- then "repeat=true"
- else "repeat=false"
- )
- + " "
- + (
- if
- bind.meta.niri ? allowWhileLocked
- && bind.meta.niri.allowWhileLocked
- then "allow-when-locked=true"
- else ""
- )
- + " "
- + (
- if
- bind.meta.niri ? allowInhibit
- && bind.meta.niri.allowInhibit
- then "allow-inhibiting=true"
- else "allow-inhibiting=false"
- )
- else ""
- } { ${
- mkNiriCommand bind
- } }
- ''
- else ''''
- )
- ((
- cfg.mods.wm.binds
- ++ (
- if cfg.mods.wm.useDefaultBinds
- then defaultWmConf.defaultBinds cfg
- else []
- )
- )
- |> builtins.filter (bind: !(hasInvalidCustomCommand bind)))
- )
- |> lib.strings.concatLines
- )
- + ''
- }
- '';
- mkVrr = vrr:
- if vrr
- then "true"
- else "false";
- mkNiriMonitors = cfg:
- (builtins.map (
- monitor:
- # TODO vrr
- /*
- kdl
- */
- ''
- output "${monitor.name}" {
- variable-refresh-rate on-demand=${mkVrr monitor.vrr}
- mode "${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate}"
- scale ${builtins.toString monitor.scale}
- transform "${
- if (monitor.transform == "0")
- then "normal"
- else monitor.transform
- }"
- position x=${builtins.toString monitor.positionX} y=${builtins.toString monitor.positionY}
- }
- ''
- )
- cfg.mods.wm.monitors)
- |> lib.strings.concatLines;
- mkNiriWorkspaces = cfg:
- (builtins.map (
- workspace:
- /*
- kdl
- */
- ''
- workspace "${workspace.name}" {
- open-on-output "${workspace.monitor}"
- }
- ''
- )
- cfg.mods.wm.workspaces)
- |> lib.strings.concatLines;
- mkNiriWindowRules = cfg: (
- (
- builtins.map (
- rule:
- /*
- kdl
- */
- ''
- window-rule {
- ${rule}
- }
- ''
- )
- (
- cfg.mods.wm.windowRules.niri
- ++ (
- if cfg.mods.wm.useDefaultWindowRules
- then defaultWmConf.defaultWindowRules.niri
- else []
- )
- )
- )
- |> lib.strings.concatLines
- );
- hasInvalidCustomCommand = bind: !(bind ? command) || (!(builtins.isString bind.command) && bind.command.niri or null == null);
- mkNiriEnv = config: let
- defaultEnv =
- if config.mods.wm.useDefaultEnv
- then defaultWmConf.defaultEnv config
- else {
- all = {};
- niri = {};
- };
- userEnv =
- if config.mods.wm.env ? all
- then config.mods.wm.env.all // config.mods.wm.env.niri
- else config.mods.wm.env;
- env =
- userEnv
- // defaultEnv.all
- // defaultEnv.niri;
- in
- ''
- environment {
- ''
- + (
- lib.attrsets.mapAttrsToList (
- name: value: "${name} \"${value}\""
- )
- env
- |> lib.strings.concatLines
- )
- + ''
- }
- '';
- mkNiriAutoStart = config: let
- defaultStartup =
- if config.mods.wm.useDefaultStartup
- then defaultWmConf.defaultStartup config
- else {
- all = {};
- niri = {};
- };
- userStartup =
- if config.mods.wm.startup ? all
- then config.mods.wm.startup.all ++ config.mods.wm.startup.niri
- else config.mods.wm.startup;
- autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.niri;
- in
- (builtins.map (value: "spawn-at-startup \"${value}\"")
- autoStart)
- |> lib.strings.concatLines;
- defaultConfig =
- /*
- kdl
- */
- ''
- input {
- keyboard {
- xkb {
- layout "enIntUmlaut"
- }
- repeat-delay 200
- repeat-rate 25
- numlock
- }
-
- touchpad {
- tap
- natural-scroll
- }
-
- mouse {
- accel-speed 0.2
- accel-profile "flat"
- }
-
- focus-follows-mouse max-scroll-amount="25%"
- }
-
- layout {
- // Set gaps around windows in logical pixels.
- gaps 10
- center-focused-column "never"
- always-center-single-column
-
- preset-column-widths {
- proportion 0.33333
- proportion 0.5
- proportion 1.0
- }
-
- default-column-width { proportion 0.5; }
- focus-ring {
- width 3
- inactive-color "#505050"
- active-gradient from="#ff0000" to="#00ff00" angle=45
- }
-
- border {
- off
- }
-
- // You can enable drop shadows for windows.
- shadow {
- on
- softness 30
- spread 5
- offset x=0 y=5
- color "#0007"
- }
- }
-
- ${
- if config.mods.gpu.nvidia.enable
- then ''
- debug {
- wait-for-frame-completion-before-queueing
- }
- ''
- else ''''
- }
-
- // Autostart
-
- hotkey-overlay {
- skip-at-startup
- }
-
- prefer-no-csd
- ''
- + mkNiriMonitors config
- + mkNiriBinds config
- + mkNiriWorkspaces config
- + mkNiriWindowRules config
- + mkNiriEnv config
- + mkNiriAutoStart config;
- in
- mkDashDefault {
- text =
- if config.mods.niri.useDefaultConfig
- then defaultConfig + config.mods.niri.customConfig
- else config.mods.niri.customConfig;
- };
- }
- );
-}
diff --git a/modules/programs/onedrive.nix b/modules/programs/onedrive.nix
deleted file mode 100644
index 56bd79d..0000000
--- a/modules/programs/onedrive.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- config,
- lib,
- options,
- pkgs,
- ...
-}: {
- options.mods = {
- onedrive = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enable onedrive program and service";
- };
- };
- };
- config = lib.mkIf config.mods.onedrive.enable (
- lib.optionalAttrs (options ? environment) {
- services.onedrive.enable = true;
- environment.systemPackages = [pkgs.onedrive];
- }
- );
-}
diff --git a/modules/programs/oxi/default.nix b/modules/programs/oxi/default.nix
deleted file mode 100644
index 83c4f23..0000000
--- a/modules/programs/oxi/default.nix
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- lib,
- config,
- options,
- inputs,
- ...
-}: {
- imports = [
- ./oxidash.nix
- ./oxinoti.nix
- ./oxipaste.nix
- ./oxirun.nix
- ./oxishut.nix
- ];
- options.mods.oxi = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables oxi programs";
- };
- ReSet = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables and configures ReSet";
- };
- };
- hyprdock = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables hyprdock";
- };
- settings = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "settings for hyprdock";
- };
- };
- oxicalc = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables hyprdock";
- };
- };
- };
- config = lib.mkIf config.mods.oxi.enable (
- lib.optionalAttrs (options ? home.packages) {
- programs = {
- hyprdock = {
- inherit (config.mods.oxi.hyprdock) enable;
- inherit (config.mods.oxi.hyprdock) settings;
- };
- oxicalc.enable = lib.mkIf config.mods.oxi.oxicalc.enable true;
- ReSet = lib.mkIf config.mods.oxi.ReSet.enable {
- enable = true;
- config = {
- plugins = [
- inputs.reset-plugins.packages."x86_64-linux".monitor
- inputs.reset-plugins.packages."x86_64-linux".keyboard
- ];
- plugin_config = {
- Keyboard = {
- path = "/home/${config.conf.username}/.config/reset/keyboard.conf";
- };
- };
- };
- };
- };
- }
- // lib.optionalAttrs (options ? services.logind && options ? services.logind.settings) {
- services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore";
- }
- );
-}
diff --git a/modules/programs/oxi/oxidash.nix b/modules/programs/oxi/oxidash.nix
deleted file mode 100644
index 9ea519e..0000000
--- a/modules/programs/oxi/oxidash.nix
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- inputs,
- ...
-}: let
- # at time of using this here, stylix might not be evaluated yet
- # hence ensure it is by using base16 mkSchemeAttrs
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
-in {
- options.mods.oxi.oxidash = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables and configures oxidash";
- };
- };
- config = lib.mkIf (config.mods.oxi.oxidash.enable && config.mods.oxi.enable) (
- lib.optionalAttrs (options ? xdg.configFile) {
- programs.oxidash.enable = true;
- xdg.configFile."oxidash/style.css" = {
- text = ''
- @define-color bg #${scheme.base00};
- @define-color primary #${scheme.base0D};
-
- #MainWindow {
- border-radius: 10px;
- background-color: transparent;
- }
-
- #MainBox {
- border-radius: 10px;
- border: 1px solid @primary;
- background-color: @bg;
- }
-
- #MainButtonBox {
- padding: 10px;
- margin: 5px 0px 5px 0px;
- border-radius: 5px;
- border: solid 1px @primary;
- }
-
- #DoNotDisturbButton {}
-
- #ExitButton {}
-
- #ClearNotificationsButton {}
-
- #NotificationsWindow {}
-
- .debugimage {
- border: solid 3px @primary;
- }
-
- .Notification {
- padding: 10px;
- margin: 5px 0px 5px 0px;
- border: solid 1px @primary;
- border-radius: 5px;
- }
-
- .CloseNotificationButton {
- margin: 0px 5px 0px 10px;
- }
-
- .PictureButtonBox {}
-
- .BaseBox {}
- }
- '';
- };
- }
- );
-}
diff --git a/modules/programs/oxi/oxinoti.nix b/modules/programs/oxi/oxinoti.nix
deleted file mode 100644
index d265af3..0000000
--- a/modules/programs/oxi/oxinoti.nix
+++ /dev/null
@@ -1,129 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- inputs,
- ...
-}: let
- # at time of using this here, stylix might not be evaluated yet
- # hence ensure it is by using base16 mkSchemeAttrs
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
-in {
- options.mods.oxi.oxinoti = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables and configures oxinoti";
- };
- };
- config = lib.mkIf (config.mods.oxi.oxinoti.enable && config.mods.oxi.enable) (
- lib.optionalAttrs (options ? xdg.configFile) {
- programs.oxinoti.enable = true;
- xdg.configFile."oxinoti/style.css" = {
- text =
- # css
- ''
- @import url("/home/dashie/.config/gtk-3.0/gtk.css");
-
- @define-color bg #${scheme.base00};
- @define-color bghover #${scheme.base02};
- @define-color primary #${scheme.base0D};
- @define-color red #${scheme.base08};
- @define-color green #${scheme.base0B};
-
- #MainWindow {
- background-color: transparent;
- padding: 0px;
- /* opacity: 0; */
- }
-
- .MainBox {
- background-color: transparent;
- padding: 0px;
- /* opacity: 0; */
- }
-
- .NotificationBox {
- background-color: @bg;
- border-radius: 5px;
- border: solid 1px;
- margin: 0px;
- }
-
- .NotificationBox button {
- background-color: @bg;
- }
-
- .NotificationBox button:hover {
- background-color: @bghover;
- }
-
- .NotificationLow {
- border-color: @green;
- }
-
- .NotificationNormal {
- border-color: @primary;
- }
-
- .NotificationUrgent {
- border-color: @red;
- }
-
- .miscbox {
- margin: 0px 10px 0px 0px;
- }
-
- .bodybox {}
-
- .imagebox {
- margin: 0px 0px 0px 10px;
- }
-
- .appname {
- font-size: 0.8rem;
- }
-
- .timestamp {
- font-size: 0.8rem;
- }
-
- .summary {
- font-size: 0.8rem;
- }
-
- .body {
- font-size: 1.2rem;
- }
-
- .icon {
- font-size: 2rem;
- }
-
- .image {}
-
- .bold {
- font-weight: bold;
- }
-
- .italic {
- font-style: italic;
- }
-
- .underline {
- text-decoration-line: underline;
- }
- '';
- };
- xdg.configFile."oxinoti/oxinoti.toml" = {
- text = ''
- timeout = 3
- dnd_override = 2
- '';
- };
- }
- );
-}
diff --git a/modules/programs/oxi/oxipaste.nix b/modules/programs/oxi/oxipaste.nix
deleted file mode 100644
index 4ec7b1d..0000000
--- a/modules/programs/oxi/oxipaste.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.oxi.oxipaste = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables and configures oxipaste";
- };
- };
- config = lib.mkIf (config.mods.oxi.oxipaste.enable && config.mods.oxi.enable) (
- lib.optionalAttrs (options ? xdg.configFile) {
- programs.oxipaste.enable = true;
- xdg.configFile."oxipaste/style.css" = {
- text = ''
- .main-window {
- padding: 10px;
- border-radius: 10px;
- border: 2px solid #2AC3DE;
- }
-
- .item-window {
- padding: 10px;
- border-radius: 10px;
- border: 2px solid #C0CAF5;
- }
-
- .item-button {
- background-color: #1A1B26;
- border-radius: 5px;
- border: 1px solid #6D728D;
- }
-
- .delete-button {
- margin: 5px 25px 5px 5px;
- }
-
- .item-box {
- }
- '';
- };
- }
- );
-}
diff --git a/modules/programs/oxi/oxirun.nix b/modules/programs/oxi/oxirun.nix
deleted file mode 100644
index 55f4d75..0000000
--- a/modules/programs/oxi/oxirun.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.oxi.oxirun = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables OxiRun";
- };
- };
- config = lib.mkIf (config.mods.oxi.oxirun.enable && config.mods.oxi.enable) (
- lib.optionalAttrs (options ? xdg.configFile) {
- programs.oxirun.enable = true;
- }
- );
-}
diff --git a/modules/programs/oxi/oxishut.nix b/modules/programs/oxi/oxishut.nix
deleted file mode 100644
index 25ebe0b..0000000
--- a/modules/programs/oxi/oxishut.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.oxi.oxishut = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables and configures oxishut";
- };
- };
- config = lib.mkIf (config.mods.oxi.oxishut.enable && config.mods.oxi.enable) (
- lib.optionalAttrs (options ? xdg.configFile) {
- programs.oxishut.enable = true;
- xdg.configFile."oxishut/style.css" = {
- text = ''
- #mainwindow {
- border-radius: 10px;
- }
-
- .mainbox {
- border-radius: 5px;
- padding: 20px;
- }
-
- .button {
- margin: 5px;
- background-color: #2b2c3b;
- -gtk-icon-size: 5rem;
- }
-
- .button:hover {
- background-color: #3e4152;
- }
- '';
- };
- }
- );
-}
diff --git a/modules/programs/piper.nix b/modules/programs/piper.nix
deleted file mode 100644
index 24beced..0000000
--- a/modules/programs/piper.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.piper = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the piper program and its daemon";
- };
- };
- config = lib.mkIf config.mods.piper.enable (
- lib.optionalAttrs (options ? services.ratbagd) {services.ratbagd.enable = true;}
- // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [piper];}
- );
-}
diff --git a/modules/programs/plymouth.nix b/modules/programs/plymouth.nix
deleted file mode 100644
index af9c615..0000000
--- a/modules/programs/plymouth.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.plymouth = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the plymouth";
- };
- };
- config = lib.mkIf config.mods.plymouth.enable (
- lib.optionalAttrs (options ? boot.plymouth) {boot.plymouth.enable = true;}
- );
-}
diff --git a/modules/programs/printing.nix b/modules/programs/printing.nix
deleted file mode 100644
index 98bbe4f..0000000
--- a/modules/programs/printing.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.printing = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the piper program and its daemon";
- };
- };
- config = lib.mkIf config.mods.printing.enable (
- lib.optionalAttrs (options ? services.printing) {
- # Enable CUPS to print documents.
- environment.systemPackages = with pkgs; [
- simple-scan
- ];
- hardware.sane.enable = true;
- services = {
- printing = {
- enable = true;
- browsing = true;
- drivers = [pkgs.hplip];
- startWhenNeeded = true; # optional
- };
- avahi = {
- enable = true;
- nssmdns4 = true;
- openFirewall = true;
- };
- };
- }
- );
-}
diff --git a/modules/programs/scripts.nix b/modules/programs/scripts.nix
deleted file mode 100644
index 98eb26b..0000000
--- a/modules/programs/scripts.nix
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.scripts = {
- changeBrightness = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the change-brightness script";
- };
- audioControl = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the audioControl script";
- };
- scripts = lib.mkOption {
- default = [];
- example = [];
- description = "More scripts to be passed. (check existing ones for types and examples)";
- };
- };
- config = lib.optionalAttrs (options ? home.packages) {
- home.packages =
- [
- (lib.mkIf config.mods.scripts.changeBrightness (
- pkgs.writeShellScriptBin "changeBrightness" ''
- brightnessctl set "$1"
- CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}')
- notify-send -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ''${CURRENT}%"
- ''
- ))
- (lib.mkIf config.mods.scripts.audioControl (
- pkgs.writeShellScriptBin "audioControl" ''
- ncspot() {
- NUM=$(pactl list clients short | rg "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n')
- CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n')
- pactl set-sink-input-volume "$CHANGE" "$1"
- VOLUME=$(pactl list sink-inputs | rg "$NUM" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%')
- notify-send -a "ncspot" -r 990 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Spotify Volume: ''${VOLUME}%"
- }
-
- firefox() {
- STRING=$(pactl list clients short | rg "firefox" | awk -F 'PipeWire' ' { print $1 "," } ' | tr -d ' \t\n')
- # NUMS=',' read -r -a array <<< "$STRING"
- readarray -td, NUMS <<<"$STRING"
- declare -p NUMS
- for index in "''${!NUMS[@]}"; do #"''${!array[@]}"
- NUM=$(echo "''${NUMS[index]}" | tr -d ' \t\n')
- CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n')
- pactl set-sink-input-volume "$CHANGE" "$1"
- done
- VOLUME=$(pactl list sink-inputs | rg "''${NUMS[0]}" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%')
- notify-send -a "Firefox" -r 991 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Firefox Volume: ''${VOLUME}%"
- }
-
- internal() {
- SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }')
- if [ "$SPEAKER" != "" ]; then
- pactl set-default-sink "$SPEAKER"
- pactl set-sink-mute "$SPEAKER" false
- DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ')
- notify-send "changed audio to "$DEVICE" "
- else
- notify-send "failed, not available!"
- fi
- }
-
- set_volume_sink() {
- pactl set-sink-volume @DEFAULT_SINK@ "$1"
- CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %')
- notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Output Volume: ''${CURRENT}%"
- }
-
- set_volume_source() {
- pactl set-source-volume @DEFAULT_SOURCE@ "$1"
- CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %')
- notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Input Volume: ''${CURRENT}%"
- }
-
- bluetooth() {
- SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }')
- if [ "$SPEAKER" != "" ]; then
- pactl set-default-sink "$SPEAKER"
- pactl set-sink-mute "$SPEAKER" false
- DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ')
- notify-send "changed audio to "$DEVICE" "
- else
- notify-send "failed, not available!"
- fi
- }
-
- mute() {
- pactl set-sink-mute @DEFAULT_SINK@ toggle
- MUTE=$(pactl get-sink-mute @DEFAULT_SINK@)
- notify-send -a "Audio" -r 994 -u low -i audio-volume-high "Audio: $MUTE"
- }
-
- if [ "$1" == "internal" ]; then
- internal
- elif [ "$1" == "bluetooth" ]; then
- bluetooth
- elif [ "$1" == "firefox" ]; then
- firefox "$2"
- elif [ "$1" == "ncspot" ]; then
- ncspot "$2"
- elif [ "$1" == "mute" ]; then
- mute
- elif [ "$1" == "sink" ]; then
- set_volume_sink "$2"
- elif [ "$1" == "source" ]; then
- set_volume_source "$2"
- fi
- ''
- ))
- ]
- ++ config.mods.scripts.scripts;
- };
-}
diff --git a/modules/programs/sddm.nix b/modules/programs/sddm.nix
deleted file mode 100644
index 57328d4..0000000
--- a/modules/programs/sddm.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- lib,
- options,
- config,
- ...
-}: {
- options.mods.sddm = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the sddm displayManager";
- };
- useDefaultOptions = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default options provided by module. If disabled, will only apply extraOptions.";
- };
- extraOptions = lib.mkOption {
- default = {};
- example = {
- wayland.enable = false;
- };
- type = with lib.types; attrsOf anything;
- description = "Extra options to be applied to the sddm config";
- };
- };
-
- config = lib.mkIf config.mods.sddm.enable (
- lib.optionalAttrs (options ? services.displayManager.sddm) (
- {
- services.displayManager.sddm.enable = true;
- }
- // lib.mkIf config.mods.sddm.useDefaultOptions {
- services.displayManager.sddm.wayland.enable = true;
- }
- // {
- services.displayManager.sddm = config.mods.sddm.extraOptions;
- }
- )
- );
-}
diff --git a/modules/programs/sops.nix b/modules/programs/sops.nix
deleted file mode 100644
index 5897eaa..0000000
--- a/modules/programs/sops.nix
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- lib,
- pkgs,
- config,
- options,
- root,
- ...
-}: {
- options.mods.sops = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enable sops secrets";
- };
- secrets = lib.mkOption {
- default = {};
- example = {
- hub = {};
- lab = {};
- ${config.conf.username} = {};
- nextcloud = {};
- access = {};
- };
- type = with lib.types; attrsOf anything;
- description = "secrets for sops";
- };
- sopsPath = lib.mkOption {
- default = root + /secrets/secrets.yaml;
- example = "/your/path";
- type = with lib.types;
- oneOf [
- str
- path
- ];
- description = "sops secrets path";
- };
- validateSopsFile = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to validate the sops file -> set this to false when using full paths";
- };
- };
- config = lib.mkIf config.mods.sops.enable (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = with pkgs; [sops];
- sops = {
- gnupg = {
- home = "~/.gnupg";
- sshKeyPaths = [];
- };
- defaultSopsFile = config.mods.sops.sopsPath;
- validateSopsFiles = config.mods.sops.validateSopsFile;
- secrets = config.mods.sops.secrets;
- };
-
- systemd.user.services.mbsync.Unit.After = ["sops-nix.service"];
- }
- );
-}
diff --git a/modules/programs/starship.nix b/modules/programs/starship.nix
deleted file mode 100644
index de86504..0000000
--- a/modules/programs/starship.nix
+++ /dev/null
@@ -1,175 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- pkgs,
- inputs,
- ...
-}: {
- options.mods = {
- starship = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables starship prompt
- '';
- };
- useDefaultPrompt = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enables preconfigured prompt
- '';
- };
- customPrompt = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom configuration for prompt.
- Will be merged with preconfigured prompt if that is used.
- '';
- };
- };
- };
-
- # environment.systemPackages needed in order to configure systemwide
- config = lib.mkIf config.mods.starship.enable (
- lib.optionalAttrs (options ? environment.systemPackages) {
- programs.starship = let
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- code_format = "[](bg:prev_bg fg:#5256c3)[ $symbol ($version)](bg:#5256c3)";
- in {
- enable = true;
- interactiveOnly = mkDashDefault true;
- presets = lib.mkIf config.mods.starship.useDefaultPrompt ["pastel-powerline"];
- settings =
- lib.mkIf config.mods.starship.useDefaultPrompt {
- # derived from https://starship.rs/presets/pastel-powerline
- format = "$username$directory$git_branch$git_status$git_metrics[ ](bg:none fg:prev_bg)";
- right_format = "$c$elixir$elm$golang$gradle$haskell$java$julia$nodejs$nim$rust$scala$python$ocaml$opa$perl$zig$dart$dotnet$nix_shell$shell$solidity[](bg:prev_bg fg:#3465A4)$time$os";
- username = {
- show_always = false;
- style_user = "bg:#5277C3 fg:#${scheme.base05}";
- style_root = "bg:#5277C3 fg:#${scheme.base05}";
- format = "[ $user ]($style)[](bg:#3465A4 fg:#5277C3)";
- disabled = false;
- };
- os = {
- symbols = {
- NixOS = " ";
- };
- style = "bg:#3465A4 fg:#${scheme.base05}";
- disabled = false;
- };
- directory = {
- style = "bg:#3465A4 fg:#${scheme.base05}";
- format = "[ $path ]($style)";
- truncation_length = 3;
- truncation_symbol = "…/";
- };
- git_branch = {
- always_show_remote = true;
- symbol = "";
- style = "bg:#5256c3 fg:#${scheme.base05}";
- format = "[ ](bg:#5256c3 fg:prev_bg)[$symbol ($remote_name )$branch ]($style)";
- };
- git_status = {
- staged = "+\${count} (fg:#C4A000)";
- ahead = "⇡\${count} (fg:#C4A000)";
- diverged = "⇕⇡\${count} (fg:#C4A000)";
- behind = "⇣\${count} (fg:#C4A000)";
- stashed = " ";
- untracked = "?\${count} (fg:#C4A000)";
- modified = "!\${count} (fg:#C4A000)";
- deleted = "✘\${count} (fg:#C4A000)";
- conflicted = "=\${count} (fg:#C4A000)";
- renamed = "»\${count} (fg:#C4A000)";
- style = "bg:#5256c3 fg:fg:#C4A000";
- format = "[$all_status$ahead_behind]($style)";
- };
- git_metrics = {
- disabled = false;
- format = "([| ](bg:#5256c3)[+$added]($added_style bg:#5256c3)[ -$deleted]($deleted_style bg:#5256c3))";
- };
- c = {
- format = code_format;
- };
- elixir = {
- format = code_format;
- };
- elm = {
- format = code_format;
- };
- golang = {
- format = code_format;
- };
- gradle = {
- format = code_format;
- };
- haskell = {
- format = code_format;
- };
- java = {
- format = code_format;
- };
- julia = {
- format = code_format;
- };
- nodejs = {
- format = code_format;
- };
- nim = {
- format = code_format;
- };
- nix_shell = {
- symbol = "";
- format = code_format;
- };
- rust = {
- format = code_format;
- };
- scala = {
- format = code_format;
- };
- typst = {
- format = code_format;
- };
- python = {
- format = code_format;
- };
- ocaml = {
- format = code_format;
- };
- opa = {
- format = code_format;
- };
- perl = {
- format = code_format;
- };
- zig = {
- format = code_format;
- };
- dart = {
- format = code_format;
- };
- dotnet = {
- format = code_format;
- };
- time = {
- disabled = false;
- time_format = "%R"; # Hour:Minute Format
- style = "bg:#3465A4 fg:#${scheme.base05}";
- format = "[ $time ]($style)";
- };
- }
- // config.mods.starship.customPrompt;
- };
- }
- );
-}
diff --git a/modules/programs/streamcontroller.nix b/modules/programs/streamcontroller.nix
deleted file mode 100644
index 544367f..0000000
--- a/modules/programs/streamcontroller.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods = {
- streamcontroller = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables streamcontroller
- '';
- };
- configFilePath = lib.mkOption {
- default = null;
- type = with lib.types; nullOr path;
- description = ''
- Path to the config json for the streamcontroller.
- -> ./something.json
- '';
- };
- };
- };
-
- config = lib.mkIf config.mods.streamcontroller.enable (
- lib.optionalAttrs (options ? environment.systemPackages) {
- programs.streamcontroller.enable = true;
- }
- // (lib.optionalAttrs (options ? home.file) {
- home.file.".var/app/com.core447.StreamController/data/pages/defaultpage.json" =
- lib.mkIf
- (!isNull config.mods.streamcontroller.configFilePath)
- {source = config.mods.streamcontroller.configFilePath;};
- })
- );
-}
diff --git a/modules/programs/stylix.nix b/modules/programs/stylix.nix
deleted file mode 100644
index dd11e8c..0000000
--- a/modules/programs/stylix.nix
+++ /dev/null
@@ -1,131 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- unstable,
- inputs,
- pkgs,
- ...
-}: let
- svg = ../../assets/rainbow.svg;
- sd = lib.getExe pkgs.sd;
- base16 = pkgs.callPackage inputs.base16.lib {};
- mkWallpaper = schemeStr: let
- scheme = base16.mkSchemeAttrs schemeStr;
- in
- pkgs.runCommand "rainbow.png" {} ''
- cat ${svg} \
- | ${sd} '#f9e2af' '#${scheme.base0A}' \
- | ${sd} '#fab387' '#${scheme.base09}' \
- | ${sd} '#f38ba8' '#${scheme.base08}' \
- | ${sd} '#89b4fa' '#${scheme.base0D}' \
- | ${sd} '#cba6f7' '#${scheme.base0E}' \
- | ${sd} '#a6e3a1' '#${scheme.base0B}' \
- | ${sd} '#1e1e2e' '#${scheme.base00}' \
- | ${lib.getExe pkgs.imagemagick} svg:- png:$out
- '';
-in {
- options.mods.stylix = {
- colorscheme = lib.mkOption {
- default = "catppuccin-mocha";
- example = {
- # custom tokyo night
- base00 = "1A1B26";
- base01 = "191a25";
- base02 = "2F3549";
- base03 = "444B6A";
- base04 = "787C99";
- base05 = "A9B1D6";
- base06 = "CBCCD1";
- base07 = "D5D6DB";
- base08 = "C0CAF5";
- base09 = "A9B1D7";
- base0A = "0DB9D7";
- base0B = "9ECE6A";
- base0C = "B4F9F8";
- base0D = "366fea";
- base0E = "BB9AF7";
- base0F = "F7768E";
- };
- type = with lib.types;
- oneOf [
- str
- attrs
- path
- ];
- description = ''
- Base16 colorscheme.
- Can be an attribute set with base00 to base0F,
- a string that leads to a yaml file in base16-schemes path,
- or a path to a custom yaml file.
-
- Also supports the oxiced theme in an oxiced attrset.
- '';
- };
- cursor = lib.mkOption {
- default = {
- package = pkgs.bibata-cursors;
- name = "Bibata-Modern-Classic";
- size = 24;
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Xcursor config";
- };
- fonts = lib.mkOption {
- default = {
- serif = {
- package = unstable.adwaita-fonts;
- name = "Adwaita Sans";
- };
-
- sansSerif = {
- package = unstable.adwaita-fonts;
- name = "Adwaita Sans";
- };
-
- monospace = {
- package = unstable.nerd-fonts.jetbrains-mono;
- name = "JetBrainsMono Nerd Font Mono";
- };
-
- emoji = {
- package = pkgs.noto-fonts-color-emoji;
- name = "Noto Color Emoji";
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "font config";
- };
- };
- config = let
- scheme =
- if builtins.isAttrs config.mods.stylix.colorscheme
- then config.mods.stylix.colorscheme
- else "${pkgs.base16-schemes}/share/themes/${config.mods.stylix.colorscheme}.yaml";
- in
- (lib.optionalAttrs (options ? stylix) {
- stylix = {
- enable = true;
- image = mkDashDefault (mkWallpaper scheme);
- polarity = mkDashDefault "dark";
- targets = {
- nixvim.enable = mkDashDefault false;
- fish.enable = mkDashDefault false;
- };
- fonts = config.mods.stylix.fonts;
- cursor = config.mods.stylix.cursor;
- base16Scheme = scheme;
- };
- })
- // lib.optionalAttrs (options ? environment.systemPackages) {
- environment.systemPackages = [
- config.mods.stylix.fonts.serif.package
- config.mods.stylix.fonts.sansSerif.package
- config.mods.stylix.fonts.monospace.package
- config.mods.stylix.fonts.emoji.package
- ];
- };
-}
diff --git a/modules/programs/superfreq.nix b/modules/programs/superfreq.nix
deleted file mode 100644
index f031e2f..0000000
--- a/modules/programs/superfreq.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- lib,
- options,
- config,
- ...
-}: {
- options.mods.superfreq = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''Enables superfreq'';
- };
- settings = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''Superfreq config'';
- };
- };
-
- config = lib.optionalAttrs (options ? services.superfreq) {
- services.superfreq = {
- enable = config.mods.superfreq.enable;
- settings = config.mods.superfreq.settings;
- };
- };
-}
diff --git a/modules/programs/supersonic.nix b/modules/programs/supersonic.nix
deleted file mode 100644
index 3b732df..0000000
--- a/modules/programs/supersonic.nix
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- inputs,
- ...
-}: let
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
-in {
- options.mods.supersonic = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables and configures supersonic";
- };
- variant = lib.mkOption {
- default = "wayland";
- example = "x11";
- type = lib.types.enum [
- "wayland"
- "x11"
- ];
- description = "The variant of supersonic";
- };
- };
- config = lib.mkIf config.mods.supersonic.enable (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = with pkgs; [
- (
- if config.mods.supersonic.variant == "wayland"
- then supersonic-wayland
- else supersonic
- )
- ];
- xdg.configFile."supersonic/themes/custom.toml".source =
- (pkgs.formats.toml {}).generate "customTheme"
- {
- SupersonicTheme = {
- Name = "Custom";
- Version = "0.2";
- SupportsDark = true;
- SupportsLight = true;
- };
-
- DarkColors = {
- PageBackground = "#${scheme.base00}";
- ListHeader = "#${scheme.base02}";
- PageHeader = "#${scheme.base02}";
- Background = "#${scheme.base01}";
- ScrollBar = "#${scheme.base02}";
- Button = "#${scheme.base02}";
- Foreground = "#${scheme.base04}";
- InputBackground = "#${scheme.base02}";
- };
-
- # just define the same as base 16 doesn't define if it is light or not
- LightColors = {
- PageBackground = "#${scheme.base00}";
- ListHeader = "#${scheme.base02}";
- PageHeader = "#${scheme.base02}";
- Background = "#${scheme.base01}";
- ScrollBar = "#${scheme.base02}";
- Button = "#${scheme.base02}";
- Foreground = "#${scheme.base04}";
- InputBackground = "#${scheme.base02}";
- };
- };
- }
- );
-}
diff --git a/modules/programs/sway.nix b/modules/programs/sway.nix
deleted file mode 100644
index eef6025..0000000
--- a/modules/programs/sway.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.sway = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables sway";
- };
- config = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "sway config";
- };
- };
- config = lib.mkIf config.mods.sway.enable (
- lib.optionalAttrs (options ? wayland.windowManger.sway) {
- wayland.windowManager.sway =
- {
- enable = true;
- }
- // config.mods.sway.config;
- }
- );
-}
diff --git a/modules/programs/teams.nix b/modules/programs/teams.nix
deleted file mode 100644
index e9d843a..0000000
--- a/modules/programs/teams.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: let
- callPackage = lib.callPackageWith pkgs;
-in {
- options.mods.teams = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables teams via a chromium pwa (for the poor souls that have to use this for work)";
- };
- loopback = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables loopback for screensharing -> teams sucks :)";
- };
- };
- config = lib.mkIf config.mods.teams.enable (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = [(callPackage ../../override/teams.nix {inherit (pkgs) chromium;})];
- }
- // (lib.optionalAttrs (options ? boot.kernelModules) {
- boot = {
- extraModulePackages = with config.boot.kernelPackages; [v4l2loopback];
- kernelModules = ["v4l2loopback"];
- extraModprobeConfig = ''
- options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
- '';
- };
- })
- );
-}
diff --git a/modules/programs/virtmanager.nix b/modules/programs/virtmanager.nix
deleted file mode 100644
index de38848..0000000
--- a/modules/programs/virtmanager.nix
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- options,
- pkgs,
- ...
-}: let
- module =
- if config.conf.cpu == "intel"
- then "kvm-intel"
- else if config.conf.cpu == "amd"
- then "kvm-amd"
- else "";
-in {
- options.mods = {
- virtmanager.enable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
-
-
- Enables virt-manager kvm.
- '';
- };
- };
-
- config =
- lib.optionalAttrs (options ? virtualisation.libvirtd) {
- boot.kernelModules = [
- module
- ];
- programs.virt-manager.enable = true;
- environment.systemPackages = with pkgs; [
- spice
- spice-gtk
- spice-protocol
- virt-viewer
- ];
- virtualisation = {
- libvirtd = {
- enable = true;
- qemu = {
- package = mkDashDefault pkgs.qemu_kvm;
- swtpm.enable = mkDashDefault true;
- };
- };
- spiceUSBRedirection.enable = mkDashDefault true;
- };
- services.spice-vdagentd.enable = mkDashDefault true;
-
- users.users.${config.conf.username}.extraGroups = [
- "libvirtd"
- "kvm"
- "qemu-libvirtd"
- ];
- }
- // lib.optionalAttrs (options ? dconf.settings) {
- dconf.settings = {
- "org/virt-manager/virt-manager/connections" = {
- autoconnect = ["qemu:///system"];
- uris = ["qemu:///system"];
- };
- };
- };
-}
diff --git a/modules/programs/wm.nix b/modules/programs/wm.nix
deleted file mode 100644
index 0f794d3..0000000
--- a/modules/programs/wm.nix
+++ /dev/null
@@ -1,403 +0,0 @@
-{lib, ...}: let
- wmWorkspace = with lib.types; {
- options = {
- name = lib.mkOption {
- default = "";
- example = "1";
- type = str;
- description = "Name of the workspace";
- };
- default = lib.mkOption {
- default = false;
- example = true;
- type = bool;
- description = "Whether the workspace is the default workspace. (Currently doesn't do anything on niri)";
- };
- monitor = lib.mkOption {
- default = "";
- example = "DP-1";
- type = str;
- description = "Name of the monitor to bind the workspace to";
- };
- };
- };
-
- wmOptions = with lib.types; {
- options = {
- name = lib.mkOption {
- default = "DP-1";
- example = "DP-1";
- type = str;
- description = "Name of the monitor";
- };
- resolutionX = lib.mkOption {
- default = 1920;
- example = 2560;
- type = number;
- description = "ResolutionX of the monitor";
- };
- resolutionY = lib.mkOption {
- default = 1080;
- example = 1440;
- type = number;
- description = "ResolutionY of the monitor";
- };
- refreshrate = lib.mkOption {
- default = 60;
- example = 144;
- type = number;
- description = "Refreshrate of the monitor";
- };
- positionX = lib.mkOption {
- default = 0;
- example = 1920;
- type = number;
- description = "PositionX of the monitor";
- };
- positionY = lib.mkOption {
- default = 0;
- example = 1080;
- type = number;
- description = "PositionY of the monitor";
- };
- scale = lib.mkOption {
- default = 1;
- example = 2;
- type = number;
- description = "Scale of the monitor";
- };
- transform = lib.mkOption {
- default = "0";
- example = "90";
- type = enum ["0" "90" "180" "270" "360"];
- description = "Transform of the monitor";
- };
- vrr = lib.mkOption {
- default = false;
- example = true;
- type = bool;
- description = "VRR status of the monitor";
- };
- };
- };
-
- modKeys = lib.types.enum ["Mod" "Super" "Alt" "Shift" "Ctrl"];
-
- customCommand = with lib.types; {
- options = {
- niri = lib.mkOption {
- default = null;
- example = "kitty";
- type = either null str;
- description = "Command to use in niri";
- };
- hyprland = lib.mkOption {
- default = null;
- example = "kitty";
- type = either null str;
- description = "Command to use in hyprland";
- };
- };
- };
-
- envOptions = with lib.types; {
- options = {
- all = lib.mkOption {
- default = {};
- example = {};
- type = attrsOf str;
- description = "General Env";
- };
- niri = lib.mkOption {
- default = {};
- example = {};
- type = attrsOf str;
- description = "Niri Env";
- };
- hyprland = lib.mkOption {
- default = {};
- example = {};
- type = attrsOf str;
- description = "Hyprland Env";
- };
- };
- };
-
- startupOptions = with lib.types; {
- options = {
- all = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "General Startup commands";
- };
- niri = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Niri Startup commands";
- };
- hyprland = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Hyprland Startup commands";
- };
- };
- };
-
- windowRuleOptions = with lib.types; {
- options = {
- niri = lib.mkOption {
- default = [];
- example = [];
- type = listOf lines;
- description = "Niri window rules";
- };
- hyprland = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Hyprland window rules";
- };
- };
- };
-
- bindOptions = with lib.types; {
- options = {
- modKeys = lib.mkOption {
- default = [];
- example = ["Mod"];
- type = listOf modKeys;
- description = "List of modifier keys";
- };
- key = lib.mkOption {
- default = "";
- example = "Q";
- type = str;
- description = "Key to bind";
- };
- command = lib.mkOption {
- default = "";
- example = "killActive";
- type = either (submodule customCommand) (enum [
- "spawn"
- "spawn-sh"
- "quit"
- "killActive"
- "moveFocusUp"
- "moveFocusRight"
- "moveFocusDown"
- "moveFocusLeft"
- "moveWindowUp"
- "moveWindowRight"
- "moveWindowDown"
- "moveWindowLeft"
- "focusWorkspace"
- "moveToWorkspace"
- "toggleFloating"
- "toggleFullscreen"
- ]);
- description = "Command to execute";
- };
- args = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Additional arguments for the command";
- };
- meta = lib.mkOption {
- default = {};
- example = {};
- type = submodule {
- options = {
- niri = lib.mkOption {
- default = {};
- type = submodule {
- options = {
- desc = lib.mkOption {
- default = "";
- type = str;
- description = "Description for Hotkey overview";
- };
- repeat = lib.mkOption {
- type = bool;
- default = true;
- description = "Whether to repeat the keybind on hold";
- };
- allowInhibit = lib.mkOption {
- type = bool;
- default = true;
- description = "Whether to allow inhibiting";
- };
- allowWhileLocked = lib.mkOption {
- type = bool;
- default = false;
- description = "Whether to allow while locked";
- };
- cooldown = lib.mkOption {
- type = number;
- default = 0;
- description = "Cooldown on bind";
- };
- };
- };
- description = "Niri meta for keybinds";
- };
- hyprland = lib.mkOption {
- default = {};
- type = submodule {
- options = {
- repeat = lib.mkOption {
- type = bool;
- default = true;
- description = "Whether to repeat the keybind on hold";
- };
- };
- };
- description = "Niri meta for keybinds";
- };
- };
- };
- description = "Custom metadata per bind. Note, only supported environments are taken into account.";
- };
- };
- };
-in {
- options.mods.wm = {
- modKey = lib.mkOption {
- default = "Super";
- example = "Alt";
- type = modKeys;
- description = "Mod key";
- };
-
- env = lib.mkOption {
- default = {};
- example = {
- all = {
- EDITOR = "Neovim";
- };
- niri = {
- EDITOR = "Emacs";
- };
- };
- type = with lib.types; either (submodule envOptions) (attrsOf str);
- description = "Environment configuration";
- };
-
- useDefaultEnv = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default env variables";
- };
-
- startup = lib.mkOption {
- default = [];
- example = {
- all = ["oxinoti"];
- niri = ["someniricommand"];
- hyprland = ["somehyprlandcommand"];
- };
- type = with lib.types; either (submodule startupOptions) (listOf str);
- description = "Start commands";
- };
-
- useDefaultStartup = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default autostart commands";
- };
-
- useDefaultWindowRules = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default window rules";
- };
-
- windowRules = lib.mkOption {
- default = {};
- example = {
- niri = [
- ''
- match app-id=r#"^org\.keepassxc\.KeePassXC$"#
- match app-id=r#"^org\.gnome\.World\.Secrets$"#
-
- block-out-from "screen-capture"
- ''
- ''
- match app-id=r#"^steam$"#
- open-on-workspace "0"
- ''
- ];
- };
- type = lib.types.submodule windowRuleOptions;
- description = "Window rules";
- };
-
- workspaces = lib.mkOption {
- default = [];
- example = [
- {
- name = "chat";
- monitor = "DP-1";
- }
- ];
- type =
- lib.types.listOf (lib.types.submodule wmWorkspace);
- description = "Workspace configuration";
- };
-
- monitors = lib.mkOption {
- default = [];
- example = [
- {
- name = "DP-1";
- resolutionX = 1920;
- resolutionY = 1080;
- refreshrate = 144;
- positionX = 0;
- positionY = 0;
- scale = 1;
- transform = "0";
- vrr = false;
- }
- ];
- type =
- lib.types.listOf (lib.types.submodule wmOptions);
- description = "Monitor configuration";
- };
-
- useDefaultBinds = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default keybinds";
- };
-
- binds = lib.mkOption {
- default = [];
- example = [
- {
- modKeys = ["Mod"];
- key = "Q";
- command = "killActive";
- args = [];
- meta = {
- niri = {
- desc = "Kill the active window";
- repeat = false;
- };
- hyprland = {};
- };
- }
- ];
- type =
- lib.types.listOf (lib.types.submodule bindOptions);
- description = "Bind configuration";
- };
- };
-}
diff --git a/modules/programs/xkb.nix b/modules/programs/xkb.nix
deleted file mode 100644
index ebb1bda..0000000
--- a/modules/programs/xkb.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- lib,
- options,
- config,
- ...
-}: {
- options.mods.xkb = {
- layout = lib.mkOption {
- default = "enIntUmlaut";
- example = "us";
- type = lib.types.str;
- description = "Your layout";
- };
- variant = lib.mkOption {
- default = "";
- example = "";
- type = lib.types.str;
- description = "Your variant";
- };
- };
- config = lib.optionalAttrs (options ? services.xserver) {
- # Configure keymap in X11
- services.xserver = {
- xkb.layout = "${config.mods.xkb.layout}";
- xkb.variant = "${config.mods.xkb.variant}";
- };
- };
-}
diff --git a/modules/programs/xone.nix b/modules/programs/xone.nix
deleted file mode 100644
index 84ecd48..0000000
--- a/modules/programs/xone.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods = {
- xone.enable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables the xone driver for xbox controllers.
- '';
- };
- };
-
- config = lib.optionalAttrs (options ? hardware) {hardware.xone.enable = config.mods.xone.enable;};
-}
diff --git a/modules/programs/yazi/default.nix b/modules/programs/yazi/default.nix
deleted file mode 100644
index d890a81..0000000
--- a/modules/programs/yazi/default.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- pkgs,
- lib,
- config,
- options,
- ...
-}: {
- options.mods.yazi = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables yazi";
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default yazi config (if disabled only additionalConfig is used)";
- };
- additionalConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Additional config for yazi";
- };
- useDefaultKeymap = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Use default yazi keymap (if disabled only additionalKeymap is used)";
- };
- additionalKeymap = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Additional keymap for yazi";
- };
- plugins = lib.mkOption {
- default = {
- inherit (pkgs.yaziPlugins) piper diff gitui wl-clipboard;
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Additional keymap for yazi";
- };
- };
- config = let
- conf = import ./yazi.nix;
- in
- lib.optionalAttrs (options ? home.packages) (
- lib.mkIf config.mods.yazi.enable {
- home.packages = [pkgs.glow];
- programs.yazi = {
- inherit (conf) enable;
- settings = conf.settings // config.mods.yazi.additionalKeymap;
- keymap = conf.keymap // config.mods.yazi.additionalConfig;
- inherit (config.mods.yazi) plugins;
- };
- }
- );
-}
diff --git a/modules/programs/yazi/yazi.nix b/modules/programs/yazi/yazi.nix
deleted file mode 100644
index 22e3169..0000000
--- a/modules/programs/yazi/yazi.nix
+++ /dev/null
@@ -1,1016 +0,0 @@
-{
- # don't ask....
- enable = true;
- settings = {
- log = {
- enabled = false;
- };
- opener = {
- folder = [
- {
- run = ''open - R "$@"'';
- orphan = true;
- display_name = "Reveal in Finder";
- }
- {
- run = ''$EDITOR "$@"'';
- orphan = true;
- }
- ];
- archive = [
- {
- run = ''unar "$1"'';
- display_name = "Extract here";
- }
- ];
- text = [
- {
- run = ''$EDITOR "$@"'';
- orphan = true;
- }
- ];
- image = [
- {
- run = ''eog "$@"'';
- orphan = true;
- display_name = "Open";
- }
- {
- run = ''exiftool "$1"; echo "Press enter to exit"; read'';
- block = true;
- display_name = "Show EXIF";
- }
- ];
- pdf = [
- {
- run = ''zathura "$@"'';
- orphan = true;
- display_name = "Open";
- }
- ];
- video = [
- {
- run = ''mpv "$@"'';
- orphan = true;
- }
- {
- run = ''mediainfo "$1"; echo "Press enter to exit"; read'';
- block = true;
- display_name = "Show media info";
- }
- ];
- audio = [
- {
- run = ''xdg-open "$@"'';
- orphan = true;
- }
- {
- run = ''mediainfo "$1"; echo "Press enter to exit"; read'';
- block = true;
- display_name = "Show media info";
- }
- ];
- fallback = [
- {
- run = ''xdg-open "$@"'';
- orphan = true;
- display_name = "Open";
- }
- {
- run = ''xdg-open - R "$@"'';
- orphan = true;
- display_name = "Reveal in Finder";
- }
- ];
- };
- plugin = {
- prepend_previewers = [
- {
- name = "*.tar";
- run = ''piper --format=url -- tar tf "$1"'';
- }
- {
- name = "*.md";
- run = ''piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"'';
- }
- {
- mime = "text/csv";
- run = ''piper -- bat -p --color=always "$1"'';
- }
- ];
- };
- };
- keymap = {
- mgr.keymap = [
- {
- on = "";
- run = "backspace";
- desc = "Delete the character before the cursor";
- }
- {
- on = [""];
- run = "escape";
- desc = "Exit visual mode clear selected or cancel search";
- }
- {
- on = ["q"];
- run = "quit";
- desc = "Exit the process";
- }
- {
- on = ["Q"];
- run = "quit --no-cwd-file";
- desc = "Exit the process without writing cwd-file";
- }
- {
- on = [""];
- run = "close";
- desc = "Close the current tab or quit if it is last tab";
- }
- {
- on = [""];
- run = "suspend";
- desc = "Suspend the process";
- }
-
- # Navigation
- {
- on = ["l"];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = ["k"];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- {
- on = ["L"];
- run = "arrow -5";
- desc = "Move cursor up 5 lines";
- }
- {
- on = ["K"];
- run = "arrow 5";
- desc = "Move cursor down 5 lines";
- }
-
- {
- on = [""];
- run = "arrow -50%";
- desc = "Move cursor up half page";
- }
- {
- on = [""];
- run = "arrow 50%";
- desc = "Move cursor down half page";
- }
- {
- on = [""];
- run = "arrow -100%";
- desc = "Move cursor up one page";
- }
- {
- on = [""];
- run = "arrow 100%";
- desc = "Move cursor down one page";
- }
-
- {
- on = ["j"];
- run = "leave";
- desc = "Go back to the parent directory";
- }
- {
- on = [";"];
- run = "enter";
- desc = "Enter the child directory";
- }
-
- {
- on = ["J"];
- run = "back";
- desc = "Go back to the previous directory";
- }
- {
- on = ["P"];
- run = "forward";
- desc = "Go forward to the next directory";
- }
-
- {
- on = [""];
- run = "peek -5";
- desc = "Peek up 5 units in the preview";
- }
- {
- on = [""];
- run = "peek 5";
- desc = "Peek down 5 units in the preview";
- }
-
- {
- on = [""];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = [""];
- run = "arrow 1";
- desc = "Move cursor down";
- }
- {
- on = [""];
- run = "leave";
- desc = "Go back to the parent directory";
- }
- {
- on = [""];
- run = "enter";
- desc = "Enter the child directory";
- }
-
- {
- on = [
- "g"
- "g"
- ];
- run = "arrow -99999999";
- desc = "Move cursor to the top";
- }
- {
- on = ["G"];
- run = "arrow 99999999";
- desc = "Move cursor to the bottom";
- }
-
- # Selection
- {
- on = ["v"];
- run = "visual_mode";
- desc = "Enter visual mode (selection mode)";
- }
- {
- on = ["V"];
- run = "visual_mode --unset";
- desc = "Enter visual mode (unset mode)";
- }
- {
- on = [""];
- run = "select_all --state=true";
- desc = "Select all files";
- }
- {
- on = [""];
- run = "select_all --state=none";
- desc = "Inverse selection of all files";
- }
-
- # Operation
- {
- on = ["o"];
- run = "open";
- desc = "Open the selected files";
- }
- {
- on = ["O"];
- run = "open --interactive";
- desc = "Open the selected files interactively";
- }
- {
- on = [""];
- run = "open";
- desc = "Open the selected files";
- }
- {
- on = [""];
- run = "open --interactive";
- desc = "Open the selected files interactively";
- } # It's cool if you're using a terminal that supports CSI u
- {
- on = ["y"];
- run = "yank";
- desc = "Copy the selected files";
- }
- {
- on = ["x"];
- run = "yank --cut";
- desc = "Cut the selected files";
- }
- {
- on = ["p"];
- run = "paste";
- desc = "Paste the files";
- }
- {
- on = ["P"];
- run = "paste --force";
- desc = "Paste the files (overwrite if the destination exists)";
- }
- {
- on = ["-"];
- run = "link";
- desc = "Symlink the absolute path of files";
- }
- {
- on = ["_"];
- run = "link --relative";
- desc = "Symlink the relative path of files";
- }
- {
- on = ["d"];
- run = "remove";
- desc = "Move the files to the trash";
- }
- {
- on = ["D"];
- run = "remove --permanently";
- desc = "Permanently delete the files";
- }
- {
- on = ["a"];
- run = "create";
- desc = "Create a file or directory (ends with / for directories)";
- }
- {
- on = ["r"];
- run = "rename";
- desc = "Rename a file or directory";
- }
- {
- on = [";"];
- run = "shell";
- desc = "Run a shell command";
- }
- {
- on = [":"];
- run = "shell --block";
- desc = "Run a shell command (block the UI until the command finishes)";
- }
- {
- on = ["."];
- run = "hidden toggle";
- desc = "Toggle the visibility of hidden files";
- }
- {
- on = [
- ""
- "f"
- "g>"
- ];
- run = "search fd";
- desc = "Search files by name using fd";
- }
- {
- on = [
- ""
- "f"
- "G>"
- ];
- run = "search rg";
- desc = "Search files by content using ripgrep";
- }
- {
- on = [""];
- run = "search none";
- desc = "Cancel the ongoing search";
- }
- {
- on = ["Z"];
- run = "plugin zoxide";
- desc = "Jump to a directory using zoxide";
- }
- {
- on = ["z"];
- run = "plugin fzf";
- desc = "Jump to a directory or reveal a file using fzf";
- }
-
- # Copy
- {
- on = [
- "c"
- "c"
- ];
- run = "copy path";
- desc = "Copy the absolute path";
- }
- {
- on = [
- "c"
- "d"
- ];
- run = "copy dirname";
- desc = "Copy the path of the parent directory";
- }
- {
- on = [
- "c"
- "f"
- ];
- run = "copy filename";
- desc = "Copy the name of the file";
- }
- {
- on = [
- "c"
- "n"
- ];
- run = "copy name_without_ext";
- desc = "Copy the name of the file without the extension";
- }
-
- # Find
- {
- on = ["/"];
- run = "find --smart";
- }
- {
- on = ["?"];
- run = "find --previous --smart";
- }
- {
- on = ["n"];
- run = "find_arrow";
- }
- {
- on = ["N"];
- run = "find_arrow --previous";
- }
-
- # Sorting
- {
- on = [
- ","
- "a"
- ];
- run = "sort alphabetical --dir_first";
- desc = "Sort alphabetically";
- }
- {
- on = [
- ","
- "A"
- ];
- run = "sort alphabetical --reverse --dir_first";
- desc = "Sort alphabetically (reverse)";
- }
- {
- on = [
- ","
- "c"
- ];
- run = "sort created --dir_first";
- desc = "Sort by creation time";
- }
- {
- on = [
- ","
- "C"
- ];
- run = "sort created --reverse --dir_first";
- desc = "Sort by creation time (reverse)";
- }
- {
- on = [
- ","
- "m"
- ];
- run = "sort modified --dir_first";
- desc = "Sort by modified time";
- }
- {
- on = [
- ","
- "M"
- ];
- run = "sort modified --reverse --dir_first";
- desc = "Sort by modified time (reverse)";
- }
- {
- on = [
- ","
- "n"
- ];
- run = "sort natural --dir_first";
- desc = "Sort naturally";
- }
- {
- on = [
- ","
- "N"
- ];
- run = "sort natural --reverse --dir_first";
- desc = "Sort naturally (reverse)";
- }
- {
- on = [
- ","
- "s"
- ];
- run = "sort size --dir_first";
- desc = "Sort by size";
- }
- {
- on = [
- ","
- "S"
- ];
- run = "sort size --reverse --dir_first";
- desc = "Sort by size (reverse)";
- }
-
- # Tabs
- {
- on = ["t"];
- run = "tab_create --current";
- desc = "Create a new tab using the current path";
- }
-
- {
- on = ["1"];
- run = "tab_switch 0";
- desc = "Switch to the first tab";
- }
- {
- on = ["2"];
- run = "tab_switch 1";
- desc = "Switch to the second tab";
- }
- {
- on = ["3"];
- run = "tab_switch 2";
- desc = "Switch to the third tab";
- }
- {
- on = ["4"];
- run = "tab_switch 3";
- desc = "Switch to the fourth tab";
- }
- {
- on = ["5"];
- run = "tab_switch 4";
- desc = "Switch to the fifth tab";
- }
- {
- on = ["6"];
- run = "tab_switch 5";
- desc = "Switch to the sixth tab";
- }
- {
- on = ["7"];
- run = "tab_switch 6";
- desc = "Switch to the seventh tab";
- }
- {
- on = ["8"];
- run = "tab_switch 7";
- desc = "Switch to the eighth tab";
- }
- {
- on = ["9"];
- run = "tab_switch 8";
- desc = "Switch to the ninth tab";
- }
-
- {
- on = ["["];
- run = "tab_switch -1 --relative";
- desc = "Switch to the previous tab";
- }
- {
- on = ["]"];
- run = "tab_switch 1 --relative";
- desc = "Switch to the next tab";
- }
-
- {
- on = ["{"];
- run = "tab_swap -1";
- desc = "Swap the current tab with the previous tab";
- }
- {
- on = ["}"];
- run = "tab_swap 1";
- desc = "Swap the current tab with the next tab";
- }
-
- # Tasks
- {
- on = ["w"];
- run = "tasks_show";
- desc = "Show the tasks manager";
- }
-
- # Goto
- {
- on = [
- "g"
- "h"
- ];
- run = "cd ~";
- desc = "Go to the home directory";
- }
- {
- on = [
- "g"
- "c"
- ];
- run = "cd ~/.config";
- desc = "Go to the config directory";
- }
- {
- on = [
- "g"
- "d"
- ];
- run = "cd ~/Downloads";
- desc = "Go to the downloads directory";
- }
- {
- on = [
- "g"
- "t"
- ];
- run = "cd /tmp";
- desc = "Go to the temporary directory";
- }
- {
- on = [
- "g"
- ""
- ];
- run = "cd --interactive";
- desc = "Go to a directory interactively";
- }
-
- # Help
- {
- on = ["~"];
- run = "help";
- desc = "Open help";
- }
- ];
-
- tasks.keymap = [
- {
- on = [""];
- run = "close";
- desc = "Hide the task manager";
- }
- {
- on = [""];
- run = "close";
- desc = "Hide the task manager";
- }
- {
- on = ["w"];
- run = "close";
- desc = "Hide the task manager";
- }
-
- {
- on = ["k"];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = ["j"];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- {
- on = [""];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = [""];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- {
- on = [""];
- run = "inspect";
- desc = "Inspect the task";
- }
- {
- on = ["x"];
- run = "cancel";
- desc = "Cancel the task";
- }
-
- {
- on = ["~"];
- run = "help";
- desc = "Open help";
- }
- ];
-
- select.keymap = [
- {
- on = [""];
- run = "close";
- desc = "Cancel selection";
- }
- {
- on = [""];
- run = "close";
- desc = "Cancel selection";
- }
- {
- on = [""];
- run = "close --submit";
- desc = "Submit the selection";
- }
-
- {
- on = ["k"];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = ["j"];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- {
- on = ["K"];
- run = "arrow -5";
- desc = "Move cursor up 5 lines";
- }
- {
- on = ["J"];
- run = "arrow 5";
- desc = "Move cursor down 5 lines";
- }
-
- {
- on = [""];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = [""];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- {
- on = ["~"];
- run = "help";
- desc = "Open help";
- }
- ];
-
- input.keymap = [
- {
- on = "";
- run = "backspace";
- desc = "Delete the character before the cursor";
- }
- {
- on = [""];
- run = "close";
- desc = "Cancel input";
- }
- {
- on = [""];
- run = "close --submit";
- desc = "Submit the input";
- }
- {
- on = [""];
- run = "escape";
- desc = "Go back the normal mode or cancel input";
- }
-
- # Mode
- {
- on = ["i"];
- run = "insert";
- desc = "Enter insert mode";
- }
- {
- on = ["a"];
- run = "insert --append";
- desc = "Enter append mode";
- }
- {
- on = ["v"];
- run = "visual";
- desc = "Enter visual mode";
- }
- {
- on = ["V"];
- run = [
- "move -999"
- "visual"
- "move 999"
- ];
- desc = "Enter visual mode and select all";
- }
-
- # Navigation
- {
- on = ["h"];
- run = "move -1";
- desc = "Move cursor left";
- }
- {
- on = ["l"];
- run = "move 1";
- desc = "Move cursor right";
- }
-
- {
- on = ["0"];
- run = "move -999";
- desc = "Move to the BOL";
- }
- {
- on = ["$"];
- run = "move 999";
- desc = "Move to the EOL";
- }
- {
- on = ["I"];
- run = [
- "move -999"
- "insert"
- ];
- desc = "Move to the BOL and enter insert mode";
- }
- {
- on = ["A"];
- run = [
- "move 999"
- "insert --append"
- ];
- desc = "Move to the EOL and enter append mode";
- }
-
- {
- on = [""];
- run = "move -1";
- desc = "Move cursor left";
- }
- {
- on = [""];
- run = "move 1";
- desc = "Move cursor right";
- }
-
- {
- on = ["b"];
- run = "backward";
- desc = "Move to the beginning of the previous word";
- }
- {
- on = ["w"];
- run = "forward";
- desc = "Move to the beginning of the next word";
- }
- {
- on = ["e"];
- run = "forward --end-of-word";
- desc = "Move to the end of the next word";
- }
-
- # Deletion
- {
- on = ["d"];
- run = "delete --cut";
- desc = "Cut the selected characters";
- }
- {
- on = ["D"];
- run = [
- "delete --cut"
- "move 999"
- ];
- desc = "Cut until the EOL";
- }
- {
- on = ["c"];
- run = "delete --cut --insert";
- desc = "Cut the selected characters and enter insert mode";
- }
- {
- on = ["C"];
- run = [
- "delete --cut --insert"
- "move 999"
- ];
- desc = "Cut until the EOL and enter insert mode";
- }
- {
- on = ["x"];
- run = [
- "delete --cut"
- "move 1 --in-operating"
- ];
- desc = "Cut the current character";
- }
-
- # Yank/Paste
- {
- on = ["y"];
- run = "yank";
- desc = "Copy the selected characters";
- }
- {
- on = ["p"];
- run = "paste";
- desc = "Paste the copied characters after the cursor";
- }
- {
- on = ["P"];
- run = "paste --before";
- desc = "Paste the copied characters before the cursor";
- }
-
- # Undo/Redo
- {
- on = ["u"];
- run = "undo";
- desc = "Undo the last operation";
- }
- {
- on = [""];
- run = "redo";
- desc = "Redo the last operation";
- }
-
- # Help
- {
- on = ["~"];
- run = "help";
- desc = "Open help";
- }
- ];
-
- help.keymap = [
- {
- on = [""];
- run = "escape";
- desc = "Clear the filter or hide the help";
- }
- {
- on = ["q"];
- run = "close";
- desc = "Exit the process";
- }
- {
- on = [""];
- run = "close";
- desc = "Hide the help";
- }
-
- # Navigation
- {
- on = ["k"];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = ["j"];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- {
- on = ["K"];
- run = "arrow -5";
- desc = "Move cursor up 5 lines";
- }
- {
- on = ["J"];
- run = "arrow 5";
- desc = "Move cursor down 5 lines";
- }
-
- {
- on = [""];
- run = "arrow -1";
- desc = "Move cursor up";
- }
- {
- on = [""];
- run = "arrow 1";
- desc = "Move cursor down";
- }
-
- # Filtering
- {
- on = ["/"];
- run = "filter";
- desc = "Apply a filter for the help items";
- }
- ];
- };
-}
diff --git a/nix/.sops.yaml b/nix/.sops.yaml
new file mode 100644
index 0000000..57234fa
--- /dev/null
+++ b/nix/.sops.yaml
@@ -0,0 +1,7 @@
+keys:
+ - &dashie 92D29D420B5D95FCA46A12FE778CFA7A623614F3
+creation_rules:
+ - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
+ key_groups:
+ - pgp:
+ - *dashie
diff --git a/nix/base/base_packages.nix b/nix/base/base_packages.nix
new file mode 100644
index 0000000..4175297
--- /dev/null
+++ b/nix/base/base_packages.nix
@@ -0,0 +1,82 @@
+{ pkgs, config, ... }:
+{
+ imports = [
+ # is wrapped in if statement to enable when needed
+ ../programs/gaming/default.nix
+ ../programs/themes/stylix.nix
+ ];
+
+ environment.systemPackages = with pkgs; [
+ openssl
+ dbus
+ glib
+ gtk4
+ gtk3
+ libadwaita
+ gtk-layer-shell
+ gtk4-layer-shell
+ direnv
+ dconf
+ gsettings-desktop-schemas
+ gnome.nixos-gsettings-overrides
+ bibata-cursors
+ xorg.xkbutils
+ libxkbcommon
+ icon-library
+ adwaita-icon-theme
+ hicolor-icon-theme
+ morewaita-icon-theme
+ kdePackages.breeze-icons
+ seahorse
+ upower
+ (lib.mkIf config.conf.streamdeck.enable (callPackage
+ ../override/streamdeck.nix
+ { }))
+ ];
+
+ gtk.iconCache.enable = false;
+
+ fonts.packages = with pkgs; [
+ cantarell-fonts
+ ];
+
+ nix.settings.experimental-features = "nix-command flakes";
+
+ virtualisation.docker.enable = true;
+
+ services.upower.enable = true;
+ services.printing.enable = true;
+ services.dbus.enable = true;
+ services.dbus.packages = with pkgs; [
+ gnome2.GConf
+ ];
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
+ };
+
+ programs.fish.enable = true;
+ programs.fish.promptInit = ''
+ ${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source
+ '';
+ programs.nix-ld.enable = true;
+ programs.nix-ld.libraries = with pkgs; [
+ jdk
+ zlib
+ ];
+ programs.dconf.enable = true;
+ programs.direnv = {
+ package = pkgs.direnv;
+ silent = false;
+ loadInNixShell = true;
+ direnvrcExtra = "";
+ nix-direnv = {
+ enable = true;
+ package = pkgs.nix-direnv;
+ };
+ };
+ programs.ssh.startAgent = true;
+ programs.gnupg.agent.enable = true;
+
+}
diff --git a/nix/base/big_g.nix b/nix/base/big_g.nix
new file mode 100644
index 0000000..0b1fe1d
--- /dev/null
+++ b/nix/base/big_g.nix
@@ -0,0 +1,12 @@
+{ pkgs, ... }: {
+ services = {
+ # needed for GNOME services outside of GNOME Desktop
+ dbus.packages = with pkgs; [
+ gcr
+ gnome.gnome-settings-daemon
+ ];
+
+ gnome.gnome-keyring.enable = true;
+ gvfs.enable = true;
+ };
+}
diff --git a/base/black.jpg b/nix/base/black.jpg
similarity index 100%
rename from base/black.jpg
rename to nix/base/black.jpg
diff --git a/nix/base/common_hardware.nix b/nix/base/common_hardware.nix
new file mode 100644
index 0000000..2cd48a9
--- /dev/null
+++ b/nix/base/common_hardware.nix
@@ -0,0 +1,124 @@
+{ pkgs, config, lib, modulesPath, ... }:
+let
+ username = config.conf.username;
+in
+{
+ imports = [
+ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+ # Bootloader.
+ boot.loader.systemd-boot.enable = true;
+ boot.loader.efi.canTouchEfiVariables = true;
+
+ # Enable networking
+ networking.networkmanager.enable = true;
+ services.flatpak.enable = true;
+
+ # Set your time zone.
+ time.timeZone = "Europe/Zurich";
+
+ # Select internationalisation properties.
+ i18n.defaultLocale = "en_US.UTF-8";
+
+ # Enable the X11 windowing system.
+ services.xserver.enable = true;
+
+ # Configure keymap in X11
+ services.xserver = {
+ xkb.layout = "us";
+ xkb.variant = "";
+ };
+
+ # Enable CUPS to print documents.
+ services.printing.enable = true;
+ services.printing.browsing = true;
+ services.printing.drivers = [ pkgs.hplip ];
+ services.printing.startWhenNeeded = true; # optional
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
+ };
+
+ # Enable sound with pipewire.
+ hardware.pulseaudio.enable = false;
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ };
+
+ environment.variables = {
+ XDG_CACHE_HOME = "$HOME/.cache";
+ DIRENV_LOG_FORMAT = "";
+ };
+
+ nix.settings.trusted-users = [
+ username
+ ];
+
+ boot.kernelPackages = config.conf.kernel;
+ boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
+ boot.kernelParams = [
+ "resume=\"PARTLABEL=SWAP\""
+ ] ++ config.conf.boot_params;
+
+ networking.hostName = config.conf.hostname;
+
+ # allows user change later on
+ users.mutableUsers = true;
+ users.users.${username} = {
+ isNormalUser = true;
+ description = username;
+ extraGroups = [ "networkmanager" "wheel" "gamemode" "docker" "vboxusers" ];
+ packages = with pkgs; [
+ home-manager
+ xdg-desktop-portal-gtk
+ ];
+ # this password will only last for the first login
+ # e.g. login, then change to whatever else, this also ensures no public hash is available
+ password = "firstlogin";
+ };
+
+ system.stateVersion = "unstable";
+
+ fileSystems."/" =
+ {
+ device = "/dev/disk/by-label/ROOT";
+ fsType = "btrfs";
+ options = [
+ "noatime"
+ "nodiratime"
+ "discard"
+ ];
+ };
+
+ fileSystems."/boot" =
+ {
+ device = "/dev/disk/by-label/BOOT";
+ fsType = "vfat";
+ options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ];
+ };
+
+ fileSystems."/home" =
+ {
+ device = "/dev/disk/by-label/HOME";
+ fsType = "btrfs";
+ options = [
+ "noatime"
+ "nodiratime"
+ "discard"
+ ];
+ };
+
+ swapDevices =
+ [{ device = "/dev/disk/by-label/SWAP"; }];
+
+ nixpkgs.hostPlatform = lib.mkDefault config.conf.system;
+ hardware.cpu.${config.conf.cpu}.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+ services.fstrim.enable = lib.mkDefault true;
+ nix.settings.auto-optimise-store = true;
+ networking.useDHCP = lib.mkDefault true;
+}
diff --git a/base/default.nix b/nix/base/default.nix
similarity index 56%
rename from base/default.nix
rename to nix/base/default.nix
index eafd8a5..6a582dd 100644
--- a/base/default.nix
+++ b/nix/base/default.nix
@@ -1,7 +1,10 @@
{
imports = [
+ ./big_g.nix
+ ./login_manager.nix
./env.nix
./xkb_layout.nix
+ ./base_packages.nix
./common_hardware.nix
];
}
diff --git a/nix/base/env.nix b/nix/base/env.nix
new file mode 100644
index 0000000..0591a20
--- /dev/null
+++ b/nix/base/env.nix
@@ -0,0 +1,20 @@
+{ pkgs
+, config
+, ...
+}: {
+ environment.variables = {
+ GSETTINGS_SCHEMA_DIR = "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}";
+ NEOVIDE_MAXIMIZED = "0";
+ GPG_TTY = "$(tty)";
+ EDITOR = "neovide --no-fork";
+ SUDO_EDITOR = "neovide --no-fork";
+ SCRIPTS = "$HOME/.config/scripts";
+ };
+ environment.sessionVariables = {
+ NIXOS_OZONE_WL = "1";
+ GOPATH = "$HOME/.go";
+ FLAKE = "home/${config.conf.username}/gits/dotFiles/nix";
+ # don't ask... marksman somehow requires this
+ DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = 1;
+ };
+}
diff --git a/nix/base/login_manager.nix b/nix/base/login_manager.nix
new file mode 100644
index 0000000..1ea4ab6
--- /dev/null
+++ b/nix/base/login_manager.nix
@@ -0,0 +1,59 @@
+{ lib
+, config
+, pkgs
+, inputs
+, ...
+}:
+let
+ username = config.conf.username;
+ session = {
+ command = "${lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland} --config /etc/greetd/hyprgreet.conf";
+ user = username;
+ };
+in
+{
+ services.xserver.displayManager.session = [
+ {
+ manage = "desktop";
+ name = "Hyprland";
+ start = ''
+ ${lib.getExe pkgs.hyprland} & waitPID=$!
+ '';
+ }
+ ];
+
+ # greetd display manager
+ programs.hyprland.enable = true;
+ services.greetd = {
+ enable = true;
+ settings = {
+ terminal.vt = 1;
+ default_session = session;
+ };
+ };
+
+ environment.etc."greetd/environments".text = ''
+ Hyprland
+ '';
+
+ environment.etc."greetd/hyprgreet.conf".text = ''
+ exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
+
+ monitor=${config.conf.monitor},3440x1440@180,0x0,${config.conf.scale}
+ monitor=_,disable
+
+ input {
+ force_no_accel = true
+ }
+
+ misc {
+ disable_splash_rendering = true
+ disable_hyprland_logo = true
+ }
+
+ exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css; hyprctl dispatch exit
+ '';
+
+ # unlock GPG keyring on login
+ security.pam.services.greetd.enableGnomeKeyring = true;
+}
diff --git a/base/xkb_layout.nix b/nix/base/xkb_layout.nix
similarity index 56%
rename from base/xkb_layout.nix
rename to nix/base/xkb_layout.nix
index b399693..8238484 100644
--- a/base/xkb_layout.nix
+++ b/nix/base/xkb_layout.nix
@@ -1,10 +1,7 @@
-{
- mkDashDefault,
- pkgs,
- ...
-}: let
- layout = pkgs.writeText "enIntUmlaut" ''
- xkb_symbols "enIntUmlaut"
+{ pkgs, ... }:
+let
+ layout = pkgs.writeText "dashie" ''
+ xkb_symbols "dashie"
{
include "us(basic)"
include "level3(ralt_switch)"
@@ -13,11 +10,14 @@
key { [ u, U, udiaeresis, Udiaeresis ] };
};
'';
-in {
- environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp];
- services.xserver.xkb.extraLayouts.enIntUmlaut = {
+in
+{
+ environment.systemPackages = [ pkgs.xorg.xkbcomp ];
+ services.xserver.xkb.extraLayouts.dashie = {
description = "US layout with 'umlaut'";
- languages = ["eng"];
+ languages = [ "eng" ];
symbolsFile = "${layout}";
};
}
+
+
diff --git a/nix/flake.lock b/nix/flake.lock
new file mode 100644
index 0000000..1ef4295
--- /dev/null
+++ b/nix/flake.lock
@@ -0,0 +1,2019 @@
+{
+ "nodes": {
+ "anyrun": {
+ "inputs": {
+ "flake-parts": "flake-parts",
+ "nixpkgs": "nixpkgs",
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1721135360,
+ "narHash": "sha256-ZhSA0e45UxiOAjEVqkym/aULh0Dt+KHJLNda7bjx9UI=",
+ "owner": "Kirottu",
+ "repo": "anyrun",
+ "rev": "c6101a31a80b51e32e96f6a77616b609770172e0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Kirottu",
+ "repo": "anyrun",
+ "type": "github"
+ }
+ },
+ "base16": {
+ "inputs": {
+ "fromYaml": "fromYaml"
+ },
+ "locked": {
+ "lastModified": 1721224776,
+ "narHash": "sha256-iakVQHg2DSmdOc5dNBwrDt9JLRxX5MT+IIbxfZEpGdo=",
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "rev": "c89c8123310257f3ddc04cc59aa4b5573c6d515f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "type": "github"
+ }
+ },
+ "base16-fish": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1622559957,
+ "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
+ "owner": "tomyun",
+ "repo": "base16-fish",
+ "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tomyun",
+ "repo": "base16-fish",
+ "type": "github"
+ }
+ },
+ "base16-foot": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696725948,
+ "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
+ "owner": "tinted-theming",
+ "repo": "base16-foot",
+ "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-foot",
+ "type": "github"
+ }
+ },
+ "base16-helix": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1720809814,
+ "narHash": "sha256-numb3xigRGnr/deF7wdjBwVg7fpbTH7reFDkJ75AJkY=",
+ "owner": "tinted-theming",
+ "repo": "base16-helix",
+ "rev": "34f41987bec14c0f3f6b2155c19787b1f6489625",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-helix",
+ "type": "github"
+ }
+ },
+ "base16-kitty": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1665001328,
+ "narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
+ "owner": "kdrag0n",
+ "repo": "base16-kitty",
+ "rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
+ "type": "github"
+ },
+ "original": {
+ "owner": "kdrag0n",
+ "repo": "base16-kitty",
+ "type": "github"
+ }
+ },
+ "base16-tmux": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696725902,
+ "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
+ "owner": "tinted-theming",
+ "repo": "base16-tmux",
+ "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-tmux",
+ "type": "github"
+ }
+ },
+ "base16-vim": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1716150083,
+ "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=",
+ "owner": "tinted-theming",
+ "repo": "base16-vim",
+ "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-vim",
+ "type": "github"
+ }
+ },
+ "base16_2": {
+ "inputs": {
+ "fromYaml": "fromYaml_2"
+ },
+ "locked": {
+ "lastModified": 1708890466,
+ "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "rev": "665b3c6748534eb766c777298721cece9453fdae",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "type": "github"
+ }
+ },
+ "crane": {
+ "inputs": {
+ "nixpkgs": [
+ "ironbar",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1717025063,
+ "narHash": "sha256-dIubLa56W9sNNz0e8jGxrX3CAkPXsq7snuFA/Ie6dn8=",
+ "owner": "ipetkov",
+ "repo": "crane",
+ "rev": "480dff0be03dac0e51a8dfc26e882b0d123a450e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "ipetkov",
+ "repo": "crane",
+ "type": "github"
+ }
+ },
+ "dashvim": {
+ "inputs": {
+ "base16": [
+ "base16"
+ ],
+ "flake-parts": "flake-parts_2",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "nixvim": "nixvim"
+ },
+ "locked": {
+ "lastModified": 1721250623,
+ "narHash": "sha256-w80Q5dvELC7W5rGx0gu9Jp+B2qxUA7irGIN3zAZcbiI=",
+ "owner": "DashieTM",
+ "repo": "DashVim",
+ "rev": "f4da99286b729a4300697c53c3a4b9ab9f8979aa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "DashVim",
+ "type": "github"
+ }
+ },
+ "devshell": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1717408969,
+ "narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=",
+ "owner": "numtide",
+ "repo": "devshell",
+ "rev": "1ebbe68d57457c8cae98145410b164b5477761f4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "devshell",
+ "type": "github"
+ }
+ },
+ "flake-compat": {
+ "locked": {
+ "lastModified": 1696426674,
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+ "revCount": 57,
+ "type": "tarball",
+ "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
+ }
+ },
+ "flake-compat_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1673956053,
+ "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "anyrun",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1717285511,
+ "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_10": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "reset",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_11": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "reset-plugins",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_2": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1719994518,
+ "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_3": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1719877454,
+ "narHash": "sha256-g5N1yyOSsPNiOlFfkuI/wcUjmtah+nxdImJqrSATjOU=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "4e3583423212f9303aa1a6337f8dffb415920e4f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_4": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "hyprdock",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_5": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxicalc",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_6": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxidash",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_7": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxinoti",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_8": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxipaste",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_9": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxishut",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems_2"
+ },
+ "locked": {
+ "lastModified": 1701680307,
+ "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_2": {
+ "inputs": {
+ "systems": "systems_4"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_3": {
+ "inputs": {
+ "systems": "systems_5"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_4": {
+ "inputs": {
+ "systems": "systems_6"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_5": {
+ "inputs": {
+ "systems": "systems_7"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_6": {
+ "inputs": {
+ "systems": "systems_8"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_7": {
+ "inputs": {
+ "systems": "systems_9"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_8": {
+ "inputs": {
+ "systems": "systems_10"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "fromYaml": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1721222302,
+ "narHash": "sha256-5vL4w9+tS9yd8WpIiDUtxN1IuxCVK2nebZMs/hCXXis=",
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "rev": "93bad85d1633b8b27287b438c0bd394094c24d06",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "type": "github"
+ }
+ },
+ "fromYaml_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1689549921,
+ "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "type": "github"
+ }
+ },
+ "git-hooks": {
+ "inputs": {
+ "flake-compat": [
+ "dashvim",
+ "nixvim",
+ "flake-compat"
+ ],
+ "gitignore": "gitignore",
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ],
+ "nixpkgs-stable": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1719259945,
+ "narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=",
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07",
+ "type": "github"
+ },
+ "original": {
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "type": "github"
+ }
+ },
+ "gitignore": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "git-hooks",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1709087332,
+ "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "type": "github"
+ }
+ },
+ "gnome-shell": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1713702291,
+ "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
+ "owner": "GNOME",
+ "repo": "gnome-shell",
+ "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
+ "type": "github"
+ },
+ "original": {
+ "owner": "GNOME",
+ "ref": "46.1",
+ "repo": "gnome-shell",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1719827439,
+ "narHash": "sha256-tneHOIv1lEavZ0vQ+rgz67LPNCgOZVByYki3OkSshFU=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "59ce796b2563e19821361abbe2067c3bb4143a7d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_2": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1721135958,
+ "narHash": "sha256-H548rpPMsn25LDKn1PCFmPxmWlClJJGnvdzImHkqjuY=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "afd2021bedff2de92dfce0e257a3d03ae65c603d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_3": {
+ "inputs": {
+ "nixpkgs": [
+ "stylix",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715930644,
+ "narHash": "sha256-W9pyM3/vePxrffHtzlJI6lDS3seANQ+Nqp+i58O46LI=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "e3ad5108f54177e6520535768ddbf1e6af54b59d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "hyprcursor": {
+ "inputs": {
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1720108799,
+ "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=",
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "type": "github"
+ }
+ },
+ "hyprdock": {
+ "inputs": {
+ "flake-parts": "flake-parts_4",
+ "nixpkgs": "nixpkgs_3"
+ },
+ "locked": {
+ "lastModified": 1716453478,
+ "narHash": "sha256-EoKGnKvYKoe9geFoK0wyEAMTPGOfRtjXibt4GUCfvBA=",
+ "owner": "DashieTM",
+ "repo": "hyprdock",
+ "rev": "8d07dbdf446e6b21528cc994547cc8f173a70330",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "hyprdock",
+ "type": "github"
+ }
+ },
+ "hyprland": {
+ "inputs": {
+ "hyprcursor": "hyprcursor",
+ "hyprlang": "hyprlang",
+ "hyprutils": "hyprutils",
+ "hyprwayland-scanner": "hyprwayland-scanner",
+ "nixpkgs": "nixpkgs_4",
+ "systems": "systems_3",
+ "xdph": "xdph"
+ },
+ "locked": {
+ "lastModified": 1721248202,
+ "narHash": "sha256-VAhuQQ4EKbw/6z7K2IoR83+gXUdMksLWFQOhJNhSvQE=",
+ "ref": "refs/heads/main",
+ "rev": "300228b503b36e5977b0d58713c5b4cf1f07b8a9",
+ "revCount": 4930,
+ "submodules": true,
+ "type": "git",
+ "url": "https://github.com/hyprwm/Hyprland"
+ },
+ "original": {
+ "submodules": true,
+ "type": "git",
+ "url": "https://github.com/hyprwm/Hyprland"
+ }
+ },
+ "hyprland-protocols": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "xdph",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "xdph",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1718746314,
+ "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "hyprlang": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1720381373,
+ "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprutils": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1721071737,
+ "narHash": "sha256-qmC9jGfbE4+EIBbbSAkrfR/p49wShjpv4/KztgE/P54=",
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "rev": "eb1ceff2b87f6820789249f63faa8e9dcb54d05f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "type": "github"
+ }
+ },
+ "hyprwayland-scanner": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1720215857,
+ "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=",
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "type": "github"
+ }
+ },
+ "ironbar": {
+ "inputs": {
+ "crane": "crane",
+ "naersk": "naersk",
+ "nixpkgs": "nixpkgs_6",
+ "rust-overlay": "rust-overlay"
+ },
+ "locked": {
+ "lastModified": 1720904669,
+ "narHash": "sha256-Se+Pg81W8R+SFGFlhF1dU+NnMWSdLo3nC9TdPHa2IL4=",
+ "owner": "JakeStanger",
+ "repo": "ironbar",
+ "rev": "58190ab079d00dd53babb72346f1da6e1cc9ac72",
+ "type": "github"
+ },
+ "original": {
+ "owner": "JakeStanger",
+ "repo": "ironbar",
+ "type": "github"
+ }
+ },
+ "naersk": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_5"
+ },
+ "locked": {
+ "lastModified": 1717067539,
+ "narHash": "sha256-oIs5EF+6VpHJRvvpVWuqCYJMMVW/6h59aYUv9lABLtY=",
+ "owner": "nix-community",
+ "repo": "naersk",
+ "rev": "fa19d8c135e776dc97f4dcca08656a0eeb28d5c0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "naersk",
+ "type": "github"
+ }
+ },
+ "nix-darwin": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1719845423,
+ "narHash": "sha256-ZLHDmWAsHQQKnmfyhYSHJDlt8Wfjv6SQhl2qek42O7A=",
+ "owner": "lnl7",
+ "repo": "nix-darwin",
+ "rev": "ec12b88104d6c117871fad55e931addac4626756",
+ "type": "github"
+ },
+ "original": {
+ "owner": "lnl7",
+ "repo": "nix-darwin",
+ "type": "github"
+ }
+ },
+ "nix-flatpak": {
+ "locked": {
+ "lastModified": 1711997375,
+ "narHash": "sha256-KvU4gOtuFMS9Il67glRGtdNfguAINT9pCaXtvCL8uI8=",
+ "owner": "gmodena",
+ "repo": "nix-flatpak",
+ "rev": "45bf66f7068db79b552da864c0e87452be624d6c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "gmodena",
+ "repo": "nix-flatpak",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1717196966,
+ "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1719876945,
+ "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=",
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
+ }
+ },
+ "nixpkgs-stable": {
+ "locked": {
+ "lastModified": 1720915306,
+ "narHash": "sha256-6vuViC56+KSr+945bCV8akHK+7J5k6n/epYg/W3I5eQ=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "74348da2f3a312ee25cea09b98cdba4cb9fa5d5d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "release-24.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_10": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_11": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_12": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_13": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_14": {
+ "locked": {
+ "lastModified": 1716190602,
+ "narHash": "sha256-xYRimrR0duWvokWQEvB87bSsICeCvvX9DxpUOzCfsDE=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "5a5ac83292c7842072318f57d68a48474f8bd34d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_15": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_16": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_17": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_18": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_19": {
+ "locked": {
+ "lastModified": 1716948383,
+ "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "ad57eef4ef0659193044870c731987a6df5cf56b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1719848872,
+ "narHash": "sha256-H3+EC5cYuq+gQW8y0lSrrDZfH71LB4DAf+TDFyvwCNA=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "00d80d13810dbfea8ab4ed1009b09100cca86ba8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_20": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_21": {
+ "locked": {
+ "lastModified": 1720781449,
+ "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "8b5a3d5a1d951344d683b442c0739010b80039db",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_22": {
+ "locked": {
+ "lastModified": 1714912032,
+ "narHash": "sha256-clkcOIkg8G4xuJh+1onLG4HPMpbtzdLv4rHxFzgsH9c=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "ee4a6e0f566fe5ec79968c57a9c2c3c25f2cf41d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1716330097,
+ "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_4": {
+ "locked": {
+ "lastModified": 1720957393,
+ "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_5": {
+ "locked": {
+ "lastModified": 1717112898,
+ "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "type": "indirect"
+ }
+ },
+ "nixpkgs_6": {
+ "locked": {
+ "lastModified": 1716948383,
+ "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "ad57eef4ef0659193044870c731987a6df5cf56b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_7": {
+ "locked": {
+ "lastModified": 1720957393,
+ "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=",
+ "owner": "NixOs",
+ "repo": "nixpkgs",
+ "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOs",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_8": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_9": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixvim": {
+ "inputs": {
+ "devshell": "devshell",
+ "flake-compat": "flake-compat",
+ "flake-parts": "flake-parts_3",
+ "git-hooks": "git-hooks",
+ "home-manager": "home-manager",
+ "nix-darwin": "nix-darwin",
+ "nixpkgs": "nixpkgs_2",
+ "treefmt-nix": "treefmt-nix"
+ },
+ "locked": {
+ "lastModified": 1720898451,
+ "narHash": "sha256-T7JAUYx7WZrEEItqRb9Bh6rj0Njffir4XHJUNwhQMiY=",
+ "owner": "nix-community",
+ "repo": "nixvim",
+ "rev": "06a44e9e8814ab13ea013e222637a497a50e96e4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixvim",
+ "type": "github"
+ }
+ },
+ "nur": {
+ "locked": {
+ "lastModified": 1721241063,
+ "narHash": "sha256-jBAuwmtJmSNT6xwjtGINslFK0m3R3+Ydw+xrd+a3tSE=",
+ "owner": "nix-community",
+ "repo": "nur",
+ "rev": "f33f46c1e38b07b20a978ac39208058ab9ddedb1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nur",
+ "type": "github"
+ }
+ },
+ "oxicalc": {
+ "inputs": {
+ "flake-parts": "flake-parts_5",
+ "nixpkgs": "nixpkgs_8"
+ },
+ "locked": {
+ "lastModified": 1716225554,
+ "narHash": "sha256-IenHIQgKdKJTt02VJLQ+q8EunIkMwQ57XFWyKO+rb7s=",
+ "owner": "DashieTM",
+ "repo": "OxiCalc",
+ "rev": "a3fa5d76941278fd0f586817dcd04be134159bd8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiCalc",
+ "type": "github"
+ }
+ },
+ "oxidash": {
+ "inputs": {
+ "flake-parts": "flake-parts_6",
+ "nixpkgs": "nixpkgs_9",
+ "rust-overlay": "rust-overlay_2"
+ },
+ "locked": {
+ "lastModified": 1716235599,
+ "narHash": "sha256-6LDrLEfPzwbd5nEcis8us4BA18YhoWkzMVwafCJ5N/A=",
+ "owner": "DashieTM",
+ "repo": "OxiDash",
+ "rev": "fe6984abc73f75a64b0a03231068c20f53ec4f76",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiDash",
+ "type": "github"
+ }
+ },
+ "oxinoti": {
+ "inputs": {
+ "flake-parts": "flake-parts_7",
+ "nixpkgs": "nixpkgs_11",
+ "rust-overlay": "rust-overlay_3"
+ },
+ "locked": {
+ "lastModified": 1716235566,
+ "narHash": "sha256-1U4/h0YyuoOERjQE68yQZVsDdIGl43OprDplSGBMhYY=",
+ "owner": "DashieTM",
+ "repo": "OxiNoti",
+ "rev": "c52c330d59a3b066e94618adbe9a7be5b9cfde24",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiNoti",
+ "type": "github"
+ }
+ },
+ "oxipaste": {
+ "inputs": {
+ "flake-parts": "flake-parts_8",
+ "nixpkgs": "nixpkgs_13",
+ "rust-overlay": "rust-overlay_4"
+ },
+ "locked": {
+ "lastModified": 1716235097,
+ "narHash": "sha256-kTsSNciMnp3y/QOPseB/QlhRqVxrm7teRCMl05OIiBs=",
+ "owner": "DashieTM",
+ "repo": "OxiPaste",
+ "rev": "3f494c1a3dd093e3c5761520554977a9dec33a3a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiPaste",
+ "type": "github"
+ }
+ },
+ "oxishut": {
+ "inputs": {
+ "flake-parts": "flake-parts_9",
+ "nixpkgs": "nixpkgs_15",
+ "rust-overlay": "rust-overlay_5"
+ },
+ "locked": {
+ "lastModified": 1716235696,
+ "narHash": "sha256-qqN2ev97ff1Yftr+8YS7Pm2/kk8SpQU8uxplbQYJGho=",
+ "owner": "DashieTM",
+ "repo": "OxiShut",
+ "rev": "d38d5c892b7ae2420715cbb6b4944abb76b49f9d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiShut",
+ "type": "github"
+ }
+ },
+ "reset": {
+ "inputs": {
+ "flake-parts": "flake-parts_10",
+ "nixpkgs": "nixpkgs_17",
+ "rust-overlay": "rust-overlay_6"
+ },
+ "locked": {
+ "lastModified": 1718284469,
+ "narHash": "sha256-6cZjFyjhGTOj9r8eprCWZy1v2o1Tqcl6H6g/LTgHhp4=",
+ "owner": "Xetibo",
+ "repo": "ReSet",
+ "rev": "6c1291bd19383ea45d0610dcdc17e8491b8e20ea",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Xetibo",
+ "repo": "ReSet",
+ "type": "github"
+ }
+ },
+ "reset-plugins": {
+ "inputs": {
+ "flake-parts": "flake-parts_11",
+ "nixpkgs": "nixpkgs_19",
+ "rust-overlay": "rust-overlay_7"
+ },
+ "locked": {
+ "lastModified": 1718300175,
+ "narHash": "sha256-kPeJJ/au+jV4jhyAhkLI3uwqK7pEDjdVJvwDmtQq8/k=",
+ "owner": "Xetibo",
+ "repo": "ReSet-Plugins",
+ "rev": "8d3af2fab9425f8b89fb7b82b4e23eba12a42f85",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Xetibo",
+ "repo": "ReSet-Plugins",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "anyrun": "anyrun",
+ "base16": "base16",
+ "dashvim": "dashvim",
+ "home-manager": "home-manager_2",
+ "hyprdock": "hyprdock",
+ "hyprland": "hyprland",
+ "ironbar": "ironbar",
+ "nix-flatpak": "nix-flatpak",
+ "nixpkgs": "nixpkgs_7",
+ "nur": "nur",
+ "oxicalc": "oxicalc",
+ "oxidash": "oxidash",
+ "oxinoti": "oxinoti",
+ "oxipaste": "oxipaste",
+ "oxishut": "oxishut",
+ "reset": "reset",
+ "reset-plugins": "reset-plugins",
+ "sops-nix": "sops-nix",
+ "stylix": "stylix"
+ }
+ },
+ "rust-overlay": {
+ "inputs": {
+ "flake-utils": "flake-utils_2",
+ "nixpkgs": [
+ "ironbar",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1717121863,
+ "narHash": "sha256-/3sxIe7MZqF/jw1RTQCSmgTjwVod43mmrk84m50MJQ4=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "2a7b53172ed08f856b8382d7dcfd36a4e0cbd866",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_2": {
+ "inputs": {
+ "flake-utils": "flake-utils_3",
+ "nixpkgs": "nixpkgs_10"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_3": {
+ "inputs": {
+ "flake-utils": "flake-utils_4",
+ "nixpkgs": "nixpkgs_12"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_4": {
+ "inputs": {
+ "flake-utils": "flake-utils_5",
+ "nixpkgs": "nixpkgs_14"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_5": {
+ "inputs": {
+ "flake-utils": "flake-utils_6",
+ "nixpkgs": "nixpkgs_16"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_6": {
+ "inputs": {
+ "flake-utils": "flake-utils_7",
+ "nixpkgs": "nixpkgs_18"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_7": {
+ "inputs": {
+ "flake-utils": "flake-utils_8",
+ "nixpkgs": "nixpkgs_20"
+ },
+ "locked": {
+ "lastModified": 1717035469,
+ "narHash": "sha256-MzH+yjKULH3HCRj9QCTwBvqq4LZkR0ZqRE/QfGOGC2E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "095702e63a40e86f339d11864da9dc965b70a01e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "sops-nix": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_21",
+ "nixpkgs-stable": "nixpkgs-stable"
+ },
+ "locked": {
+ "lastModified": 1720926522,
+ "narHash": "sha256-eTpnrT6yu1vp8C0B5fxHXhgKxHoYMoYTEikQx///jxY=",
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "rev": "0703ba03fd9c1665f8ab68cc3487302475164617",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "type": "github"
+ }
+ },
+ "stylix": {
+ "inputs": {
+ "base16": "base16_2",
+ "base16-fish": "base16-fish",
+ "base16-foot": "base16-foot",
+ "base16-helix": "base16-helix",
+ "base16-kitty": "base16-kitty",
+ "base16-tmux": "base16-tmux",
+ "base16-vim": "base16-vim",
+ "flake-compat": "flake-compat_2",
+ "gnome-shell": "gnome-shell",
+ "home-manager": "home-manager_3",
+ "nixpkgs": "nixpkgs_22"
+ },
+ "locked": {
+ "lastModified": 1720818679,
+ "narHash": "sha256-u9PqY7O6TN42SLeb0e6mnYAgQOoQmclaVSHfLKMpmu0=",
+ "owner": "danth",
+ "repo": "stylix",
+ "rev": "29148118cc33f08b71058e1cda7ca017f5300b51",
+ "type": "github"
+ },
+ "original": {
+ "owner": "danth",
+ "repo": "stylix",
+ "type": "github"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "type": "github"
+ }
+ },
+ "systems_10": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_2": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_3": {
+ "locked": {
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "type": "github"
+ }
+ },
+ "systems_4": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_5": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_6": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_7": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_8": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_9": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "treefmt-nix": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1719887753,
+ "narHash": "sha256-p0B2r98UtZzRDM5miGRafL4h7TwGRC4DII+XXHDHqek=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "bdb6355009562d8f9313d9460c0d3860f525bc6c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
+ },
+ "xdph": {
+ "inputs": {
+ "hyprland-protocols": "hyprland-protocols",
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1720194466,
+ "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=",
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/nix/flake.nix b/nix/flake.nix
new file mode 100644
index 0000000..2793a63
--- /dev/null
+++ b/nix/flake.nix
@@ -0,0 +1,81 @@
+{
+ description = "Dashie dots";
+
+ inputs =
+ {
+ nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
+
+ nix-flatpak = {
+ url = "github:gmodena/nix-flatpak";
+ };
+
+ home-manager = {
+ url = "github:nix-community/home-manager";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ sops-nix.url = "github:Mic92/sops-nix";
+
+ # Hyprspace = {
+ # url = "github:KZDKM/Hyprspace";
+ # inputs.hyprland.follows = "nixpkgs";
+ # };
+
+ nur.url = "github:nix-community/nur";
+ hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
+
+ ironbar = {
+ url = "github:JakeStanger/ironbar";
+ };
+
+ stylix.url = "github:danth/stylix";
+ base16.url = "github:SenchoPens/base16.nix";
+
+ anyrun.url = "github:Kirottu/anyrun";
+ oxicalc.url = "github:DashieTM/OxiCalc";
+ oxishut.url = "github:DashieTM/OxiShut";
+ oxinoti.url = "github:DashieTM/OxiNoti";
+ oxidash.url = "github:DashieTM/OxiDash";
+ oxipaste.url = "github:DashieTM/OxiPaste";
+ hyprdock.url = "github:DashieTM/hyprdock";
+ reset.url = "github:Xetibo/ReSet";
+ reset-plugins.url = "github:Xetibo/ReSet-Plugins";
+ # nixvim.url = "github:nix-community/nixvim";
+ dashvim = {
+ url = "github:DashieTM/DashVim";
+ inputs.nixpkgs.follows = "nixpkgs";
+ inputs.base16.follows = "base16";
+ };
+ };
+
+ outputs = { ... }@inputs:
+ let
+ pkgs = import inputs.nixpkgs {
+ system = "x86_64-linux";
+ overlays = [
+ inputs.nur.overlay
+ ];
+ config = {
+ allowUnfree = true;
+ };
+ };
+ dashielib = import ./lib { inherit inputs pkgs; };
+ in
+ {
+ nixosConfigurations = (dashielib.build_systems [ "marmo" "overheating" "spaceship" ]);
+ };
+
+ nixConfig = {
+ builders-use-substitutes = true;
+
+ extra-substituters = [
+ "https://hyprland.cachix.org"
+ "https://anyrun.cachix.org"
+ ];
+
+ extra-trusted-public-keys = [
+ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
+ "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
+ ];
+ };
+}
diff --git a/nix/hardware/marmo/configuration.nix b/nix/hardware/marmo/configuration.nix
new file mode 100644
index 0000000..d8de5cb
--- /dev/null
+++ b/nix/hardware/marmo/configuration.nix
@@ -0,0 +1,21 @@
+{
+ imports = [
+ ../../modules/conf.nix
+ ];
+ # variables for system
+ conf = {
+ monitor = "DP-1";
+ gaming = {
+ enable = true;
+ device = 1;
+ };
+ hostname = "marmo";
+ hyprland.monitor = [
+ # default
+ "DP-1,1920x1080@144,0x0,1"
+ # all others
+ ",highrr,auto,1"
+ ];
+ colorscheme="catppuccin-mocha";
+ };
+}
diff --git a/nix/hardware/overheating/configuration.nix b/nix/hardware/overheating/configuration.nix
new file mode 100644
index 0000000..70d4cc7
--- /dev/null
+++ b/nix/hardware/overheating/configuration.nix
@@ -0,0 +1,25 @@
+{
+ imports = [
+ ../../modules/conf.nix
+ ];
+ conf = {
+ monitor = "eDP-1";
+ scale = "2.0";
+ hostname = "overheating";
+ boot_params = [ "rtc_cmos.use_acpi_alarm=1" ];
+ ironbar.modules = [
+ { type = "upower"; class = "memory-usage"; }
+ ];
+ hyprland = {
+ monitor = [
+ # default
+ "eDP-1,2944x1840@90,0x0,2"
+
+ # all others
+ ",highres,auto,1"
+ ];
+ extra_autostart = [ "hyprdock --server" ];
+ };
+ colorscheme = "catppuccin-mocha";
+ };
+}
diff --git a/nix/hardware/overheating/dsdt.nix b/nix/hardware/overheating/dsdt.nix
new file mode 100644
index 0000000..285cb33
--- /dev/null
+++ b/nix/hardware/overheating/dsdt.nix
@@ -0,0 +1,20 @@
+{ pkgs, ... }:
+let
+ # credit to benley: https://github.com/benley/dotfiles/commit/325748c3a8553d55c9fab08654a77b252aa0fde7
+ patched_ssdt = pkgs.stdenv.mkDerivation {
+ name = "patched_ssdt";
+ src = ./.;
+ buildInputs = [ pkgs.libarchive ];
+ installPhase = ''
+ mkdir -p kernel/firmware/acpi
+ cp ${./ssdt6.aml} kernel/firmware/acpi/ssdt6.aml
+ mkdir -p $out
+ echo kernel/firmware/acpi/ssdt6.aml | bsdcpio -v -o -H newc -R 0:0 > $out/lenotrolli-ssdt.img
+ '';
+ };
+in
+
+{
+ boot.kernelParams = [ "mem_sleep_default=deep" ];
+ boot.initrd.prepend = [ "${patched_ssdt}/lenotrolli-ssdt.img" ];
+}
diff --git a/nix/hardware/overheating/firmware.nix b/nix/hardware/overheating/firmware.nix
new file mode 100644
index 0000000..d46f8b4
--- /dev/null
+++ b/nix/hardware/overheating/firmware.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }:
+{
+ hardware.firmware = [
+ (
+ # lenovo is such a good manufacturer!!1!11!
+ # credit for the binary files: https://github.com/darinpp/yoga-slim-7
+ pkgs.stdenv.mkDerivation {
+ name = "firmware-lenotrolli";
+ src = ./firmware;
+ installPhase = ''
+ mkdir -p $out/lib/firmware
+ cp ${./firmware/TAS2XXX38BB.bin} $out/lib/firmware/TAS2XXX38BB.bin
+ cp ${./firmware/TIAS2781RCA4.bin} $out/lib/firmware/TIAS2781RCA4.bin
+ '';
+ }
+ )
+ ];
+}
diff --git a/nix/hardware/overheating/firmware/TAS2XXX38BB.bin b/nix/hardware/overheating/firmware/TAS2XXX38BB.bin
new file mode 100644
index 0000000..d729b97
Binary files /dev/null and b/nix/hardware/overheating/firmware/TAS2XXX38BB.bin differ
diff --git a/nix/hardware/overheating/firmware/TIAS2781RCA4.bin b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin
new file mode 100644
index 0000000..481d133
Binary files /dev/null and b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin differ
diff --git a/nix/hardware/overheating/firmware/TIAS2781RCA4.bin.orig b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin.orig
new file mode 100644
index 0000000..8698e92
Binary files /dev/null and b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin.orig differ
diff --git a/nix/hardware/overheating/overheating.nix b/nix/hardware/overheating/overheating.nix
new file mode 100644
index 0000000..0ca9ea1
--- /dev/null
+++ b/nix/hardware/overheating/overheating.nix
@@ -0,0 +1,15 @@
+{
+ imports =
+ [
+ ./dsdt.nix
+ ./firmware.nix
+ ];
+ # special hardware modules
+ # TODO: needed?
+ boot.kernelModules = [ "kvm-amd" ];
+
+ hardware.bluetooth.enable = true;
+ hardware.bluetooth.powerOnBoot = true;
+ # for hyprdock
+ services.acpid.enable = true;
+}
diff --git a/nix/hardware/overheating/ssdt6.aml b/nix/hardware/overheating/ssdt6.aml
new file mode 100644
index 0000000..d8cbadd
Binary files /dev/null and b/nix/hardware/overheating/ssdt6.aml differ
diff --git a/nix/hardware/spaceship/configuration.nix b/nix/hardware/spaceship/configuration.nix
new file mode 100644
index 0000000..348eb9f
--- /dev/null
+++ b/nix/hardware/spaceship/configuration.nix
@@ -0,0 +1,63 @@
+{ config, ... }:
+let
+ username = config.conf.username;
+in
+{
+ imports = [
+ ../../modules/conf.nix
+ ];
+
+ # config variables
+ conf = {
+ monitor = "DP-1";
+ gaming = {
+ enable = true;
+ };
+ streamdeck.enable = true;
+ hostname = "spaceship";
+ hyprland = {
+ monitor = [
+ # default
+ "DP-2,2560x1440@165,0x0,1"
+ "DP-1,3440x1440@180,2560x0,1,vrr,1"
+ "HDMI-A-1,1920x1200@60,6000x0,1"
+ "HDMI-A-1,transform,1"
+
+ # all others
+ ",highrr,auto,1"
+ ];
+ workspace = [
+ # workspaces
+ # monitor middle
+ "2,monitor:DP-1, default:true"
+ "4,monitor:DP-1"
+ "6,monitor:DP-1"
+ "8,monitor:DP-1"
+ "9,monitor:DP-1"
+ "10,monitor:DP-1"
+
+ # monitor left
+ "1,monitor:DP-2, default:true"
+ "5,monitor:DP-2"
+ "7,monitor:DP-2"
+
+ # monitor right
+ "3,monitor:HDMI-A-1, default:true"
+ ];
+ hyprpaper = ''
+ #load
+ preload = /home/${username}/Pictures/backgrounds/shinobu_2k.jpg
+ preload = /home/${username}/Pictures/backgrounds/shino_wide.png
+ preload = /home/${username}/Pictures/backgrounds/shinobu_1200.jpg
+
+ #set
+ wallpaper = DP-2,/home/${username}/Pictures/backgrounds/shinobu_2k.jpg
+ wallpaper = DP-1,/home/${username}/Pictures/backgrounds/shino_wide.png
+ wallpaper = HDMI-A-1,/home/${username}/Pictures/backgrounds/shinobu_1200.jpg
+ splash = true
+ '';
+ extra_autostart = [ "streamdeck -n" ];
+ };
+ colorscheme = "catppuccin-mocha";
+ };
+}
diff --git a/nix/hardware/spaceship/spaceship.nix b/nix/hardware/spaceship/spaceship.nix
new file mode 100644
index 0000000..482de77
--- /dev/null
+++ b/nix/hardware/spaceship/spaceship.nix
@@ -0,0 +1,40 @@
+{ pkgs, lib, ... }:
+{
+ # TODO: needed?
+ boot.kernelModules = [ "kvm-amd" ];
+ boot.initrd.kernelModules = [ "amdgpu" ];
+
+ fileSystems."/drive2" =
+ {
+ device = "/dev/disk/by-label/DRIVE2";
+ fsType = "ext4";
+ options = [
+ "noatime"
+ "nodiratime"
+ "discard"
+ ];
+ };
+
+ virtualisation.virtualbox.host.enable = true;
+
+ # enable hardware acceleration and rocm
+ hardware.xone.enable = true;
+ hardware.graphics.extraPackages = with pkgs; [
+ libvdpau-va-gl
+ vaapiVdpau
+ rocmPackages.clr.icd
+ rocm-opencl-runtime
+ ];
+ hardware.graphics = {
+ enable = true;
+ enable32Bit = lib.mkDefault true;
+ };
+ networking.firewall = {
+ allowedTCPPortRanges = [
+ { from = 1714; to = 1764; } # KDE Connect
+ ];
+ allowedUDPPortRanges = [
+ { from = 1714; to = 1764; } # KDE Connect
+ ];
+ };
+}
diff --git a/nix/lib/default.nix b/nix/lib/default.nix
new file mode 100644
index 0000000..91b3acc
--- /dev/null
+++ b/nix/lib/default.nix
@@ -0,0 +1,22 @@
+{ inputs, pkgs, ... }: {
+ build_systems = systems: builtins.listToAttrs (map (name: {
+ name = name;
+ value =
+ let
+ mod = ../hardware/${name}/configuration.nix;
+ in
+ inputs.nixpkgs.lib.nixosSystem {
+ specialArgs = {
+ inherit inputs pkgs mod;
+ };
+ modules = [
+ inputs.home-manager.nixosModules.home-manager
+ inputs.stylix.nixosModules.stylix
+ ../base
+ ../programs
+ mod
+ ] ++ inputs.nixpkgs.lib.optional (builtins.pathExists ../hardware/${name}/${name}.nix) ../hardware/${name}/${name}.nix
+ ++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
+ };
+ } )systems);
+}
diff --git a/nix/modules/conf.nix b/nix/modules/conf.nix
new file mode 100644
index 0000000..27a99fd
--- /dev/null
+++ b/nix/modules/conf.nix
@@ -0,0 +1,225 @@
+{ lib, config, pkgs, ... }: {
+ options.conf = {
+
+ system = lib.mkOption {
+ default = "x86_64-linux";
+ # no fisherprice unix support
+ type = with lib.types; (enum [ "x86_64-linux" "aarch64-linux" "aarch64-linux-android" ]);
+ example = "aarch64-linux";
+ description = ''
+ System architecture.
+ '';
+ };
+
+ cpu = lib.mkOption {
+ # TODO: how to enable arm?
+ default = "amd";
+ type = with lib.types; (enum [ "amd" "intel" ]);
+ example = "intel";
+ description = ''
+ cpu microcode.
+ '';
+ };
+
+ monitor = lib.mkOption {
+ default = "";
+ example = "eDP-1";
+ type = lib.types.str;
+ description = ''
+ main monitor
+ '';
+ };
+
+ scale = lib.mkOption {
+ default = "1.0";
+ example = "1.0";
+ type = lib.types.str;
+ description = ''
+ Scale for the monitor
+ '';
+ };
+
+ ironbar = {
+ modules = lib.mkOption {
+ default = [ ];
+ example = [
+ { type = "upower"; class = "memory-usage"; }
+ ];
+ type = with lib.types; listOf attrs;
+ description = ''
+ Adds modules to ironbar.
+ '';
+ };
+ };
+
+ amdGpu = lib.mkOption {
+ default = false;
+ example = true;
+ type = lib.types.bool;
+ description = ''
+ Enables drivers, optimizations and kernel parameters for AMD gpus.
+ '';
+ };
+
+ boot_params = lib.mkOption {
+ default = [ ];
+ example = [ "resume=something" ];
+ type = with lib.types; listOf str;
+ description = ''
+ Boot params
+ '';
+ };
+
+ gaming = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ type = lib.types.bool;
+ description = ''
+ Install gaming related programs such as steam, gamemode, and more
+ '';
+ };
+
+ device = lib.mkOption {
+ default = 0;
+ example = 0;
+ type = lib.types.int;
+ description = ''
+ GPU device number
+ '';
+ };
+ };
+
+ streamdeck = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ type = lib.types.bool;
+ description = ''
+ Install streamdeck configuration program.
+ '';
+ };
+ };
+
+ kernel = lib.mkOption {
+ default = pkgs.linuxPackages_latest;
+ example = pkgs.linuxPackages_xanmod_latest;
+ type = with lib.types; nullOr attrs;
+ description = ''
+ kernel to be used
+ '';
+ };
+
+ hostname = lib.mkOption {
+ default = "nixos";
+ example = "spaceship";
+ type = lib.types.str;
+ description = ''
+ The name of the system
+ '';
+ };
+
+ username = lib.mkOption {
+ default = "dashie";
+ example = "pingpang";
+ type = lib.types.str;
+ description = ''
+ The username.
+ '';
+ };
+
+ hyprland = {
+ monitor = lib.mkOption {
+ default = [ ];
+ example = [
+ "DP-1,3440x1440@180,2560x0,1,vrr,1"
+ ];
+ type = with lib.types; listOf str;
+ description = ''
+ The monitor configuration for hyprland.
+ '';
+ };
+ workspace = lib.mkOption {
+ default = [ ];
+ example = [
+ "2,monitor:DP-1, default:true"
+ ];
+ type = with lib.types; listOf str;
+ description = ''
+ The workspace configuration for hyprland.
+ '';
+ };
+ hyprpaper = lib.mkOption {
+ default = '''';
+ example = ''
+ hyprpaper stuff
+ '';
+ type = lib.types.lines;
+ description = ''
+ hyprpaper
+ '';
+ };
+ extra_autostart = lib.mkOption {
+ default = [ ];
+ example = [ "your application" ];
+ type = lib.types.listOf lib.types.str;
+ description = ''
+ Extra exec_once.
+ '';
+ };
+ };
+
+ nvim-colorscheme = lib.mkOption {
+ default = { tokyonight = { enable = true; }; };
+ example = { catppuccin = { enable = true; }; };
+ type = lib.types.attrs;
+ description = ''
+ nixvim colorscheme.
+ '';
+ };
+
+ colorscheme = lib.mkOption {
+ default = {
+ # custom tokyo night
+ base00 = "1A1B26";
+ # base01 = "16161E";
+ # base01 = "15161e";
+ base01 = "191a25";
+ base02 = "2F3549";
+ base03 = "444B6A";
+ base04 = "787C99";
+ base05 = "A9B1D6";
+ base06 = "CBCCD1";
+ base07 = "D5D6DB";
+ base08 = "C0CAF5";
+ base09 = "A9B1D6";
+ base0A = "0DB9D7";
+ base0B = "9ECE6A";
+ base0C = "B4F9F8";
+ # base0D = "2AC3DE";
+ # base0D = "A9B1D6";
+ # base0D = "62A0EA";
+ # base0D = "779EF1";
+ base0D = "366fea";
+ base0E = "BB9AF7";
+ base0F = "F7768E";
+ };
+ example = "catppuccin-mocha";
+ type = with lib.types; oneOf [ str attrs path ];
+ description = ''
+ Base16 colorscheme.
+ Can be an attribute set with base00 to base0F,
+ a string that leads to a yaml file in base16-schemes path,
+ or a path to a custom yaml file.
+ '';
+ };
+ };
+
+ config = {
+ conf.boot_params = lib.mkIf config.conf.amdGpu [
+ "amdgpu.ppfeaturemask=0xffffffff"
+ ];
+
+ conf.kernel = lib.mkIf config.conf.gaming.enable pkgs.linuxPackages_xanmod_latest;
+ };
+}
diff --git a/nix/override/cambalache.nix b/nix/override/cambalache.nix
new file mode 100644
index 0000000..7b119fb
--- /dev/null
+++ b/nix/override/cambalache.nix
@@ -0,0 +1,92 @@
+{ stdenv
+, lib
+, pkgs
+, fetchFromGitLab
+, nix-update-script
+}:
+
+pkgs.python3.pkgs.buildPythonApplication rec {
+ pname = "cambalache";
+ version = "0.90.1";
+
+ format = "other";
+
+ # Did not fetch submodule since it is only for tests we don't run.
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "jpu";
+ repo = pname;
+ rev = version;
+ sha256 = "sha256-YuRxqrGJvhMMZApD/tQSWkUg/nZnp/xryBJSjXCXO4w=";
+ };
+
+ nativeBuildInputs = with pkgs; [
+ meson
+ ninja
+ pkg-config
+ gobject-introspection # for setup hook
+ desktop-file-utils # for update-desktop-database
+ shared-mime-info # for update-mime-database
+ wrapGAppsHook
+ ];
+
+ pythonPath = with pkgs.python3.pkgs; [
+ pygobject3
+ lxml
+ ];
+
+ buildInputs = with pkgs; [
+ glib
+ gtk3
+ gtk4
+ gtksourceview4
+ gtksourceview5
+ webkitgtk_4_1
+ webkitgtk_6_0
+ # For extra widgets support.
+ libadwaita
+ libhandy
+ ];
+
+ # Prevent double wrapping.
+ dontWrapGApps = true;
+
+ postPatch = ''
+ patchShebangs postinstall.py
+ # those programs are used at runtime not build time
+ # https://gitlab.gnome.org/jpu/cambalache/-/blob/0.12.1/meson.build#L79-80
+ substituteInPlace ./meson.build \
+ --replace "find_program('broadwayd', required: true)" "" \
+ --replace "find_program('gtk4-broadwayd', required: true)" ""
+ '';
+
+ preFixup = ''
+ # Let python wrapper use GNOME flags.
+ makeWrapperArgs+=(
+ # For broadway daemons
+ --prefix PATH : "${lib.makeBinPath [ pkgs.gtk3 pkgs.gtk4 ]}"
+ "''${gappsWrapperArgs[@]}"
+ )
+ '';
+
+ postFixup = ''
+ # Wrap a helper script in an unusual location.
+ wrapPythonProgramsIn "$out/${pkgs.python3.sitePackages}/cambalache/priv/merengue" "$out $pythonPath"
+ '';
+
+ passthru = {
+ updateScript = nix-update-script { };
+ };
+
+ meta = with lib; {
+ homepage = "https://gitlab.gnome.org/jpu/cambalache";
+ description = "RAD tool for GTK 4 and 3 with data model first philosophy";
+ mainProgram = "cambalache";
+ maintainers = teams.gnome.members;
+ license = with licenses; [
+ lgpl21Only # Cambalache
+ gpl2Only # tools
+ ];
+ platforms = platforms.unix;
+ };
+}
diff --git a/nix/override/streamdeck.nix b/nix/override/streamdeck.nix
new file mode 100644
index 0000000..705155f
--- /dev/null
+++ b/nix/override/streamdeck.nix
@@ -0,0 +1,106 @@
+{ lib
+, pkgs
+, python3Packages
+, fetchFromGitHub
+, writeText
+, makeDesktopItem
+}:
+
+python3Packages.buildPythonApplication rec {
+ pname = "streamdeck-ui";
+ version = "4.1.2";
+
+ src = fetchFromGitHub {
+ repo = "streamdeck-linux-gui";
+ owner = "streamdeck-linux-gui";
+ rev = "v${version}";
+ sha256 = "sha256-CSsFPGnKVQUCND6YOA9kfO41KS85C57YL9LcrWlQRKo=";
+ };
+
+ patches = [
+ # nixpkgs has a newer pillow version
+ ./streamdeck.patch
+ ];
+
+ desktopItems =
+ let
+ common = {
+ name = "streamdeck-ui";
+ desktopName = "Stream Deck UI";
+ icon = "streamdeck-ui";
+ exec = "streamdeck";
+ comment = "UI for the Elgato Stream Deck";
+ categories = [ "Utility" ];
+ };
+ in
+ builtins.map makeDesktopItem [
+ common
+ (common // {
+ name = "${common.name}-noui";
+ exec = "${common.exec} --no-ui";
+ noDisplay = true;
+ })
+ ];
+
+ postInstall =
+ let
+ udevRules = ''
+ SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", TAG+="uaccess"
+ '';
+ in
+ ''
+ mkdir -p $out/lib/systemd/user
+ substitute scripts/streamdeck.service $out/lib/systemd/user/streamdeck.service \
+ --replace '' $out/bin/streamdeck
+
+ mkdir -p "$out/etc/udev/rules.d"
+ cp ${writeText "70-streamdeck.rules" udevRules} $out/etc/udev/rules.d/70-streamdeck.rules
+
+ mkdir -p "$out/share/pixmaps"
+ cp streamdeck_ui/logo.png $out/share/pixmaps/streamdeck-ui.png
+ '';
+
+ dontWrapQtApps = true;
+ dontWrapGApps = true;
+ makeWrapperArgs = [ "\${qtWrapperArgs[@]}" "\${gappsWrapperArgs[@]}" ];
+
+ format = "pyproject";
+
+ nativeBuildInputs = [
+ pkgs.python3Packages.poetry-core
+ pkgs.copyDesktopItems
+ pkgs.qt6.wrapQtAppsHook
+ pkgs.wrapGAppsHook
+ ];
+
+ propagatedBuildInputs = with pkgs.python3Packages; [
+ importlib-metadata
+ setuptools
+ filetype
+ cairosvg
+ pillow
+ pynput
+ pyside6
+ streamdeck
+ xlib
+ ] ++ lib.optionals stdenv.isLinux [
+ pkgs.qt6.qtwayland
+ ];
+
+ nativeCheckInputs = [
+ pkgs.xvfb-run
+ pkgs.python3Packages.pytest
+ ];
+
+ # checkPhase = ''
+ # xvfb-run pytest tests
+ # '';
+
+ meta = with lib; {
+ description = "Linux compatible UI for the Elgato Stream Deck";
+ homepage = "https://streamdeck-linux-gui.github.io/streamdeck-linux-gui/";
+ license = licenses.mit;
+ mainProgram = "streamdeck";
+ maintainers = with maintainers; [ majiir ];
+ };
+}
diff --git a/nix/override/streamdeck.patch b/nix/override/streamdeck.patch
new file mode 100644
index 0000000..3c8cf05
--- /dev/null
+++ b/nix/override/streamdeck.patch
@@ -0,0 +1,18 @@
+diff --git a/pyproject.toml b/pyproject.toml
+index 54a8c19..0b95fb3 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -14,11 +14,11 @@ packages = [
+ [tool.poetry.dependencies]
+ python = ">=3.8,<3.13"
+ streamdeck = "^0.9.5"
+-pillow = "10.2.0"
++pillow = "^10.2.0"
+ pyside6 = "^6.4.2"
+ CairoSVG = "^2.5.2"
+ filetype = "^1.0.10"
+-importlib-metadata = "^6.8.0"
++importlib-metadata = "^7.0.0"
+ evdev = "^1.6.1"
+
+ [tool.poetry.group.docs.dependencies]
diff --git a/nix/programs/coding.nix b/nix/programs/coding.nix
new file mode 100644
index 0000000..305439d
--- /dev/null
+++ b/nix/programs/coding.nix
@@ -0,0 +1,121 @@
+{ pkgs
+, lib
+, config
+, ...
+}:
+{
+ imports = [
+ # old neovim config
+ # (import ./nvim/default.nix { inherit lib pkgs; colorscheme = config.conf.colorscheme; })
+ ];
+
+ programs.dashvim = {
+ enable = true;
+ colorscheme = config.conf.colorscheme;
+ };
+
+ home.packages = with pkgs; [
+ #basics
+ gitui
+ gcc
+ meson
+ ninja
+ tree-sitter
+ unzip
+ pkg-config
+ sqlite
+ plantuml
+ d-spy
+
+ # cpp
+ bear
+ clang-tools
+
+ #sql
+ nodePackages.sql-formatter
+ sqls
+
+ #assembly
+ asm-lsp
+
+ #yaml
+ yamlfmt
+ yamllint
+ yaml-language-server
+
+ #markdown
+ marksman
+ mdformat
+
+ #bash
+ bash-language-server
+ shfmt
+
+ #fsharp
+ fsharp
+ fsautocomplete
+
+ #haskell
+ haskellPackages.cabal-install
+ ghc
+ haskellPackages.haskell-language-server
+
+ #html
+ html-tidy
+
+ #json
+ jq
+ nodePackages.vscode-json-languageserver
+
+ #css
+ tailwindcss
+ tailwindcss-language-server
+ vscode-langservers-extracted
+
+ #editors
+ neovide
+ ##fallback
+ vscodium
+
+ #rust
+ rustup
+
+ #python
+ python3
+ python312Packages.python-lsp-server
+ python312Packages.python-lsp-ruff
+ python312Packages.python-lsp-black
+
+ #ts/js
+ nodejs_20
+ deno
+ typescript
+ nodePackages.typescript-language-server
+ nodePackages.prettier
+
+ #go
+ go
+ gopls
+
+ #typst
+ typst
+ tinymist
+ ltex-ls
+
+ #java
+ gradle
+ maven
+ jdt-language-server
+ adoptopenjdk-jre-bin
+
+ #.!
+ dotnet-sdk_8
+ omnisharp-roslyn
+ csharpier
+ netcoredbg
+
+ #zig
+ zig
+ zls
+ ];
+}
diff --git a/nix/programs/common.nix b/nix/programs/common.nix
new file mode 100644
index 0000000..49f0074
--- /dev/null
+++ b/nix/programs/common.nix
@@ -0,0 +1,128 @@
+{ pkgs
+, inputs
+, lib
+, config
+, ...
+}:
+let
+ callPackage = lib.callPackageWith (pkgs);
+ username = config.conf.username;
+in
+{
+ manual = {
+ html.enable = false;
+ json.enable = false;
+ manpages.enable = false;
+ };
+
+ fonts.fontconfig.enable = true;
+ home.packages = with pkgs; [
+ vesktop
+ kitty
+ fish
+ ripgrep
+ rm-improved
+ bat
+ fd
+ lsd
+ (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
+ noto-fonts
+ flatpak
+ networkmanager
+ zoxide
+ fastfetch
+ pkgs.gnome-keyring
+ dbus
+ killall
+ adw-gtk3
+ qt5ct
+ qt6ct
+ gnutar
+ fishPlugins.tide
+ nix-index
+ libnotify
+ zenith
+ nh
+ amberol
+ pulseaudio
+ playerctl
+ ncspot
+ poppler_utils
+ brave
+ greetd.regreet
+ sops
+ flake-checker
+ ffmpeg
+ system-config-printer
+ brightnessctl
+ (callPackage
+ ../override/cambalache.nix
+ { })
+ ];
+
+ #my own programs
+ programs.oxicalc.enable = true;
+ programs.oxinoti.enable = true;
+ programs.oxidash.enable = true;
+ programs.oxishut.enable = true;
+ programs.oxipaste.enable = true;
+ programs.hyprdock.enable = true;
+ programs.ReSet.enable = true;
+ programs.ReSet.config.plugins = [
+ inputs.reset-plugins.packages."x86_64-linux".monitor
+ inputs.reset-plugins.packages."x86_64-linux".keyboard
+ ];
+ programs.ReSet.config.plugin_config = {
+ Keyboard = {
+ path = "/home/${username}/.config/reset/keyboard.conf";
+ };
+ };
+
+ nixpkgs.config.allowUnfree = true;
+
+ home.username = username;
+ home.homeDirectory = "/home/${username}";
+ home.stateVersion = "24.05";
+
+ home.sessionPath = [
+ "$HOME/.cargo/bin"
+ ];
+
+ home.sessionVariables = {
+ GOROOT = "$HOME/.go";
+ };
+
+ home.keyboard = null;
+
+ home.file.".local/share/flatpak/overrides/global".text = ''
+ [Context]
+ filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0
+ '';
+ #
+ # dconf.settings = {
+ # "org/gnome/desktop/interface" = {
+ # gtk-theme = "adw-gtk3";
+ # cursor-theme = "Bibata-Modern-Classic";
+ # cursor-size = 24;
+ # icon-theme = "MoreWaita";
+ # };
+ # };
+
+ programs.nix-index =
+ {
+ enable = true;
+ enableFishIntegration = true;
+ };
+
+ sops = {
+ gnupg = {
+ home = "~/.gnupg";
+ sshKeyPaths = [ ];
+ };
+ defaultSopsFile = ../secrets/secrets.yaml;
+ secrets.hub = { };
+ secrets.lab = { };
+ secrets.${username} = { };
+ };
+ systemd.user.services.mbsync.Unit.After = [ "sops-nix.service" ];
+}
diff --git a/nix/programs/default.nix b/nix/programs/default.nix
new file mode 100644
index 0000000..a0e4b2f
--- /dev/null
+++ b/nix/programs/default.nix
@@ -0,0 +1,48 @@
+{ inputs, pkgs, config, lib, mod, ... }:
+let
+ base_imports = [
+ inputs.anyrun.homeManagerModules.default
+ inputs.ironbar.homeManagerModules.default
+ inputs.oxicalc.homeManagerModules.default
+ inputs.oxishut.homeManagerModules.default
+ inputs.oxinoti.homeManagerModules.default
+ inputs.oxidash.homeManagerModules.default
+ inputs.oxipaste.homeManagerModules.default
+ inputs.hyprdock.homeManagerModules.default
+ inputs.hyprland.homeManagerModules.default
+ inputs.reset.homeManagerModules.default
+ inputs.nix-flatpak.homeManagerModules.nix-flatpak
+ inputs.sops-nix.homeManagerModules.sops
+ inputs.dashvim.homeManagerModules.dashvim
+ ];
+in
+{
+ xdg.portal.config.common.default = "*";
+ xdg.portal = {
+ enable = true;
+ extraPortals = [
+ pkgs.xdg-desktop-portal-gtk
+ ];
+ };
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+ home-manager.extraSpecialArgs = {
+ inherit inputs;
+ };
+
+ home-manager.users.${config.conf.username} = {
+ imports = [
+ ./hyprland/default.nix
+ ./flatpak.nix
+ ./common.nix
+ ./coding.nix
+ ./xdg.nix
+ ./media.nix
+ ./utils.nix
+ ./oxi/default.nix
+ ./themes/default.nix
+ ./individual_configs/default.nix
+ ] ++ base_imports
+ ++ lib.optional (builtins.pathExists mod) mod;
+ };
+}
diff --git a/nix/programs/flatpak.nix b/nix/programs/flatpak.nix
new file mode 100644
index 0000000..4abc89d
--- /dev/null
+++ b/nix/programs/flatpak.nix
@@ -0,0 +1,14 @@
+{ lib, ... }: {
+
+ services.flatpak.remotes = lib.mkOptionDefault [{
+ name = "flathub-stable";
+ location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
+ }];
+ services.flatpak.uninstallUnmanaged = true;
+ services.flatpak.packages = [
+ # fallback if necessary, but generally avoided as nix is superior :)
+ "com.github.tchx84.Flatseal"
+ "io.github.Foldex.AdwSteamGtk"
+ ];
+}
+
diff --git a/nix/programs/gaming/default.nix b/nix/programs/gaming/default.nix
new file mode 100644
index 0000000..fa34c60
--- /dev/null
+++ b/nix/programs/gaming/default.nix
@@ -0,0 +1,33 @@
+{ pkgs
+, lib
+, config
+, ...
+}: lib.mkIf config.conf.gaming.enable {
+ environment.systemPackages = with pkgs; [
+ gamemode
+ steam
+ lutris
+ wine
+ adwsteamgtk
+ ];
+
+ programs.steam.enable = true;
+ programs.gamemode.enable = true;
+ programs.gamemode = {
+ enableRenice = true;
+ settings = {
+ general = {
+ governor = "performance";
+ };
+ gpu = {
+ apply_gpu_optimisations = "accept-responsibility";
+ gpu_device = config.conf.gaming.device;
+ amd_performance_level = "high";
+ };
+ custom = {
+ start = "notify-send -a 'Gamemode' 'Optimizations activated'";
+ end = "notify-send -a 'Gamemode' 'Optimizations deactivated'";
+ };
+ };
+ };
+}
diff --git a/nix/programs/hyprland/anyrun.nix b/nix/programs/hyprland/anyrun.nix
new file mode 100644
index 0000000..08d78dc
--- /dev/null
+++ b/nix/programs/hyprland/anyrun.nix
@@ -0,0 +1,69 @@
+{ inputs, pkgs, ... }: {
+ programs.anyrun = {
+ enable = true;
+ config = {
+ plugins = [
+ inputs.anyrun.packages.${pkgs.system}.applications
+ inputs.anyrun.packages.${pkgs.system}.rink
+ inputs.anyrun.packages.${pkgs.system}.translate
+ inputs.anyrun.packages.${pkgs.system}.websearch
+ ];
+ #position = "center";
+ hideIcons = false;
+ width = { fraction = 0.3; };
+ y = { fraction = 0.5; };
+ layer = "overlay";
+ hidePluginInfo = true;
+ closeOnClick = true;
+ };
+
+ extraCss = ''
+ #window {
+ border-radius: 10px;
+ background-color: none;
+ }
+
+ box#main {
+ border-radius: 10px;
+ }
+
+ list#main {
+ border-radius: 10px;
+ margin: 0px 10px 10px 10px;
+ }
+
+ list#plugin {
+ border-radius: 10px;
+ }
+
+ list#match {
+ border-radius: 10px;
+ }
+
+ entry#entry {
+ border: none;
+ border-radius: 10px;
+ margin: 10px 10px 0px 10px;
+ }
+
+ label#match-desc {
+ font-size: 12px;
+ border-radius: 10px;
+ }
+
+ label#match-title {
+ font-size: 12px;
+ border-radius: 10px;
+ }
+
+ label#plugin {
+ font-size: 16px;
+ border-radius: 10px;
+ }
+
+ * {
+ border-radius: 10px;
+ }
+ '';
+ };
+}
diff --git a/nix/programs/hyprland/config.nix b/nix/programs/hyprland/config.nix
new file mode 100644
index 0000000..4673dd6
--- /dev/null
+++ b/nix/programs/hyprland/config.nix
@@ -0,0 +1,261 @@
+{ config
+, lib
+, ...
+}:
+{
+ wayland.windowManager.hyprland.enable = true;
+ wayland.windowManager.hyprland.settings = {
+ "$mod" = "SUPER";
+ "source" = "/home/${config.conf.username}/.config/reset/keyboard.conf";
+
+ bindm = [
+ "$mod, mouse:272, movewindow"
+ "$mod, mouse:273, resizewindow"
+ ];
+
+ bind = [
+ # screenshots
+ "$mod SUPER,S,exec,grim -g \"$(slurp)\" - | wl-copy"
+ "$mod SUPERSHIFTALT,S,exec, grim -g \"$(slurp)\" $HOME/gits/ost-5semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy"
+ "$mod SUPERSHIFT,S,exec,grim -g \"$(slurp)\" - | satty -f -"
+ "$mod SUPERCONTROLSHIFT,S,exec,grim -c -g \"2560,0 3440x1440\" - | wl-copy"
+
+ # regular programs
+ "$mod SUPER,F,exec,firefox"
+ "$mod SUPER,T,exec,kitty -1"
+ "$mod SUPER,E,exec,nautilus -w"
+ "$mod SUPER,N,exec,neovide"
+ "$mod SUPER,M,exec,oxidash"
+ "$mod SUPER,R,exec,anyrun"
+ "$mod SUPER,G,exec,oxicalc"
+ "$mod SUPER,D,exec,oxishut"
+ "$mod SUPER,A,exec,oxipaste"
+ "$mod SUPERSHIFT,P,exec,hyprdock --gui"
+ "$mod SUPERSHIFT,L,exec, playerctl -a pause & hyprlock & systemctl suspend"
+ "$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate"
+
+ # media keys
+ ",XF86AudioMute,exec, $HOME/.config/scripts/audio_control.sh mute"
+ ",XF86AudioLowerVolume,exec, $HOME/.config/scripts/audio_control.sh sink -5%"
+ ",XF86AudioRaiseVolume,exec, $HOME/.config/scripts/audio_control.sh sink +5%"
+ ",XF86AudioPlay,exec, playerctl play-pause"
+ ",XF86AudioNext,exec, playerctl next"
+ ",XF86AudioPrev,exec, playerctl previous"
+ ",XF86MonBrightnessDown,exec, $HOME/.config/scripts/change-brightness brightness 10%-"
+ ",XF86MonBrightnessUp,exec, $HOME/.config/scripts/change-brightness brightness +10%"
+
+ # hyprland keybinds
+ # misc
+ "$mod SUPER,V,togglefloating,"
+ "$mod SUPER,B,fullscreen,"
+ "$mod SUPER,C,togglesplit"
+ "$mod SUPER,Q,killactive,"
+ "$mod SUPERSHIFTALT,M,exit,"
+ "$mod SUPERSHIFT,W,togglespecialworkspace"
+
+ # move
+ "$mod SUPER,left,movewindow,l"
+ "$mod SUPER,right,movewindow,r"
+ "$mod SUPER,up,movewindow,u"
+ "$mod SUPER,down,movewindow,d"
+
+ # workspaces
+ "$mod SUPER,1,workspace,1"
+ "$mod SUPER,2,workspace,2"
+ "$mod SUPER,3,workspace,3"
+ "$mod SUPER,4,workspace,4"
+ "$mod SUPER,5,workspace,5"
+ "$mod SUPER,6,workspace,6"
+ "$mod SUPER,7,workspace,7"
+ "$mod SUPER,8,workspace,8"
+ "$mod SUPER,9,workspace,9"
+ "$mod SUPER,0,workspace,10"
+
+ # move to workspace
+ "$mod SUPERSHIFT,1,movetoworkspace,1"
+ "$mod SUPERSHIFT,2,movetoworkspace,2"
+ "$mod SUPERSHIFT,3,movetoworkspace,3"
+ "$mod SUPERSHIFT,4,movetoworkspace,4"
+ "$mod SUPERSHIFT,5,movetoworkspace,5"
+ "$mod SUPERSHIFT,6,movetoworkspace,6"
+ "$mod SUPERSHIFT,7,movetoworkspace,7"
+ "$mod SUPERSHIFT,8,movetoworkspace,8"
+ "$mod SUPERSHIFT,9,movetoworkspace,9"
+ "$mod SUPERSHIFT,0,movetoworkspace,10"
+
+
+ # move to workspace silent
+ "$mod SUPERSHIFTALT,1,movetoworkspacesilent,1"
+ "$mod SUPERSHIFTALT,2,movetoworkspacesilent,2"
+ "$mod SUPERSHIFTALT,3,movetoworkspacesilent,3"
+ "$mod SUPERSHIFTALT,4,movetoworkspacesilent,4"
+ "$mod SUPERSHIFTALT,5,movetoworkspacesilent,5"
+ "$mod SUPERSHIFTALT,6,movetoworkspacesilent,6"
+ "$mod SUPERSHIFTALT,7,movetoworkspacesilent,7"
+ "$mod SUPERSHIFTALT,8,movetoworkspacesilent,8"
+ "$mod SUPERSHIFTALT,9,movetoworkspacesilent,9"
+ "$mod SUPERSHIFTALT,0,movetoworkspacesilent,10"
+
+ # preselection
+ "$mod SUPERALT,j,layoutmsg,preselect l"
+ "$mod SUPERALT,k,layoutmsg,preselect d"
+ "$mod SUPERALT,l,layoutmsg,preselect u"
+ "$mod SUPERALT,semicolon,layoutmsg,preselect r"
+ "$mod SUPERALT,h,layoutmsg,preselect n"
+ ];
+
+ binde = [
+ # hyprland keybinds
+ # focus
+ "$mod SUPER,J,movefocus,l"
+ "$mod SUPER,semicolon,movefocus,r"
+ "$mod SUPER,L,movefocus,u"
+ "$mod SUPER,K,movefocus,d"
+
+ # resize
+ "$mod SUPER,U,resizeactive,-20 0"
+ "$mod SUPER,P,resizeactive,20 0"
+ "$mod SUPER,O,resizeactive,0 -20"
+ "$mod SUPER,I,resizeactive,0 20"
+ ];
+
+ general = {
+ gaps_out = "3,5,5,5";
+ border_size = 3;
+ "col.active_border" = lib.mkForce "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
+ # "col.inactive_border" = "0x66333333";
+ allow_tearing = true;
+ };
+
+ decoration = {
+ rounding = 4;
+ };
+
+ animations = {
+ bezier = "penguin,0.05,0.9,0.1,1.0";
+ animation = [
+ "windowsMove,1,4,default"
+ "windows,1,7,default,popin 70%"
+ "windowsOut,1,7,default,popin 70%"
+ "border,1,10,default"
+ "fade,1,7,default"
+ "workspaces,1,6,default"
+ "layers,1,3,default,popin"
+ ];
+ };
+
+ dwindle = {
+ preserve_split = true;
+ pseudotile = 0;
+ permanent_direction_override = false;
+ };
+
+ input = {
+ #kb_layout = "dashie";
+ repeat_delay = 200;
+ force_no_accel = true;
+ touchpad = {
+ natural_scroll = true;
+ tap-to-click = true;
+ tap-and-drag = true;
+ };
+ };
+
+ misc = {
+ animate_manual_resizes = 1;
+ enable_swallow = true;
+ disable_splash_rendering = true;
+ disable_hyprland_logo = true;
+ swallow_regex = "^(.*)(kitty)(.*)$";
+ initial_workspace_tracking = 1;
+ };
+
+ cursor = {
+ # conversion seems to be borked right now, i want a smooth bibata :(
+ enable_hyprcursor = false;
+ };
+
+ gestures = {
+ workspace_swipe = true;
+ };
+
+ monitor = config.conf.hyprland.monitor;
+ workspace = config.conf.hyprland.workspace;
+
+ env = [
+ "GTK_CSD,0"
+ "TERM,\"kitty /bin/fish\""
+ "XDG_CURRENT_DESKTOP=Hyprland"
+ "XDG_SESSION_TYPE=wayland"
+ "XDG_SESSION_DESKTOP=Hyprland"
+ "HYPRCURSOR_THEME,Bibata-Modern-Classic"
+ "HYPRCURSOR_SIZE,24"
+ "XCURSOR_THEME,Bibata-Modern-Classic"
+ "XCURSOR_SIZE,24"
+ "QT_QPA_PLATFORM,wayland"
+ "QT_QPA_PLATFORMTHEME,qt5ct"
+ "QT_WAYLAND_FORCE_DPI,96"
+ "QT_AUTO_SCREEN_SCALE_FACTOR,0"
+ "QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
+ "QT_SCALE_FACTOR,1"
+ "EDITOR,\"neovide --novsync --nofork\""
+ "WLR_DRM_NO_ATOMIC,1"
+ "GTK_USE_PORTAL, 1"
+ ];
+
+ layerrule = [
+ # layer rules
+ # mainly to disable animations within slurp and grim
+ "noanim, selection"
+ ];
+
+ windowrule = [
+ # window rules
+ "tile,^(.*)(Spotify)(.*)$"
+ "float,^(.*)(OxiCalc)(.*)$"
+ "float,^(.*)(winecfg.exe)(.*)$"
+ "float,^(.*)(speed.exe)(.*)$"
+ "float,^(.*)(copyq)(.*)$"
+ "center,^(.*)(swappy)(.*)$"
+ "float,title:^(.*)(Spirit)(.*)$"
+ "float,title:^(.*)(reset)(.*)$"
+ "workspace 10 silent,^(.*)(steam)(.*)$"
+ "workspace 9 silent,^(.*)(dota)(.*)$"
+ "workspace 9 silent,^(.*)(battlebits)(.*)$"
+ "workspace 9 silent,^(.*)(aoe)(.*)$"
+ "suppressevent fullscreen maximize,^(.*)(neovide)(.*)$"
+ ];
+
+ windowrulev2 = [
+ "immediate,class:^(.*)(Pal)$"
+ "immediate,class:^(.*)(dota2)$"
+ "immediate,class:^(.*)(needforspeedheat.exe)$"
+ ];
+
+ exec-once = [
+ # environment
+ "systemctl --user import-environment"
+ "dbus-update-activation-environment --systemd --all"
+ "hyprctl setcursor Bibata-Modern-Classic 24"
+
+ # other programs
+ "hyprpaper"
+ "ironbar"
+ "firefox"
+ "oxipaste_daemon"
+ "nextcloud --background"
+ "oxinoti"
+ ] ++ config.conf.hyprland.extra_autostart;
+
+ # plugin = {
+ # hyprspace = {
+ # bind = [
+ # "SUPER, W, overview:toggle, toggle"
+ # ];
+ # };
+ # };
+ };
+ # wayland.windowManager.hyprland.plugins = [
+ # inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
+ # ];
+}
diff --git a/nix/programs/hyprland/default.nix b/nix/programs/hyprland/default.nix
new file mode 100644
index 0000000..c0873de
--- /dev/null
+++ b/nix/programs/hyprland/default.nix
@@ -0,0 +1,28 @@
+{ pkgs
+, ...
+}: {
+ imports = [
+ ./anyrun.nix
+ ./config.nix
+ ./ironbar.nix
+ ./hyprpaper.nix
+ ./hyprlock.nix
+ ];
+
+ home.packages = with pkgs; [
+ xorg.xprop
+ grim
+ slurp
+ satty
+ xdg-desktop-portal-gtk
+ # xdg-desktop-portal-hyprland
+ copyq
+ nautilus
+ sushi
+ nautilus-python
+ wl-clipboard
+ hyprcursor
+ hyprpaper
+ hyprpicker
+ ];
+}
diff --git a/nix/programs/hyprland/hyprlock.nix b/nix/programs/hyprland/hyprlock.nix
new file mode 100644
index 0000000..70e01b7
--- /dev/null
+++ b/nix/programs/hyprland/hyprlock.nix
@@ -0,0 +1,36 @@
+{ config
+, ...
+}:
+{
+ programs.hyprlock = {
+ enable = true;
+ settings = {
+ background = [
+ {
+ monitor = "";
+ path = "";
+ color = "rgba(26, 27, 38, 1.0)";
+ }
+ ];
+
+ input-field = [
+ {
+ monitor = "${config.conf.monitor}";
+
+ placeholder_text = "password or something";
+ }
+ ];
+
+ label = [
+ {
+ monitor = "${config.conf.monitor}";
+ text = "$TIME";
+ font_size = 50;
+ position = "0, 200";
+ valign = "center";
+ halign = "center";
+ }
+ ];
+ };
+ };
+}
diff --git a/nix/programs/hyprland/hyprpaper.nix b/nix/programs/hyprland/hyprpaper.nix
new file mode 100644
index 0000000..802a963
--- /dev/null
+++ b/nix/programs/hyprland/hyprpaper.nix
@@ -0,0 +1,5 @@
+{ config, ... }: {
+ xdg.configFile."hypr/hyprpaper.conf" = {
+ text = config.conf.hyprland.hyprpaper;
+ };
+}
diff --git a/nix/programs/hyprland/ironbar.nix b/nix/programs/hyprland/ironbar.nix
new file mode 100644
index 0000000..0b8a070
--- /dev/null
+++ b/nix/programs/hyprland/ironbar.nix
@@ -0,0 +1,261 @@
+{ config, ... }:
+let
+ username = config.conf.username;
+in
+{
+
+ programs.ironbar =
+ {
+ enable = true;
+ style = ''
+ @import url("/home/${username}/.config/gtk-3.0/gtk.css");
+
+ * {
+ color: #71bbe6;
+ padding: 0px;
+ margin: 0px;
+ }
+
+ .background {
+ background-color: rgba(0, 0, 0, 0);
+ }
+
+ .workspaces {
+ margin: 2px 0px 0px 5px;
+ border-radius: 10px;
+ /* background-color: #2b2c3b; */
+ background-color: #1E1E2E;
+ padding: 2px 5px 2px 5px;
+ }
+
+ .workspaces .item {
+ margin: 0px 3px 0px 3px;
+ font-size: 13px;
+ border-radius: 100%;
+ padding: 0px 2px 0px 3px;
+ background-color: rgba(0, 0, 0, 0);
+ }
+
+ .workspaces .item:hover {
+ background-color: #3e4152;
+ }
+
+ .workspaces .item.focused {
+ background-color: #3e4152;
+ }
+
+ .audio-box {
+ padding: 2em;
+ background-color: #1E1E2E;
+ border-radius: 5px;
+ }
+
+ .audio-slider {
+ padding: 5px;
+ margin: 5px;
+ }
+
+ .audio-button {
+ padding: 5px 10px 5px 10px;
+ margin: 0px 1em 20px 1em;
+ border-radius: 100%;
+ font-size: 17px;
+ }
+
+ .audio-button-box {
+ padding: 0px 2.5em 0px 2.5em;
+ }
+
+ .focused {
+ /* margin: 2px 0px 0px 0px; */
+ padding: 0px 5px 0px 5px;
+ /* background-color: 1a1b26; */
+ background-color: #1E1E2E;
+ font-size: 17px;
+ border-radius: 10px;
+ }
+
+ #bar #end {
+ margin: 0px 5px 0px 0px;
+ padding: 0px 5px 0px 5px;
+ background-color: #1E1E2E;
+ border-radius: 10px;
+ }
+
+ .popup-button {
+ padding: 0px 5px 0px 3px;
+ margin: 0em 3px;
+ border-radius: 100%;
+ font-size: 13px;
+ background-color: #1E1E2E;
+ }
+
+ .popup-button-box {
+ padding: 2px 0px 2px 0px;
+ }
+
+ .clock {
+ padding: 0px 5px 0px 5px;
+ font-size: 17px;
+ background-color: #1E1E2E;
+ }
+
+ .clock:hover {
+ background-color: #3e4152;
+ }
+
+ .custom button {
+ background-color: #1E1E2E;
+ }
+
+ .custom button:hover {
+ background-color: #3e4152;
+ }
+
+ .memory-usage {
+ font-size: 15px;
+ margin: 0px 5px 0px 0px;
+ }
+
+ .memory-usage:hover {
+ background-color: #3e4152;
+ }
+
+ .popup-clock {
+ background-color: #1E1E2E;
+ border-radius: 5px;
+ padding: 2px 8px 10px 8px;
+ }
+
+ .popup-clock .calendar-clock {
+ font-size: 2.5em;
+ padding-bottom: 0.1em;
+ }
+
+ .popup-clock .calendar {
+ border-radius: 5px;
+ font-size: 1.05em;
+ }
+
+ .popup-clock .calendar:selected {
+ background-color: #3e4152;
+ }
+ '';
+ features = [
+ #"another_feature"
+ ];
+ config = {
+ monitors."${config.conf.monitor}" = {
+ end = config.conf.ironbar.modules ++ [
+ {
+ type = "sys_info";
+ format = [
+ " {memory_percent}"
+ ];
+ interval.memory = 30;
+ class = "memory-usage";
+ }
+ {
+ type = "custom";
+ bar = [
+ {
+ type = "button";
+ class = "popup-button";
+ label = "";
+ on_click = "popup:toggle";
+ }
+ ];
+ class = "popup-button-box";
+ popup = [
+ {
+ type = "box";
+ orientation = "vertical";
+ class = "audio-box";
+ widgets = [
+ {
+ type = "box";
+ orientation = "horizontal";
+ widgets = [
+ {
+ type = "button";
+ class = "audio-button";
+ label = "";
+ on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth";
+ }
+ {
+ type = "button";
+ class = "audio-button";
+ label = "";
+ on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh internal";
+ }
+ ];
+ class = "audio-button-box";
+ }
+ {
+ type = "label";
+ label = "Output";
+ }
+ {
+ type = "slider";
+ class = "audio-slider";
+ step = 1.0;
+ length = 200;
+ value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
+ on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
+ }
+ {
+ type = "label";
+ label = "Input";
+ }
+ {
+ type = "slider";
+ class = "audio-slider";
+ step = 1.0;
+ length = 200;
+ value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
+ on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
+ }
+ ];
+ }
+ ];
+ }
+ {
+ type = "custom";
+ bar = [
+ {
+ type = "button";
+ class = "popup-button";
+ label = "";
+ on_click = "!oxidash --css /home/${username}/gits/oxidash/style.css";
+ }
+ ];
+ class = "popup-button-box";
+ }
+ {
+ type = "clock";
+ format = "%I:%M";
+ format_popup = "%I:%M:%S";
+ locale = "en_US";
+ }
+ { type = "tray"; }
+ ];
+ position = "top";
+ height = 10;
+ anchor_to_edges = true;
+ start = [{
+ type = "workspaces";
+ all_monitors = true;
+ }];
+ center = [
+ {
+ type = "focused";
+ show_icon = true;
+ show_title = true;
+ icon_size = 20;
+ truncate = "end";
+ }
+ ];
+ };
+ };
+ };
+}
diff --git a/nix/programs/individual_configs/default.nix b/nix/programs/individual_configs/default.nix
new file mode 100644
index 0000000..f705a7b
--- /dev/null
+++ b/nix/programs/individual_configs/default.nix
@@ -0,0 +1,13 @@
+{
+ imports = [
+ ./kitty.nix
+ ./yazi.nix
+ ./fish.nix
+ ./ssh.nix
+ ./direnv.nix
+ ./git.nix
+ ./firefox.nix
+ ./keepass.nix
+ ./neovide.nix
+ ];
+}
diff --git a/nix/programs/individual_configs/direnv.nix b/nix/programs/individual_configs/direnv.nix
new file mode 100644
index 0000000..615b570
--- /dev/null
+++ b/nix/programs/individual_configs/direnv.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }: {
+ xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml { }).generate "direnv" {
+ global = {
+ warn_timeout = "-1s";
+ };
+ };
+}
diff --git a/nix/programs/individual_configs/firefox.nix b/nix/programs/individual_configs/firefox.nix
new file mode 100644
index 0000000..6457c05
--- /dev/null
+++ b/nix/programs/individual_configs/firefox.nix
@@ -0,0 +1,29 @@
+{ pkgs, config, ... }: {
+ programs.firefox = {
+ enable = true;
+
+ policies = {
+ EnableTrackingProtection = {
+ Value = true;
+ Locked = true;
+ Cryptomining = true;
+ Fingerprinting = true;
+ };
+ DisablePocket = true;
+ DisplayBookmarksToolbar = "never";
+ DisplayMenuBar = "default-off";
+ };
+ profiles.${config.conf.username} = {
+ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
+ ublock-origin
+ darkreader
+ privacy-badger
+ vimium
+ keepassxc-browser
+ i-dont-care-about-cookies
+ tokyo-night-v2
+
+ ];
+ };
+ };
+}
diff --git a/nix/programs/individual_configs/fish.nix b/nix/programs/individual_configs/fish.nix
new file mode 100644
index 0000000..2c955e7
--- /dev/null
+++ b/nix/programs/individual_configs/fish.nix
@@ -0,0 +1,140 @@
+{ config, ... }: {
+ xdg.configFile."fish/config.fish" = {
+ text =
+ ''
+ if status is-interactive
+ # Commands to run in interactive sessions can go here
+ end
+
+ # =============================================================================
+ #
+ # Utility functions for zoxide.
+ #
+
+ export NIX_PATH="$NIX_PATH:$HOME/gits/dotFiles/nix/."
+
+ set EDITOR "neovide --no-fork"
+
+ alias rebuild='sudo nixos-rebuild switch --flake /home/${config.conf.username}/gits/dotFiles/nix/.'
+ abbr --add ls 'lsd'
+ abbr --add :q 'exit'
+ abbr --add gh 'git push origin'
+ abbr --add gl 'git pull origin'
+ abbr --add gm 'git commit -m'
+ abbr --add ga "git add -A"
+ abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20'
+ abbr --add s "kitty +kitten ssh"
+ abbr --add zl 'z "" '
+ abbr --add nv 'neovide'
+ abbr --add cr 'cargo run'
+ abbr --add grep 'rg'
+ abbr --add cat 'bat'
+ abbr --add find 'fd'
+ abbr --add rm 'rip'
+
+ set fish_greeting
+ # pwd based on the value of _ZO_RESOLVE_SYMLINKS.
+ function __zoxide_pwd
+ builtin pwd -L
+ end
+
+ # A copy of fish's internal cd function. This makes it possible to use
+ # `alias cd=z` without causing an infinite loop.
+ if ! builtin functions --query __zoxide_cd_internal
+ if builtin functions --query cd
+ builtin functions --copy cd __zoxide_cd_internal
+ else
+ alias __zoxide_cd_internal='builtin cd'
+ end
+ end
+
+ # cd + custom logic based on the value of _ZO_ECHO.
+ function __zoxide_cd
+ __zoxide_cd_internal $argv
+ end
+
+ # =============================================================================
+ #
+ # Hook configuration for zoxide.
+ #
+
+ # Initialize hook to add new entries to the database.
+ function __zoxide_hook --on-variable PWD
+ test -z "$fish_private_mode"
+ and command zoxide add -- (__zoxide_pwd)
+ end
+
+ # =============================================================================
+ #
+ # When using zoxide with --no-cmd, alias these internal functions as desired.
+ #
+
+ if test -z $__zoxide_z_prefix
+ set __zoxide_z_prefix 'z!'
+ end
+ set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix)
+
+ # Jump to a directory using only keywords.
+ function __zoxide_z
+ set -l argc (count $argv)
+ if test $argc -eq 0
+ __zoxide_cd $HOME
+ else if test "$argv" = -
+ __zoxide_cd -
+ else if test $argc -eq 1 -a -d $argv[1]
+ __zoxide_cd $argv[1]
+ else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result
+ __zoxide_cd $result
+ else
+ set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv)
+ and __zoxide_cd $result
+ end
+ end
+
+ # Completions.
+ function __zoxide_z_complete
+ set -l tokens (commandline --current-process --tokenize)
+ set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize)
+
+ if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1
+ # If there are < 2 arguments, use `cd` completions.
+ complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$'
+ else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1]
+ # If the last argument is empty and the one before doesn't start with
+ # $__zoxide_z_prefix, use interactive selection.
+ set -l query $tokens[2..-1]
+ set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query)
+ and echo $__zoxide_z_prefix$result
+ commandline --function repaint
+ end
+ end
+ complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)'
+
+ # Jump to a directory using interactive search.
+ function __zoxide_zi
+ set -l result (command zoxide query --interactive -- $argv)
+ and __zoxide_cd $result
+ end
+
+ # =============================================================================
+ #
+ # Commands for zoxide. Disable these using --no-cmd.
+ #
+
+ abbr --erase z &>/dev/null
+ alias z=__zoxide_z
+
+ abbr --erase zi &>/dev/null
+ alias zi=__zoxide_zi
+
+ # =============================================================================
+ #
+ # To initialize zoxide, add this to your configuration (usually
+ # ~/.config/fish/config.fish):
+ #
+ # zoxide init fish | source
+
+ direnv hook fish | source
+ '';
+ };
+}
diff --git a/nix/programs/individual_configs/git.nix b/nix/programs/individual_configs/git.nix
new file mode 100644
index 0000000..36fd9e0
--- /dev/null
+++ b/nix/programs/individual_configs/git.nix
@@ -0,0 +1,16 @@
+{
+ programs.git = {
+ enable = true;
+ userName = "DashieTM";
+ userEmail = "fabio.lenherr@gmail.com";
+ extraConfig = {
+ merge = {
+ tool = "nvimdiff";
+ };
+ diff = {
+ tool = "nvimdiff";
+ };
+ };
+ };
+
+}
diff --git a/nix/programs/individual_configs/keepass.nix b/nix/programs/individual_configs/keepass.nix
new file mode 100644
index 0000000..58ffdb3
--- /dev/null
+++ b/nix/programs/individual_configs/keepass.nix
@@ -0,0 +1,26 @@
+{
+ xdg.configFile."keepassxc/keepassxc.ini" = {
+ text =
+ ''
+ [General]
+ ConfigVersion=2
+
+ [Browser]
+ CustomProxyLocation=
+ Enabled=true
+
+ [GUI]
+ ApplicationTheme=classic
+ HidePasswords=true
+ TrayIconAppearance=monochrome-light
+
+ [PasswordGenerator]
+ AdditionalChars=
+ ExcludedChars=
+ Length=18
+
+ [Security]
+ EnableCopyOnDoubleClick=true
+ '';
+ };
+}
diff --git a/nix/programs/individual_configs/kitty.nix b/nix/programs/individual_configs/kitty.nix
new file mode 100644
index 0000000..4bdaf35
--- /dev/null
+++ b/nix/programs/individual_configs/kitty.nix
@@ -0,0 +1,83 @@
+{ lib, config, inputs, pkgs, ... }:
+let
+ base16 = pkgs.callPackage inputs.base16.lib { };
+ scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme);
+ hexTable = {
+ "0" = "1";
+ "1" = "0";
+ "2" = "1";
+ "3" = "2";
+ "4" = "3";
+ "5" = "4";
+ "6" = "5";
+ "7" = "6";
+ "8" = "7";
+ "9" = "8";
+ "a" = "9";
+ "b" = "a";
+ "c" = "b";
+ "d" = "c";
+ "e" = "d";
+ "f" = "e";
+ };
+ base = "#" + lib.strings.concatStrings ((lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00)) ++ [ hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}" ]);
+in
+{
+
+ stylix.targets.kitty = {
+ enable = false;
+ };
+ programs.kitty = {
+ enable = true;
+
+ settings = {
+ enable_audio_bell = "no";
+ window_alert_on_bell = "no";
+ cursor_blink_interval = "0";
+ window_padding_width = "1";
+ shell_integration = "yes";
+ sync_with_monitor = "no";
+ background_opacity = "0.8";
+
+ font_family = "JetBrainsMono Nerd Font Mono";
+ bold_font = "JetBrainsMono Nerd Font Mono Extra Bold";
+ italic_font = "JetBrainsMono Nerd Font Mono Extra Italic";
+ bold_italic_font = "JetBrainsMono Nerd Font Mono Extra Bold Italic";
+
+ background = base;
+ foreground = "#" + scheme.base05;
+ selection_foreground = "#" + scheme.base05;
+ selection_background = base;
+ url_color = "#" + scheme.base04;
+ cursor = "#" + scheme.base05;
+ active_border_color = "#" + scheme.base03;
+ inactive_border_color = "#" + scheme.base01;
+ active_tab_background = base;
+ active_tab_foreground = "#" + scheme.base05;
+ inactive_tab_background = "#" + scheme.base01;
+ inactive_tab_foreground = "#" + scheme.base04;
+ tab_bar_background = "#" + scheme.base01;
+
+ color0 = base;
+ color1 = "#" + scheme.base08;
+ color2 = "#" + scheme.base0B;
+ color3 = "#" + scheme.base0A;
+ color4 = "#" + scheme.base0D;
+ color5 = "#" + scheme.base0E;
+ color6 = "#" + scheme.base0C;
+ color7 = "#" + scheme.base05;
+
+ color8 = "#" + scheme.base03;
+ color9 = "#" + scheme.base08;
+ color10 = "#" + scheme.base0B;
+ color11 = "#" + scheme.base0A;
+ color12 = "#" + scheme.base0D;
+ color13 = "#" + scheme.base0E;
+ color14 = "#" + scheme.base0C;
+ color15 = "#" + scheme.base07;
+
+ shell = "fish";
+ };
+
+ };
+}
diff --git a/nix/programs/individual_configs/ncspot.nix b/nix/programs/individual_configs/ncspot.nix
new file mode 100644
index 0000000..931535b
--- /dev/null
+++ b/nix/programs/individual_configs/ncspot.nix
@@ -0,0 +1,38 @@
+{ pkgs, ... }: {
+ xdg.configFile."ncspot/config.toml".source = (pkgs.formats.toml { }).generate "ncspot" {
+ notify = true;
+ shuffle = true;
+ cover_max_scale = 2;
+ initial_screen = "library";
+ library_tabs = [ "playlists" ];
+ theme = {
+ background = "#1a1b26";
+ primary = "#9aa5ce";
+ secondary = "#414868";
+ title = "#9ece6a";
+ playing = "#7aa2f7";
+ playing_selected = "#bb9af7";
+ playing_bg = "#24283b";
+ highlight = "#c0caf5";
+ highlight_bg = "#24283b";
+ error = "#414868";
+ error_bg = "#f7768e";
+ statusbar = "#ff9e64";
+ statusbar_progress = "#7aa2f7";
+ statusbar_bg = "#1a1b26";
+ cmdline = "#c0caf5";
+ cmdline_bg = "#24283b";
+ search_match = "#f7768e";
+ };
+ keybindings = {
+ "j" = "move left 1";
+ "k" = "move down 1";
+ "l" = "move up 1";
+ ";" = "move right 1";
+ };
+ notification_format = {
+ title = "%artists";
+ body = "%title";
+ };
+ };
+}
diff --git a/nix/programs/individual_configs/neovide.nix b/nix/programs/individual_configs/neovide.nix
new file mode 100644
index 0000000..c9125e7
--- /dev/null
+++ b/nix/programs/individual_configs/neovide.nix
@@ -0,0 +1,3 @@
+{ pkgs, ... }: {
+ xdg.configFile."neovide/config.toml".source = (pkgs.formats.toml { }).generate "neovide" { };
+}
diff --git a/nix/programs/individual_configs/ssh.nix b/nix/programs/individual_configs/ssh.nix
new file mode 100644
index 0000000..68bdb00
--- /dev/null
+++ b/nix/programs/individual_configs/ssh.nix
@@ -0,0 +1,10 @@
+{ config, ... }: {
+ home.file.".ssh/config".text = ''
+ Host github.com
+ IdentityFile ${config.sops.secrets.hub.path}
+ Host gitlab.com
+ IdentityFile ${config.sops.secrets.lab.path}
+ Host dashie.org
+ IdentityFile ${config.sops.secrets.dashie.path}
+ '';
+}
diff --git a/nix/programs/individual_configs/yazi.nix b/nix/programs/individual_configs/yazi.nix
new file mode 100644
index 0000000..b04a7a7
--- /dev/null
+++ b/nix/programs/individual_configs/yazi.nix
@@ -0,0 +1,1494 @@
+{
+ # don't ask....
+ programs.yazi =
+ {
+ enable = true;
+ settings = {
+ log = {
+ enabled = false;
+ };
+ opener = {
+
+ folder = [
+ {
+ run = "open - R \"$@\"";
+ orphan = true;
+ display_name = "Reveal in Finder";
+ }
+ {
+ run = "$EDITOR \"$@\"";
+ orphan = true;
+ }
+ ];
+ archive = [
+ {
+ run = "unar \"$1\"";
+ display_name = "Extract here";
+ }
+ ];
+ text = [
+ {
+ run = "$EDITOR \"$@\"";
+ orphan = true;
+ }
+ ];
+ image = [
+ {
+ run = "imv \"$@\"";
+ orphan = true;
+ display_name = "Open";
+ }
+ {
+ run = "exiftool \"$1\"; echo \"Press enter to exit\"; read";
+ block = true;
+ display_name = "Show EXIF";
+ }
+ ];
+ pdf = [{
+ run = "zathura \"$@\"";
+ orphan = true;
+ display_name = "Open";
+ }];
+ video = [
+ {
+ run = "mpv \"$@\"";
+ orphan = true;
+ }
+ {
+ run = "mediainfo \"$1\"; echo \"Press enter to exit\"; read";
+ block = true;
+ display_name = "Show media info";
+ }
+ ];
+ audio = [
+ {
+ run = "xdg-open \"$@\"";
+ orphan = true;
+ }
+ { run = "mediainfo \"$1\"; echo \"Press enter to exit\"; read"; block = true; display_name = "Show media info"; }
+ ];
+ fallback = [
+ {
+ run = "xdg-open \"$@\"";
+ orphan = true;
+ display_name = "Open";
+ }
+ {
+ run = "xdg-open - R \"$@\"";
+ orphan = true;
+ display_name = "Reveal in Finder";
+ }
+ ];
+ };
+ plugin = {
+ prepend_previewers = [
+ {
+ name = "*.md";
+ run = "glow";
+ }
+ { mime = "text/csv"; run = "miller"; }
+ ];
+ };
+ };
+ keymap =
+ {
+ manager.keymap = [
+ {
+ on = [
+ ""
+ ];
+ run = "escape";
+ desc = "Exit visual mode clear selected or cancel search";
+ }
+ {
+ on = [
+ "q"
+ ];
+ run = "quit";
+ desc = "Exit the process";
+ }
+ {
+ on = [
+ "Q"
+ ];
+ run = "quit --no-cwd-file";
+ desc = "Exit the process without writing cwd-file";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Close the current tab or quit if it is last tab";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "suspend";
+ desc = "Suspend the process";
+ }
+
+ # Navigation
+ {
+ on = [
+ "l"
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ "k"
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ {
+ on = [
+ "L"
+ ];
+ run = "arrow -5";
+ desc = "Move cursor up 5 lines";
+ }
+ {
+ on = [
+ "K"
+ ];
+ run = "arrow 5";
+ desc = "Move cursor down 5 lines";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "arrow -50%";
+ desc = "Move cursor up half page";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow 50%";
+ desc = "Move cursor down half page";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow -100%";
+ desc = "Move cursor up one page";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow 100%";
+ desc = "Move cursor down one page";
+ }
+
+ {
+ on = [
+ "j"
+ ];
+ run = "leave";
+ desc = "Go back to the parent directory";
+ }
+ {
+ on = [
+ ";"
+ ];
+ run = "enter";
+ desc = "Enter the child directory";
+ }
+
+ {
+ on = [
+ "J"
+ ];
+ run = "back";
+ desc = "Go back to the previous directory";
+ }
+ {
+ on = [
+ "P"
+ ];
+ run = "forward";
+ desc = "Go forward to the next directory";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "peek -5";
+ desc = "Peek up 5 units in the preview";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "peek 5";
+ desc = "Peek down 5 units in the preview";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "leave";
+ desc = "Go back to the parent directory";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "enter";
+ desc = "Enter the child directory";
+ }
+
+ {
+ on = [
+ "g"
+ "g"
+ ];
+ run = "arrow -99999999";
+ desc = "Move cursor to the top";
+ }
+ {
+ on = [
+ "G"
+ ];
+ run = "arrow 99999999";
+ desc = "Move cursor to the bottom";
+ }
+
+ # Selection
+ {
+ on = [
+ "v"
+ ];
+ run = "visual_mode";
+ desc = "Enter visual mode (selection mode)";
+ }
+ {
+ on = [
+ "V"
+ ];
+ run = "visual_mode --unset";
+ desc = "Enter visual mode (unset mode)";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "select_all --state=true";
+ desc = "Select all files";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "select_all --state=none";
+ desc = "Inverse selection of all files";
+ }
+
+ # Operation
+ {
+ on = [
+ "o"
+ ];
+ run = "open";
+ desc = "Open the selected files";
+ }
+ {
+ on = [
+ "O"
+ ];
+ run = "open --interactive";
+ desc = "Open the selected files interactively";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "open";
+ desc = "Open the selected files";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "open --interactive";
+ desc = "Open the selected files interactively";
+ } # It's cool if you're using a terminal that supports CSI u
+ {
+ on = [
+ "y"
+ ];
+ run = "yank";
+ desc = "Copy the selected files";
+ }
+ {
+ on = [
+ "x"
+ ];
+ run = "yank --cut";
+ desc = "Cut the selected files";
+ }
+ {
+ on = [
+ "p"
+ ];
+ run = "paste";
+ desc = "Paste the files";
+ }
+ {
+ on = [
+ "P"
+ ];
+ run = "paste --force";
+ desc = "Paste the files (overwrite if the destination exists)";
+ }
+ {
+ on = [
+ "-"
+ ];
+ run = "link";
+ desc = "Symlink the absolute path of files";
+ }
+ {
+ on = [
+ "_"
+ ];
+ run = "link --relative";
+ desc = "Symlink the relative path of files";
+ }
+ {
+ on = [
+ "d"
+ ];
+ run = "remove";
+ desc = "Move the files to the trash";
+ }
+ {
+ on = [
+ "D"
+ ];
+ run = "remove --permanently";
+ desc = "Permanently delete the files";
+ }
+ {
+ on = [
+ "a"
+ ];
+ run = "create";
+ desc = "Create a file or directory (ends with / for directories)";
+ }
+ {
+ on = [
+ "r"
+ ];
+ run = "rename";
+ desc = "Rename a file or directory";
+ }
+ {
+ on = [
+ ";"
+ ];
+ run = "shell";
+ desc = "Run a shell command";
+ }
+ {
+ on = [
+ ":"
+ ];
+ run = "shell --block";
+ desc = "Run a shell command (block the UI until the command finishes)";
+ }
+ {
+ on = [
+ "."
+ ];
+ run = "hidden toggle";
+ desc = "Toggle the visibility of hidden files";
+ }
+ {
+ on = [
+ ""
+ "f"
+ "g>"
+ ];
+ run = "search fd";
+ desc = "Search files by name using fd";
+ }
+ {
+ on = [
+ ""
+ "f"
+ "G>"
+ ];
+ run = "search rg";
+ desc = "Search files by content using ripgrep";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "search none";
+ desc = "Cancel the ongoing search";
+ }
+ {
+ on = [
+ "z"
+ ];
+ run = "jump zoxide";
+ desc = "Jump to a directory using zoxide";
+ }
+ {
+ on = [
+ "Z"
+ ];
+ run = "jump fzf";
+ desc = "Jump to a directory or reveal a file using fzf";
+ }
+
+ # Copy
+ {
+ on = [
+ "c"
+ "c"
+ ];
+ run = "copy path";
+ desc = "Copy the absolute path";
+ }
+ {
+ on = [
+ "c"
+ "d"
+ ];
+ run = "copy dirname";
+ desc = "Copy the path of the parent directory";
+ }
+ {
+ on = [
+ "c"
+ "f"
+ ];
+ run = "copy filename";
+ desc = "Copy the name of the file";
+ }
+ {
+ on = [
+ "c"
+ "n"
+ ];
+ run = "copy name_without_ext";
+ desc = "Copy the name of the file without the extension";
+ }
+
+ # Find
+ {
+ on = [
+ "/"
+ ];
+ run = "find --smart";
+ }
+ {
+ on = [
+ "?"
+ ];
+ run = "find --previous --smart";
+ }
+ {
+ on = [
+ "n"
+ ];
+ run = "find_arrow";
+ }
+ {
+ on = [
+ "N"
+ ];
+ run = "find_arrow --previous";
+ }
+
+ # Sorting
+ {
+ on = [
+ ","
+ "a"
+ ];
+ run = "sort alphabetical --dir_first";
+ desc = "Sort alphabetically";
+ }
+ {
+ on = [
+ ","
+ "A"
+ ];
+ run = "sort alphabetical --reverse --dir_first";
+ desc = "Sort alphabetically (reverse)";
+ }
+ {
+ on = [
+ ","
+ "c"
+ ];
+ run = "sort created --dir_first";
+ desc = "Sort by creation time";
+ }
+ {
+ on = [
+ ","
+ "C"
+ ];
+ run = "sort created --reverse --dir_first";
+ desc = "Sort by creation time (reverse)";
+ }
+ {
+ on = [
+ ","
+ "m"
+ ];
+ run = "sort modified --dir_first";
+ desc = "Sort by modified time";
+ }
+ {
+ on = [
+ ","
+ "M"
+ ];
+ run = "sort modified --reverse --dir_first";
+ desc = "Sort by modified time (reverse)";
+ }
+ {
+ on = [
+ ","
+ "n"
+ ];
+ run = "sort natural --dir_first";
+ desc = "Sort naturally";
+ }
+ {
+ on = [
+ ","
+ "N"
+ ];
+ run = "sort natural --reverse --dir_first";
+ desc = "Sort naturally (reverse)";
+ }
+ {
+ on = [
+ ","
+ "s"
+ ];
+ run = "sort size --dir_first";
+ desc = "Sort by size";
+ }
+ {
+ on = [
+ ","
+ "S"
+ ];
+ run = "sort size --reverse --dir_first";
+ desc = "Sort by size (reverse)";
+ }
+
+ # Tabs
+ {
+ on = [
+ "t"
+ ];
+ run = "tab_create --current";
+ desc = "Create a new tab using the current path";
+ }
+
+ {
+ on = [
+ "1"
+ ];
+ run = "tab_switch 0";
+ desc = "Switch to the first tab";
+ }
+ {
+ on = [
+ "2"
+ ];
+ run = "tab_switch 1";
+ desc = "Switch to the second tab";
+ }
+ {
+ on = [
+ "3"
+ ];
+ run = "tab_switch 2";
+ desc = "Switch to the third tab";
+ }
+ {
+ on = [
+ "4"
+ ];
+ run = "tab_switch 3";
+ desc = "Switch to the fourth tab";
+ }
+ {
+ on = [
+ "5"
+ ];
+ run = "tab_switch 4";
+ desc = "Switch to the fifth tab";
+ }
+ {
+ on = [
+ "6"
+ ];
+ run = "tab_switch 5";
+ desc = "Switch to the sixth tab";
+ }
+ {
+ on = [
+ "7"
+ ];
+ run = "tab_switch 6";
+ desc = "Switch to the seventh tab";
+ }
+ {
+ on = [
+ "8"
+ ];
+ run = "tab_switch 7";
+ desc = "Switch to the eighth tab";
+ }
+ {
+ on = [
+ "9"
+ ];
+ run = "tab_switch 8";
+ desc = "Switch to the ninth tab";
+ }
+
+ {
+ on = [
+ "["
+ ];
+ run = "tab_switch -1 --relative";
+ desc = "Switch to the previous tab";
+ }
+ {
+ on = [
+ "]"
+ ];
+ run = "tab_switch 1 --relative";
+ desc = "Switch to the next tab";
+ }
+
+ {
+ on = [
+ "{"
+ ];
+ run = "tab_swap -1";
+ desc = "Swap the current tab with the previous tab";
+ }
+ {
+ on = [
+ "}"
+ ];
+ run = "tab_swap 1";
+ desc = "Swap the current tab with the next tab";
+ }
+
+ # Tasks
+ {
+ on = [
+ "w"
+ ];
+ run = "tasks_show";
+ desc = "Show the tasks manager";
+ }
+
+ # Goto
+ {
+ on = [
+ "g"
+ "h"
+ ];
+ run = "cd ~";
+ desc = "Go to the home directory";
+ }
+ {
+ on = [
+ "g"
+ "c"
+ ];
+ run = "cd ~/.config";
+ desc = "Go to the config directory";
+ }
+ {
+ on = [
+ "g"
+ "d"
+ ];
+ run = "cd ~/Downloads";
+ desc = "Go to the downloads directory";
+ }
+ {
+ on = [
+ "g"
+ "t"
+ ];
+ run = "cd /tmp";
+ desc = "Go to the temporary directory";
+ }
+ {
+ on = [
+ "g"
+ ""
+ ];
+ run = "cd --interactive";
+ desc = "Go to a directory interactively";
+ }
+
+ # Help
+ {
+ on = [
+ "~"
+ ];
+ run = "help";
+ desc = "Open help";
+ }
+ ];
+
+ tasks.keymap = [
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Hide the task manager";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Hide the task manager";
+ }
+ {
+ on = [
+ "w"
+ ];
+ run = "close";
+ desc = "Hide the task manager";
+ }
+
+ {
+ on = [
+ "k"
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ "j"
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "inspect";
+ desc = "Inspect the task";
+ }
+ {
+ on = [
+ "x"
+ ];
+ run = "cancel";
+ desc = "Cancel the task";
+ }
+
+ {
+ on = [
+ "~"
+ ];
+ run = "help";
+ desc = "Open help";
+ }
+ ];
+
+
+ select.keymap = [
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Cancel selection";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Cancel selection";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "close --submit";
+ desc = "Submit the selection";
+ }
+
+ {
+ on = [
+ "k"
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ "j"
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ {
+ on = [
+ "K"
+ ];
+ run = "arrow -5";
+ desc = "Move cursor up 5 lines";
+ }
+ {
+ on = [
+ "J"
+ ];
+ run = "arrow 5";
+ desc = "Move cursor down 5 lines";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ {
+ on = [
+ "~"
+ ];
+ run = "help";
+ desc = "Open help";
+ }
+ ];
+
+
+ input.keymap = [
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Cancel input";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "close --submit";
+ desc = "Submit the input";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "escape";
+ desc = "Go back the normal mode or cancel input";
+ }
+
+ # Mode
+ {
+ on = [
+ "i"
+ ];
+ run = "insert";
+ desc = "Enter insert mode";
+ }
+ {
+ on = [
+ "a"
+ ];
+ run = "insert --append";
+ desc = "Enter append mode";
+ }
+ {
+ on = [
+ "v"
+ ];
+ run = "visual";
+ desc = "Enter visual mode";
+ }
+ {
+ on = [
+ "V"
+ ];
+ run = [
+ "move -999"
+ "visual"
+ "move 999"
+ ];
+ desc = "Enter visual mode and select all";
+ }
+
+ # Navigation
+ {
+ on = [
+ "h"
+ ];
+ run = "move -1";
+ desc = "Move cursor left";
+ }
+ {
+ on = [
+ "l"
+ ];
+ run = "move 1";
+ desc = "Move cursor right";
+ }
+
+ {
+ on = [
+ "0"
+ ];
+ run = "move -999";
+ desc = "Move to the BOL";
+ }
+ {
+ on = [
+ "$"
+ ];
+ run = "move 999";
+ desc = "Move to the EOL";
+ }
+ {
+ on = [
+ "I"
+ ];
+ run = [
+ "move -999"
+ "insert"
+ ];
+ desc = "Move to the BOL and enter insert mode";
+ }
+ {
+ on = [
+ "A"
+ ];
+ run = [
+ "move 999"
+ "insert --append"
+ ];
+ desc = "Move to the EOL and enter append mode";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "move -1";
+ desc = "Move cursor left";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "move 1";
+ desc = "Move cursor right";
+ }
+
+ {
+ on = [
+ "b"
+ ];
+ run = "backward";
+ desc = "Move to the beginning of the previous word";
+ }
+ {
+ on = [
+ "w"
+ ];
+ run = "forward";
+ desc = "Move to the beginning of the next word";
+ }
+ {
+ on = [
+ "e"
+ ];
+ run = "forward --end-of-word";
+ desc = "Move to the end of the next word";
+ }
+
+ # Deletion
+ {
+ on = [
+ "d"
+ ];
+ run = "delete --cut";
+ desc = "Cut the selected characters";
+ }
+ {
+ on = [
+ "D"
+ ];
+ run = [
+ "delete --cut"
+ "move 999"
+ ];
+ desc = "Cut until the EOL";
+ }
+ {
+ on = [
+ "c"
+ ];
+ run = "delete --cut --insert";
+ desc = "Cut the selected characters and enter insert mode";
+ }
+ {
+ on = [
+ "C"
+ ];
+ run = [
+ "delete --cut --insert"
+ "move 999"
+ ];
+ desc = "Cut until the EOL and enter insert mode";
+ }
+ {
+ on = [
+ "x"
+ ];
+ run = [
+ "delete --cut"
+ "move 1 --in-operating"
+ ];
+ desc = "Cut the current character";
+ }
+
+ # Yank/Paste
+ {
+ on = [
+ "y"
+ ];
+ run = "yank";
+ desc = "Copy the selected characters";
+ }
+ {
+ on = [
+ "p"
+ ];
+ run = "paste";
+ desc = "Paste the copied characters after the cursor";
+ }
+ {
+ on = [
+ "P"
+ ];
+ run = "paste --before";
+ desc = "Paste the copied characters before the cursor";
+ }
+
+ # Undo/Redo
+ {
+ on = [
+ "u"
+ ];
+ run = "undo";
+ desc = "Undo the last operation";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "redo";
+ desc = "Redo the last operation";
+ }
+
+ # Help
+ {
+ on = [
+ "~"
+ ];
+ run = "help";
+ desc = "Open help";
+ }
+ ];
+
+ help.keymap = [
+ {
+ on = [
+ ""
+ ];
+ run = "escape";
+ desc = "Clear the filter or hide the help";
+ }
+ {
+ on = [
+ "q"
+ ];
+ run = "close";
+ desc = "Exit the process";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "close";
+ desc = "Hide the help";
+ }
+
+ # Navigation
+ {
+ on = [
+ "k"
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ "j"
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ {
+ on = [
+ "K"
+ ];
+ run = "arrow -5";
+ desc = "Move cursor up 5 lines";
+ }
+ {
+ on = [
+ "J"
+ ];
+ run = "arrow 5";
+ desc = "Move cursor down 5 lines";
+ }
+
+ {
+ on = [
+ ""
+ ];
+ run = "arrow -1";
+ desc = "Move cursor up";
+ }
+ {
+ on = [
+ ""
+ ];
+ run = "arrow 1";
+ desc = "Move cursor down";
+ }
+
+ # Filtering
+ {
+ on = [
+ "/"
+ ];
+ run = "filter";
+ desc = "Apply a filter for the help items";
+ }
+ ];
+ };
+ # theme = {
+ # manager = {
+ # cwd = {
+ # fg = "#94e2d5";
+ # };
+ #
+ # # Hovered
+ # hovered = {
+ # reversed = true;
+ # };
+ # preview_hovered = { underline = true; };
+ #
+ # # Find
+ # find_keyword = {
+ # fg = "#f9e2af";
+ # bold = true;
+ # italic = true;
+ # underline = true;
+ # };
+ # find_position = {
+ # fg = "#f5c2e7";
+ # bg = "reset";
+ # bold = true;
+ # italic = true;
+ # };
+ #
+ # # Marker
+ # marker_copied = {
+ # fg = "#a6e3a1";
+ # bg = "#a6e3a1";
+ # };
+ # marker_cut = {
+ # fg = "#f38ba8";
+ # bg = "#f38ba8";
+ # };
+ # marker_marked = {
+ # fg = "#f9e2af";
+ # bg = "#f9e2af";
+ # };
+ # marker_selected = {
+ # fg = "#779EF0";
+ # bg = "#89b4fa";
+ # };
+ #
+ # # Tab
+ # tab_active = {
+ # fg = "#1e1e2e";
+ # bg = "#cdd6f4";
+ # };
+ # tab_inactive = {
+ # fg = "#cdd6f4";
+ # bg = "#45475a";
+ # };
+ # tab_width = 1;
+ #
+ # # Count
+ # count_copied = {
+ # fg = "#1e1e2e";
+ # bg = "#a6e3a1";
+ # };
+ # count_cut = {
+ # fg = "#1e1e2e";
+ # bg = "#f38ba8";
+ # };
+ # count_selected = {
+ # fg = "#1e1e2e";
+ # bg = "#89b4fa";
+ # };
+ #
+ # # Border
+ # border_symbol = "│";
+ # border_style = { fg = "#7f849c"; };
+ #
+ # };
+ # status = {
+ # separator_open = "";
+ # separator_close = "";
+ # separator_style = {
+ # fg = "#45475a";
+ # bg = "#45475a";
+ # };
+ #
+ # # Mode
+ # mode_normal = {
+ # fg = "#1e1e2e";
+ # bg = "#89b4fa";
+ # bold = true;
+ # };
+ # mode_select = {
+ # fg = "#1e1e2e";
+ # bg = "#a6e3a1";
+ # bold = true;
+ # };
+ # mode_unset = {
+ # fg = "#1e1e2e";
+ # bg = "#f2cdcd";
+ # bold = true;
+ # };
+ #
+ # # Progress
+ # progress_label = {
+ # fg = "#ffffff";
+ # bold = true;
+ # };
+ # progress_normal = {
+ # fg = "#89b4fa";
+ # bg = "#45475a";
+ # };
+ # progress_error = {
+ # fg = "#f38ba8";
+ # bg = "#45475a";
+ # };
+ #
+ # # Permissions
+ # permissions_t = { fg = "#89b4fa"; };
+ # permissions_r = { fg = "#f9e2af"; };
+ # permissions_w = { fg = "#f38ba8"; };
+ # permissions_x = { fg = "#a6e3a1"; };
+ # permissions_s = { fg = "#7f849c"; };
+ # };
+ #
+ # input = {
+ # border = {
+ # fg = "#89b4fa";
+ # };
+ # title = { };
+ # value = { };
+ # selected = { reversed = true; };
+ # };
+ # select = {
+ # border = {
+ # fg = "#89b4fa";
+ # };
+ # active = { fg = "#f5c2e7"; };
+ # inactive = { };
+ # };
+ # tasks = {
+ # border = {
+ # fg = "#89b4fa";
+ # };
+ # title = { };
+ # hovered = {
+ # underline = true;
+ # };
+ # };
+ # which = {
+ # mask = {
+ # bg = "#313244";
+ # };
+ # cand = { fg = "#94e2d5"; };
+ # rest = { fg = "#9399b2"; };
+ # desc = { fg = "#f5c2e7"; };
+ # separator = " ";
+ # separator_style = { fg = "#585b70"; };
+ # };
+ # help = {
+ # on = {
+ # fg = "#f5c2e7";
+ # };
+ # exec = { fg = "#94e2d5"; };
+ # desc = { fg = "#9399b2"; };
+ # hovered = {
+ # bg = "#585b70";
+ # bold = true;
+ # };
+ # footer = {
+ # fg = "#45475a";
+ # bg = "#cdd6f4";
+ # };
+ # };
+ # filetype = {
+ # rules = [
+ # # Images
+ # {
+ # mime = "image/*";
+ # fg = "#94e2d5";
+ # }
+ #
+ # # Videos
+ # {
+ # mime = "video/*";
+ # fg = "#f9e2af";
+ # }
+ # {
+ # mime = "audio/*";
+ # fg = "#f9e2af";
+ # }
+ #
+ # # Archives
+ # {
+ # mime = "application/zip";
+ # fg = "#f5c2e7";
+ # }
+ # {
+ # mime = "application/gzip";
+ # fg = "#f5c2e7";
+ # }
+ # {
+ # mime = "application/x-tar";
+ # fg = "#f5c2e7";
+ # }
+ # {
+ # mime = "application/x-bzip";
+ # fg = "#f5c2e7";
+ # }
+ # {
+ # mime = "application/x-bzip2";
+ # fg = "#f5c2e7";
+ # }
+ # {
+ # mime = "application/x-7z-compressed";
+ # fg = "#f5c2e7";
+ # }
+ # {
+ # mime = "application/x-rar";
+ # fg = "#f5c2e7";
+ # }
+ #
+ # # Fallback
+ # {
+ # name = "*";
+ # fg = "#cdd6f4";
+ # }
+ # {
+ # name = "*/";
+ # fg = "#89b4fa";
+ # }
+ # ];
+ # };
+ # };
+ };
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/nix/programs/media.nix b/nix/programs/media.nix
new file mode 100644
index 0000000..cf205c6
--- /dev/null
+++ b/nix/programs/media.nix
@@ -0,0 +1,34 @@
+{ pkgs, ... }:
+{
+ home.packages = with pkgs; [
+ # base audio
+ pipewire
+ wireplumber
+ # audio control
+ playerctl
+ # images
+ imv
+ # videos
+ mpv
+ # pdf
+ zathura
+ evince
+ libreoffice-fresh
+ onlyoffice-bin
+ pdftk
+ pdfpc
+ polylux2pdfpc
+ # spotify
+ # video editing
+ kdenlive
+ # image creation
+ inkscape
+ gimp
+ krita
+ yt-dlp
+ ];
+ programs.obs-studio.enable = true;
+ programs.obs-studio.plugins = with pkgs; [
+ obs-studio-plugins.obs-vaapi
+ ];
+}
diff --git a/nix/programs/nvim/default.nix b/nix/programs/nvim/default.nix
new file mode 100644
index 0000000..43fdc23
--- /dev/null
+++ b/nix/programs/nvim/default.nix
@@ -0,0 +1,212 @@
+# please nixvim enable lazyloading
+{ lib, pkgs, colorscheme, ... }:
+{
+ programs.neovim = {
+ enable = true;
+ extraPackages = with pkgs; [
+ # Telescope
+ ripgrep
+ # lua
+ lua-language-server
+ stylua
+ # nix
+ nixd
+ # go
+ gopls
+ # jafuck
+ jdt-language-server
+ taplo
+ typst-lsp
+ sqls
+ shfmt
+ texlab
+ nixpkgs-fmt
+ crate2nix
+ ruff-lsp
+ pyright
+ lemminx
+ marksman
+ clang-tools_18
+ ];
+
+ plugins = with pkgs.vimPlugins; [
+ lazy-nvim
+ ];
+
+ extraLuaConfig =
+ let
+ plugins = with pkgs.vimPlugins; [
+ # LazyVim
+ LazyVim
+ bufferline-nvim
+ cmp-buffer
+ cmp-nvim-lsp
+ cmp-path
+ cmp_luasnip
+ cmp-async-path
+ conform-nvim
+ dashboard-nvim
+ dressing-nvim
+ flash-nvim
+ friendly-snippets
+ gitsigns-nvim
+ git-conflict-nvim
+ ltex_extra-nvim
+ indent-blankline-nvim
+ lualine-nvim
+ neo-tree-nvim
+ neoconf-nvim
+ neodev-nvim
+ noice-nvim
+ nui-nvim
+ nvim-cmp
+ nvim-dap
+ nvim-dap-ui
+ nvim-dap-python
+ nvim-dap-go
+ nvim-dap-virtual-text
+ nvim-nio
+ nvim-lint
+ nvim-lspconfig
+ nvim-notify
+ #nvim-spectre
+ nvim-treesitter.withAllGrammars
+ nvim-treesitter-context
+ nvim-treesitter-textobjects
+ nvim-ts-autotag
+ nvim-ts-context-commentstring
+ nvim-web-devicons
+ nvim-jdtls
+ rustaceanvim
+ typst-vim
+ instant-nvim
+ git-blame-nvim
+ neoscroll-nvim
+ mason-nvim
+ neotest
+ neotest-zig
+ neotest-python
+ neotest-rust
+ neotest-java
+ neotest-haskell
+ neotest-go
+ neotest-dotnet
+ neotest-bash
+ neotest-dart
+ omnisharp-extended-lsp-nvim
+ neotest
+ neotest-java
+ neotest-rust
+ persistence-nvim
+ plenary-nvim
+ telescope-fzf-native-nvim
+ telescope-nvim
+ telescope-zoxide
+ telescope-file-browser-nvim
+ telescope-project-nvim
+ todo-comments-nvim
+ vimtex
+ inc-rename-nvim
+ headlines-nvim
+ diffview-nvim
+ crates-nvim
+ cmake-tools-nvim
+ clangd_extensions-nvim
+ alpha-nvim
+ vim-visual-multi
+ ts-comments-nvim
+ nvim-tree-lua
+ nvim-snippets
+ markdown-preview-nvim
+ tokyonight-nvim
+ trouble-nvim
+ vim-illuminate
+ vim-startuptime
+ which-key-nvim
+ haskell-tools-nvim
+ Ionide-vim
+ { name = "LuaSnip"; path = luasnip; }
+ { name = "mini.ai"; path = mini-nvim; }
+ { name = "mini.bufremove"; path = mini-nvim; }
+ { name = "mini.comment"; path = mini-nvim; }
+ { name = "mini.indentscope"; path = mini-nvim; }
+ { name = "mini.pairs"; path = mini-nvim; }
+ { name = "mini.surround"; path = mini-nvim; }
+ ];
+ mkEntryFromDrv = drv:
+ if lib.isDerivation drv then
+ { name = "${lib.getName drv}"; path = drv; }
+ else
+ drv;
+ lazyPath = pkgs.linkFarm "lazy-plugins" (builtins.map mkEntryFromDrv plugins);
+ in
+ ''
+ require("lazy").setup({
+ defaults = {
+ lazy = true,
+ },
+ performance = {
+ rtp = {
+ disabled_plugins = {
+ "gzip",
+ "netrw",
+ "tarPlugin",
+ "tohtml",
+ "tutor",
+ "zipPlugin",
+ },
+ },
+ },
+ dev = {
+ -- reuse files from pkgs.vimPlugins.*
+ path = "${lazyPath}",
+ patterns = { "." },
+ -- fallback to download
+ fallback = true,
+ },
+ spec = {
+ { "LazyVim/LazyVim",
+ opts = {
+ ${if colorscheme != "" then "colorscheme = '${colorscheme}'," else ""}
+ },
+ import = "lazyvim.plugins" },
+ { import = "lazyvim.plugins.extras.ui.alpha" },
+ { import = "lazyvim.plugins.extras.lang.rust" },
+ { import = "lazyvim.plugins.extras.lang.tailwind" },
+ { import = "lazyvim.plugins.extras.lang.java" },
+ { import = "lazyvim.plugins.extras.lang.go" },
+ { import = "lazyvim.plugins.extras.lang.clangd" },
+ { import = "lazyvim.plugins.extras.lang.markdown" },
+ { import = "lazyvim.plugins.extras.lang.cmake" },
+ { import = "lazyvim.plugins.extras.lang.omnisharp" },
+ { import = "lazyvim.plugins.extras.lang.tex" },
+ { import = "lazyvim.plugins.extras.util.dot" },
+ { import = "lazyvim.plugins.extras.dap.core" },
+ { import = "lazyvim.plugins.extras.test.core" },
+ { "nvim-telescope/telescope-fzf-native.nvim", enabled = true },
+ { "williamboman/mason-lspconfig.nvim", enabled = false },
+ { import = "plugins" },
+ { import = "plugins.plugins" },
+ },
+
+ ${if colorscheme != "" then "install = { colorscheme = { '${colorscheme}' } }," else ""}
+ checker = { enabled = true, notify = false },
+ change_detection = { enabled = true, notify = false },
+ })
+ '';
+ };
+
+ # https://github.com/nvim-treesitter/nvim-treesitter#i-get-query-error-invalid-node-type-at-position
+ xdg.configFile."nvim/parser".source =
+ let
+ parsers = pkgs.symlinkJoin {
+ name = "treesitter-parsers";
+ paths = (pkgs.vimPlugins.nvim-treesitter.withAllGrammars).dependencies;
+ };
+ in
+ "${parsers}/parser";
+
+ # Normal LazyVim config here, see https://github.com/LazyVim/starter/tree/main/lua
+ xdg.configFile."nvim/lua".source = ./lua;
+ xdg.configFile."nvim/ftplugin".source = ./ftplugin;
+}
diff --git a/nix/programs/nvim/flake.lock b/nix/programs/nvim/flake.lock
new file mode 100644
index 0000000..01dcb75
--- /dev/null
+++ b/nix/programs/nvim/flake.lock
@@ -0,0 +1,58 @@
+{
+ "nodes": {
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1719994518,
+ "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1720542800,
+ "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "feb2849fdeb70028c70d73b848214b00d324a497",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1719876945,
+ "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=",
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-parts": "flake-parts",
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/nix/programs/nvim/flake.nix b/nix/programs/nvim/flake.nix
new file mode 100644
index 0000000..6b79831
--- /dev/null
+++ b/nix/programs/nvim/flake.nix
@@ -0,0 +1,35 @@
+{
+ description = "A lazyvim configuration";
+
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ flake-parts.url = "github:hercules-ci/flake-parts";
+ };
+
+ outputs =
+ { flake-parts, ... }@inputs:
+ flake-parts.lib.mkFlake { inherit inputs; } {
+ systems = [
+ "x86_64-linux"
+ "aarch64-linux"
+ "x86_64-darwin"
+ "aarch64-darwin"
+ ];
+
+ perSystem =
+ { pkgs, ... }:
+ let
+ colorscheme = "catppuccin-mocha";
+ dashieVimModule = {
+ inherit pkgs colorscheme;
+ module = import ./default.nix;
+ nvim = pkgs.neovim;
+ };
+ in
+ {
+ packages = {
+ default = dashieVimModule.nvim;
+ };
+ };
+ };
+}
diff --git a/nix/programs/nvim/ftplugin/java.lua b/nix/programs/nvim/ftplugin/java.lua
new file mode 100644
index 0000000..1a4f22e
--- /dev/null
+++ b/nix/programs/nvim/ftplugin/java.lua
@@ -0,0 +1,5 @@
+local config = {
+ cmd = { "jdtls" },
+ root_dir = vim.fs.dirname(vim.fs.find({ "gradlew", ".git", "mvnw" }, { upward = true })[1]),
+}
+require("jdtls").start_or_attach(config)
diff --git a/nix/programs/nvim/lua/config/autocmds.lua b/nix/programs/nvim/lua/config/autocmds.lua
new file mode 100644
index 0000000..e8da00f
--- /dev/null
+++ b/nix/programs/nvim/lua/config/autocmds.lua
@@ -0,0 +1,15 @@
+-- nvimtree
+local function open_nvim_tree(data)
+ local directory = vim.fn.isdirectory(data.file) == 1
+
+ if not directory then
+ return
+ end
+ -- change to the directory
+ vim.cmd.cd(data.file)
+
+ -- open the tree
+ require("nvim-tree.api").tree.open()
+end
+
+vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })
diff --git a/nix/programs/nvim/lua/config/keymaps.lua b/nix/programs/nvim/lua/config/keymaps.lua
new file mode 100644
index 0000000..b325537
--- /dev/null
+++ b/nix/programs/nvim/lua/config/keymaps.lua
@@ -0,0 +1,202 @@
+local Util = require("lazyvim.util")
+
+local function map(mode, lhs, rhs, opts)
+ local keys = require("lazy.core.handler").handlers.keys
+ ---@cast keys LazyKeysHandler
+ -- do not create the map if a lazy keys handler exists
+ if not keys.active[keys.parse({ lhs, mode = mode }).id] then
+ opts = opts or {}
+ opts.silent = opts.silent ~= false
+ vim.keymap.set(mode, lhs, rhs, opts)
+ end
+end
+local opts = { noremap = true, silent = true }
+local term_opts = { silent = true }
+
+-- crimes against humanity, but I don't care
+map("n", "j", "h", opts)
+map("n", "l", "k", opts)
+map("n", "k", "j", opts)
+map("n", ";", "l", opts)
+map("v", "j", "h", opts)
+map("v", "k", "j", opts)
+map("v", "l", "k", opts)
+map("v", ";", "l", opts)
+
+-- test plugin
+map("n", "OO", ':lua require("test_plugin").test()', { desc = "Toggle breakpoint" })
+
+-- debug
+map("n", "db", ':lua require("dap").toggle_breakpoint()', { desc = "Toggle breakpoint" })
+map("n", "do", ':lua require("dap").step_over()', { desc = "Step over" })
+map("n", "di", ':lua require("dap").step_into()', { desc = "Step into" })
+map("n", "dc", ':lua require("dap").continue()', { desc = "Continue" })
+map("n", "du", function()
+ require("dapui").toggle()
+end, { desc = "Toggle DAP UI" })
+map("n", "de", function()
+ require("dapui").eval()
+end, { desc = "DAP Eval" })
+
+-- window movement
+map("n", "", [[wincmd h]], opts)
+map("n", "", [[wincmd l]], opts)
+map("n", "", [[wincmd j]], opts)
+map("i", "", [[wincmd h]], opts)
+map("i", "", [[wincmd l]], opts)
+map("i", "", [[wincmd j]], opts)
+
+-- toggle terminal
+local lazyterm = function()
+ Util.terminal(nil, { cwd = Util.root(), esc_esc = false, ctrl_hjkl = false })
+end
+map("n", "", lazyterm, { desc = "Terminal (root dir)" })
+map("t", "", "close", { desc = "Hide Terminal" })
+
+-- semicolon thing
+-- map("i","" ,"A;", {desc = "add semi and newline"})
+-- map("i","" ,"A;", {desc = "add semi"})
+map("n", "m", "$a;", { desc = "add semi and newline" })
+map("n", "n", "$a;", { desc = "add semi" })
+
+-- tab switching
+map("n", "", ":BufferLineCyclePrev", opts)
+map("n", "", ":BufferLineCycleNext", opts)
+
+-- git
+map("n", "gq", function()
+ require("telescope.builtin").git_commits()
+end, { desc = "Commits" })
+map("n", "gw", function()
+ require("telescope.builtin").git_bcommits()
+end, { desc = "Commits in branch" })
+map("n", "gb", function()
+ require("telescope.builtin").git_branches()
+end, { desc = "Branches" })
+map("n", "gr", function()
+ require("telescope.builtin").git_status()
+end, { desc = "Git status" })
+map("n", "ga", function()
+ require("telescope.builtin").git_stash()
+end, { desc = "Git stash" })
+map("n", "gg", function()
+ Util.terminal({ "gitui" }, { cwd = Util.root() })
+end, { desc = "gitui (root dir)" })
+map("n", "gG", function()
+ Util.terminal({ "gitui" })
+end, { desc = "gitui (cwd)" })
+map("n", "gB", function()
+ require("gitblame")
+ vim.cmd(":GitBlameToggle")
+end, { desc = "git blame" })
+
+-- harpoon man
+map("n", "h1", function()
+ require("harpoon.ui").nav_file(1)
+end, { desc = "First Harpoon File" })
+map("n", "h2", function()
+ require("harpoon.ui").nav_file(2)
+end, { desc = "Second Harpoon File" })
+map("n", "h3", function()
+ require("harpoon.ui").nav_file(3)
+end, { desc = "First Harpoon File" })
+map("n", "ha", function()
+ require("harpoon.mark").add_file()
+end, { desc = "First Harpoon File" })
+map("n", "hd", function()
+ require("harpoon.mark").remove_file()
+end, { desc = "First Harpoon File" })
+map("n", "hm", ":Telescope harpoon marks", { noremap = true, silent = true, desc = "Show harpoon marks" })
+
+-- telescope
+map("n", "fb", function()
+ require("telescope").extensions.file_browser.file_browser({})
+end, { desc = "File Browser" })
+map("n", "ff", function()
+ require("telescope.builtin").find_files()
+end, { desc = "Find Files" })
+map("n", "fg", function()
+ Live_grep_from_project_git_root()
+end, { desc = "Live Grep (root)" })
+map("n", "fG", function()
+ require("telescope.builtin").live_grep()
+end, { desc = "Live Grep (cwd)" })
+map("n", "fh", function()
+ require("telescope.builtin").help_tags()
+end, { desc = "Help" })
+map("n", "fp", function()
+ require("telescope").extensions.project.project({})
+end, { noremap = true, silent = true, desc = "Projects" })
+map("n", "z", function()
+ require("telescope").extensions.zoxide.list({})
+end, { desc = "Zoxide" })
+
+-- neoscroll
+local t = {}
+t[""] = { "scroll", { "-vim.wo.scroll", "true", "250" } }
+t[""] = { "scroll", { "vim.wo.scroll", "true", "250" } }
+require("neoscroll.config").set_mappings(t)
+
+-- trouble
+map("n", "t", "TroubleToggle", term_opts)
+
+-- format
+map({ "n", "v" }, "", function()
+ Util.format({ force = true })
+end, { desc = "Format" })
+
+-- better yank
+function Better_yank(opts)
+ local current_line = unpack(vim.api.nvim_win_get_cursor(0))
+ vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "y")
+end
+
+vim.api.nvim_create_user_command("BetterYank", Better_yank, { count = 1 })
+map("n", "by", ":BetterYank", term_opts)
+
+-- better delete
+function Better_delete(opts)
+ local current_line = unpack(vim.api.nvim_win_get_cursor(0))
+ vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "d")
+end
+
+vim.api.nvim_create_user_command("BetterDelete", Better_delete, { count = 1 })
+map("n", "bd", ":BetterDelete", term_opts)
+
+-- neovide zoom
+local change_scale_factor = function(delta)
+ vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta
+end
+vim.keymap.set("n", "", function()
+ change_scale_factor(1.25)
+end)
+vim.keymap.set("n", "", function()
+ change_scale_factor(1 / 1.25)
+end)
+
+-- neovide paste
+vim.g.neovide_input_use_logo = 1
+vim.api.nvim_set_keymap("i", "", "pI", { noremap = true, silent = true })
+
+function Get_git_root()
+ local opts = {}
+ local function is_git_repo()
+ vim.fn.system("git rev-parse --is-inside-work-tree")
+
+ return vim.v.shell_error == 0
+ end
+ if is_git_repo() then
+ local dot_git_path = vim.fn.finddir(".git", ".;")
+ local root = vim.fn.fnamemodify(dot_git_path, ":h")
+ opts = {
+ cwd = root,
+ }
+ end
+ return opts
+end
+
+function Live_grep_from_project_git_root()
+ local opts = Get_git_root()
+ require("telescope.builtin").live_grep(opts)
+end
+
diff --git a/nix/programs/nvim/lua/config/lazy.lua b/nix/programs/nvim/lua/config/lazy.lua
new file mode 100644
index 0000000..de32dd1
--- /dev/null
+++ b/nix/programs/nvim/lua/config/lazy.lua
@@ -0,0 +1,55 @@
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system({
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable",
+ lazypath,
+ })
+end
+vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
+
+require("lazy").setup({
+ spec = {
+ { "LazyVim/LazyVim", import = "lazyvim.plugins" },
+ { import = "lazyvim.plugins.extras.ui.alpha" },
+ -- { import = "lazyvim.plugins.extras.ui.edgy" },
+ { import = "plugins" },
+ { import = "plugins.plugins" },
+ { import = "lazyvim.plugins.extras.lang.rust" },
+ { import = "lazyvim.plugins.extras.lang.tailwind" },
+ { import = "lazyvim.plugins.extras.lang.java" },
+ { import = "lazyvim.plugins.extras.lang.go" },
+ { import = "lazyvim.plugins.extras.lang.clangd" },
+ { import = "lazyvim.plugins.extras.lang.typescript" },
+ { import = "lazyvim.plugins.extras.lang.python" },
+ { import = "lazyvim.plugins.extras.lang.markdown" },
+ { import = "lazyvim.plugins.extras.lang.cmake" },
+ { import = "lazyvim.plugins.extras.lang.omnisharp" },
+ { import = "lazyvim.plugins.extras.lang.json" },
+ { import = "lazyvim.plugins.extras.lang.tex" },
+ { import = "lazyvim.plugins.extras.util.dot" },
+ { import = "lazyvim.plugins.extras.dap.core" },
+ { import = "lazyvim.plugins.extras.test.core" },
+ },
+ defaults = {
+ lazy = true,
+ version = false,
+ },
+ checker = { enabled = true, notify = false },
+ change_detection = { enabled = true, notify = false },
+ performance = {
+ rtp = {
+ disabled_plugins = {
+ "gzip",
+ "netrw",
+ "tarPlugin",
+ "tohtml",
+ "tutor",
+ "zipPlugin",
+ },
+ },
+ },
+})
diff --git a/nix/programs/nvim/lua/config/lsp-keymap.lua b/nix/programs/nvim/lua/config/lsp-keymap.lua
new file mode 100644
index 0000000..df316e9
--- /dev/null
+++ b/nix/programs/nvim/lua/config/lsp-keymap.lua
@@ -0,0 +1,126 @@
+local M = {}
+
+---@type PluginLspKeys
+M._keys = nil
+
+---@return (LazyKeys|{has?:string})[]
+function M.get()
+ local format = function()
+ require("lazyvim.util").format({ force = true })
+ end
+ if not M._keys then
+ ---@class PluginLspKeys
+ M._keys = {
+ { "cld", vim.diagnostic.open_float, desc = "Line Diagnostics" },
+ { "cl", "LspInfo", desc = "Lsp Info" },
+ { "ca", "Telescope lsp_definitions", desc = "Goto Definition", has = "definition" },
+ { "cs", "Telescope lsp_references", desc = "References" },
+ { "cA", vim.lsp.buf.declaration, desc = "Goto Declaration" },
+ { "cf", "Telescope lsp_implementations", desc = "Goto Implementation" },
+ { "cd", "Telescope lsp_type_definitions", desc = "Goto Type Definition" },
+ { "ce", vim.lsp.buf.hover, desc = "Hover" },
+ { "cw", vim.lsp.buf.signature_help, desc = "Signature Help", has = "signatureHelp" },
+ { "", vim.lsp.buf.signature_help, mode = "i", desc = "Signature Help", has = "signatureHelp" },
+ { "]d", M.diagnostic_goto(true), desc = "Next Diagnostic" },
+ { "[d", M.diagnostic_goto(false), desc = "Prev Diagnostic" },
+ { "]e", M.diagnostic_goto(true, "ERROR"), desc = "Next Error" },
+ { "[e", M.diagnostic_goto(false, "ERROR"), desc = "Prev Error" },
+ { "]w", M.diagnostic_goto(true, "WARN"), desc = "Next Warning" },
+ { "[w", M.diagnostic_goto(false, "WARN"), desc = "Prev Warning" },
+ { "", format, desc = "Format Range", mode = "v", has = "documentRangeFormatting" },
+ { "cr", ":IncRename ", desc = "Rename", has = "rename" },
+ {
+ "cq",
+ function()
+ vim.lsp.buf.code_action({
+ context = {
+ only = {
+ "quickfix",
+ "quickfix.ltex",
+ "source",
+ "source.fixAll",
+ "source.organizeImports",
+ "",
+ },
+ },
+ })
+ end,
+ desc = "Fix",
+ mode = { "n", "v" },
+ has = "codeAction",
+ },
+ {
+ "cQ",
+ function()
+ vim.lsp.buf.code_action({
+ context = {
+ only = {
+ "refactor",
+ "refactor.inline",
+ "refactor.extract",
+ "refactor.rewrite",
+ },
+ },
+ })
+ end,
+ desc = "Refactor",
+ mode = { "n", "v" },
+ has = "codeAction",
+ },
+ }
+ end
+ return M._keys
+end
+
+---@param method string
+function M.has(buffer, method)
+ method = method:find("/") and method or "textDocument/" .. method
+ local clients = require("lazyvim.util").lsp.get_clients({ bufnr = buffer })
+ for _, client in ipairs(clients) do
+ if client.supports_method(method) then
+ return true
+ end
+ end
+ return false
+end
+
+---@return (LazyKeys|{has?:string})[]
+function M.resolve(buffer)
+ local Keys = require("lazy.core.handler.keys")
+ if not Keys.resolve then
+ return {}
+ end
+ local spec = M.get()
+ local opts = require("lazyvim.util").opts("nvim-lspconfig")
+ local clients = require("lazyvim.util").lsp.get_clients({ bufnr = buffer })
+ for _, client in ipairs(clients) do
+ local maps = opts.servers[client.name] and opts.servers[client.name].keys or {}
+ vim.list_extend(spec, maps)
+ end
+ return Keys.resolve(spec)
+end
+
+function M.on_attach(_, buffer)
+ local Keys = require("lazy.core.handler.keys")
+ local keymaps = M.resolve(buffer)
+
+ for _, keys in pairs(keymaps) do
+ if not keys.has or M.has(buffer, keys.has) then
+ local opts = Keys.opts(keys)
+ opts.has = nil
+ opts.silent = opts.silent ~= false
+ opts.buffer = buffer
+ vim.keymap.set(keys.mode or "n", keys.lhs, keys.rhs, opts)
+ end
+ end
+end
+
+function M.diagnostic_goto(next, severity)
+ local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev
+ severity = severity and vim.diagnostic.severity[severity] or nil
+ return function()
+ go({ severity = severity })
+ end
+end
+
+return M
diff --git a/nix/programs/nvim/lua/config/options.lua b/nix/programs/nvim/lua/config/options.lua
new file mode 100644
index 0000000..7f5ec59
--- /dev/null
+++ b/nix/programs/nvim/lua/config/options.lua
@@ -0,0 +1,34 @@
+-- Options are automatically loaded before lazy.nvim startup
+-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
+-- Add any additional options here
+local options = {
+ fileencoding = "utf-8",
+ number = true,
+ showmode = true,
+ termguicolors = true,
+ spelllang = "en_us",
+ shell = "fish",
+ relativenumber = false,
+ scrolloff = 5,
+ scrolljump = 5,
+ wrap = false,
+}
+vim.filetype.add({
+ extension = {
+ typst = "typst",
+ typ = "typst",
+ },
+})
+vim.o.guifont = "JetBrainsMono Nerd Font:h14"
+vim.g.neovide_refresh_rate_idle = 180
+vim.g.neovide_refresh_rate_idle = 5
+vim.g.neovide_hide_mouse_when_typing = true
+vim.g.mkdp_browser = "/usr/bin/firefox"
+vim.g.mkdp_auto_start = 1
+vim.g.loaded_netrw = 1
+vim.g.loaded_netrwPlugin = 1
+vim.g.autoformat = false
+
+for k, v in pairs(options) do
+ vim.opt[k] = v
+end
diff --git a/nix/programs/nvim/lua/plugins/cmp.lua b/nix/programs/nvim/lua/plugins/cmp.lua
new file mode 100644
index 0000000..4b4d467
--- /dev/null
+++ b/nix/programs/nvim/lua/plugins/cmp.lua
@@ -0,0 +1,143 @@
+return {
+ {
+ "L3MON4D3/LuaSnip",
+ build = (not jit.os:find("Windows"))
+ and "echo -e 'NOTE: jsregexp is optional, so not a big deal if it fails to build\n'; make install_jsregexp"
+ or nil,
+ dependencies = {
+ "rafamadriz/friendly-snippets",
+ config = function()
+ require("luasnip.loaders.from_vscode").lazy_load()
+ end,
+ },
+ opts = {
+ history = true,
+ delete_check_events = "TextChanged",
+ updateevents = "TextChanged,TextChangedI",
+ enable_autosnippets = true,
+ },
+ keys = function()
+ return {}
+ end,
+ config = function(_, opts)
+ require("luasnip").setup(opts)
+ end,
+ },
+ {
+ "hrsh7th/nvim-cmp",
+ version = false,
+ event = "InsertEnter",
+ dependencies = {
+ "hrsh7th/cmp-nvim-lsp",
+ "hrsh7th/cmp-buffer",
+ "FelipeLema/cmp-async-path",
+ "saadparwaiz1/cmp_luasnip",
+ "Saecki/crates.nvim",
+ },
+ opts = function()
+ vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true })
+ local cmp = require("cmp")
+ local defaults = require("cmp.config.default")()
+ local luasnip = require("luasnip")
+ local compare = require("cmp.config.compare")
+ return {
+ preselect = cmp.PreselectMode.None,
+ completion = {
+ -- completeopt = "menu,menuone,noinsert",
+ },
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ mapping = {
+ [""] = cmp.mapping.scroll_docs(-4),
+ [""] = cmp.mapping.scroll_docs(4),
+ [""] = cmp.mapping.complete(),
+ [""] = cmp.mapping.abort(),
+ [""] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
+ [""] = cmp.mapping.confirm({
+ behavior = cmp.ConfirmBehavior.Replace,
+ select = false,
+ }), -- Accept cur
+ [""] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item({ behavior = cmp.SelectBehavior.Insert })
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ [""] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item({ behavior = cmp.SelectBehavior.Insert })
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ [""] = cmp.mapping(function(fallback)
+ if luasnip.expandable() then
+ luasnip.expand()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ [""] = cmp.mapping(function(fallback)
+ if luasnip.expand_or_jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ },
+ sources = cmp.config.sources({
+ { name = "nvim_lsp", priority = 99 },
+ { name = "luasnip", priority = 3, max_item_count = 3 },
+ { name = "buffer", priority = 2, max_item_count = 2, keyword_length = 5 },
+ { name = "async_path", priority = 1, max_item_count = 2, keyword_length = 3, trigger_characters = {} },
+ { name = "crates" },
+ }),
+ sorting = {
+ priority_weight = 90,
+ comparators = {
+ compare.exact,
+ compare.score,
+ compare.offset,
+ compare.kind,
+ },
+ },
+ formatting = {
+ preselect = cmp.PreselectMode.None,
+ format = function(entry, item)
+ local icons = require("lazyvim.config").icons.kinds
+ if icons[item.kind] then
+ item.kind = icons[item.kind] .. item.kind
+ end
+ return require("tailwindcss-colorizer-cmp").formatter(entry, item)
+ end,
+ },
+ experimental = {
+ ghost_text = {
+ hl_group = "CmpGhostText",
+ },
+ },
+ }
+ end,
+ config = function(_, opts)
+ local cmp = require("cmp")
+ require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" })
+ cmp.setup(opts)
+ end,
+ },
+}
+
diff --git a/nix/programs/nvim/lua/plugins/dashboard.lua b/nix/programs/nvim/lua/plugins/dashboard.lua
new file mode 100644
index 0000000..82715ad
--- /dev/null
+++ b/nix/programs/nvim/lua/plugins/dashboard.lua
@@ -0,0 +1,100 @@
+return {
+ {
+ "goolord/alpha-nvim",
+ event = "VimEnter",
+ opts = function()
+ local alpha = require("alpha")
+ local dashboard = require("alpha.themes.dashboard")
+ dashboard.section.header.val = {
+ [[ _______ ___ _______. __ __ __ _______ ]],
+ [[| \ / \ / || | | | | | | ____|]],
+ [[| .--. | / ^ \ | (----`| |__| | | | | |__ ]],
+ [[| | | | / /_\ \ \ \ | __ | | | | __| ]],
+ [[| '--' | / _____ \ .----) | | | | | | | | |____ ]],
+ [[|_______/ /__/ \__\ |_______/ |__| |__| |__| |_______|]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠪⣍⣒⠒⠦⠤⠤⠤⠄⠠⡜⡐⠁⠪⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⢄⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠈⠛⠯⣉⠁⣐⣂⠐⠮⠥⠟⣓⣲⣾⣿⣿⣿⣶⡃⠀⠀⠈⢞⢆⠀⠀⠀⠀⠀⠀⡰⢁⠂⠄⣇⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⣠⠤⠤⠭⠷⠎⡡⠔⠒⠘⠀⢹⣿⣿⣿⣿⣿⠀⠈⠀⠀⠀⢢⢣⠀⠀⠀⠀⢀⡇⠈⠀⢰⢰⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⢸⢰⠀⠀⠀⡩⢋⣀⣤⣤⣤⣤⣤⣿⣿⠟⠿⣿⡀⠀⠀⠀⠀⠀⠆⢳⠀⠀⠀⢸⠀⠂⠀⠀⡈⡆⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⢣⢂⠀⠮⡪⠛⠉⢋⠝⠻⢿⢿⡿⢁⠔⢋⣸⠇⠀⠀⠀⠀⠀⡘⣆⢣⠀⠀⡼⠀⠀⠀⠀⡇⣇⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⡣⢲⡊⠀⠀⠀⠀⠀⡴⠃⣼⠡⢪⠔⠋⠀⠀⠀⢀⠀⠀⠀⢸⣿⡄⢆⠀⡇⠀⠀⠀⠀⠁⢸⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⢰⢡⡇⠀⠀⢀⠔⠠⠊⣰⠞⡇⢠⠃⠀⣠⣶⣿⣷⣷⣷⠄⠀⠈⡟⣷⡸⡄⡇⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⡇⣾⠀⣀⠔⣁⣤⣦⢺⣿⡆⡆⡃⠀⢨⠃⢸⣿⣿⣿⠏⠀⠠⢀⢠⣿⡇⣧⡇⠀⠀⠀⠀⠀⢸⣆⢔⡲⡆⠀ ]],
+ [[ ⠀⠀⣠⠞⠼⠧⢙⡒⣾⣿⣿⡷⡘⣟⣷⣜⡃⠀⡼⠀⠀⠷⠗⠋⠀⠀⠀⢀⡟⣿⣿⢀⠓⠀⠀⠀⠀⠀⢸⢋⠊⠀⡇⠀ ]],
+ [[ ⠘⠛⠒⠒⠉⠉⠁⡇⣿⣽⣿⡇⠈⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⣠⠟⠀⣷⣿⣇⠱⡀⠀⠀⠀⡄⢀⠃⠀⡄⡇⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⡇⢸⣏⢀⣧⠀⠈⠆⠀⠀⠀⠀⠀⠀⠀⠀⡠⢊⡴⡟⠀⡼⢁⢸⡙⣠⠁⠀⠀⠀⢇⠆⠀⢀⢳⡇⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⢳⢀⣵⢸⣯⣷⣤⣀⠀⠀⠀⠀⠀⢀⣐⠮⠔⡎⠘⠀⠈⢀⢮⣿⣷⠁⠇⠠⠀⢰⠎⠀⠀⡘⣸⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⢀⠎⢬⢘⣯⠛⢻⠏⣿⣿⣶⣶⡶⠋⠉⠀⠀⢸⠀⠀⡔⠀⣪⣿⣿⢻⠀⠸⠈⡇⠛⠀⠠⢀⢃⡇⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠈⡹⡡⣪⡏⠛⠀⠀⢠⡟⢻⣿⣿⡇⠀⠀⠀⠀⢼⡆⠠⡇⢰⣿⣿⣿⣻⡄⠀⡆⠁⠀⣠⠃⠌⠼⠤⠤⡀ ]],
+ [[ ⠀⠀⠀⣀⡠⢞⣳⣽⢸⡇⠀⡇⠀⠸⠀⣼⣿⣿⡇⠀⠀⠀⠀⠈⡇⣰⠃⣶⡍⣼⣿⣏⠃⠀⠁⢠⠊⣀⣜⠤⠐⢂⢆⠇ ]],
+ [[ ⠀⠀⠈⠉⠉⠁⠀⢇⢸⡟⠀⡇⠀⡇⢸⢷⣹⣿⡇⠀⠀⠀⠀⠀⢳⡽⠃⡞⣇⣿⣧⣿⠀⠀⢸⠃⢠⠃⠀⢀⠤⢢⠞⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⢸⡀⡇⠀⠁⢠⠁⣿⠈⣿⣿⠇⠀⠀⠀⠀⠀⠀⠁⡆⡇⣾⠿⣹⣿⠀⠀⠃⡰⠃⡰⢔⣡⠞⠁⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⢇⢠⠀⠂⡌⠀⢽⠁⣟⡟⠀⠀⠀⠀⠀⠀⠀⠀⣇⢶⢹⣤⣿⠇⠀⣀⣈⠝⡱⠒⠉⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠈⣎⡄⠀⡷⠀⢸⠀⢹⠇⠀⠀⠀⠀⠀⠀⠀⠀⠫⣼⣾⣿⢋⠤⠤⠥⢆⡞⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⢀⢫⣡⢸⠎⢃⢘⠀⢈⡄⠀⠀⠀⠀⠀⠀⠀⠀⢀⡽⣽⢀⡋⠉⠑⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠘⠉⠳⡯⣇⢆⠻⣆⠈⣤⠀⠀⠀⠀⣀⡀⠤⢚⡨⠷⣝⠗⠑⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠫⣗⠳⡜⠵⠀⡍⡥⠤⠤⠤⠄⠒⠉⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠫⡆⣇⠇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡙⡰⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣦⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]],
+ }
+ dashboard.section.buttons.val = {
+ dashboard.button("f", " Find file", ":lua require('telescope.builtin').find_files()"),
+ dashboard.button("y", " Yazi", ":lua require('yazi').yazi()"),
+ dashboard.button("p", " Find project", ":lua require('telescope').extensions.project.project{}"),
+ dashboard.button("t", " Zoxide", ":lua require('telescope').extensions.zoxide.list{}"),
+ dashboard.button("c", " Configuration", ":e ~/.config/nvim/init.lua "),
+ dashboard.button("q", " Quit Neovim", ":qa"),
+ }
+
+ local function footer()
+ return "dashie@dashie.org"
+ end
+
+ dashboard.section.footer.val = footer()
+
+ dashboard.section.footer.opts.hl = "Type"
+ dashboard.section.header.opts.hl = "Include"
+ dashboard.section.buttons.opts.hl = "Keyword"
+
+ dashboard.opts.opts.noautocmd = true
+
+ -- alpha.pad_margin(dashboard.section.header.val, dashboard.opts , 0, 0)
+ alpha.setup(dashboard.opts)
+ end,
+ config = function(_, dashboard)
+ -- close Lazy and re-open when the dashboard is ready
+ if vim.o.filetype == "lazy" then
+ vim.cmd.close()
+ vim.api.nvim_create_autocmd("User", {
+ pattern = "AlphaReady",
+ callback = function()
+ require("lazy").show()
+ end,
+ })
+ end
+
+ require("alpha").setup({
+ layout = {
+ { type = "padding", val = 1 },
+ dashboard.section.header,
+ { type = "padding", val = 1 },
+ dashboard.section.buttons,
+ { type = "padding", val = 1 },
+ dashboard.section.footer,
+ },
+ })
+
+ vim.api.nvim_create_autocmd("User", {
+ pattern = "LazyVimStarted",
+ callback = function()
+ local stats = require("lazy").stats()
+ local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100)
+ dashboard.section.footer.val = "⚡ Neovim loaded " .. stats.count .. " plugins in " .. ms .. "ms"
+ pcall(vim.cmd.AlphaRedraw)
+ end,
+ })
+ end,
+ },
+}
diff --git a/nix/programs/nvim/lua/plugins/disabled.lua b/nix/programs/nvim/lua/plugins/disabled.lua
new file mode 100644
index 0000000..76dc307
--- /dev/null
+++ b/nix/programs/nvim/lua/plugins/disabled.lua
@@ -0,0 +1,9 @@
+return {
+ {
+ { "rcarriga/nvim-notify", enabled = false },
+ },
+ { { "folke/noice.nvim", enabled = false } },
+ { { "nvimtools/none-ls.nvim", enabled = false } },
+ { { "nvimdev/dashboard-nvim", enabled = false } },
+ { { "nvim-neo-tree/neo-tree.nvim", enabled = false } },
+}
diff --git a/nix/programs/nvim/lua/plugins/lsp.lua b/nix/programs/nvim/lua/plugins/lsp.lua
new file mode 100644
index 0000000..984fdd1
--- /dev/null
+++ b/nix/programs/nvim/lua/plugins/lsp.lua
@@ -0,0 +1,239 @@
+return {
+ {
+ "williamboman/mason.nvim",
+ },
+ {
+ "neovim/nvim-lspconfig",
+ ---@class PluginLspOpts
+ opts = function(_, opts)
+ local path = vim.fn.stdpath("config") .. "/spell/ltex.dictionary.en-US.txt"
+ local words = {}
+
+ local file, err = io.open(path, "r")
+ if err ~= nil then
+ os.execute("mkdir " .. vim.fn.stdpath("config") .. "/spell")
+ file = io.open(path, "w")
+ file:write("")
+ file:close()
+ file = io.open(path, "r")
+ end
+ for word in file:lines() do
+ table.insert(words, word)
+ end
+ local new_opts = {
+ format_notify = false,
+ -- LSP Server Settings
+ ---@type lspconfig.options
+ servers = {
+ marksman = {
+ mason = false,
+ },
+ clangd = {
+ mason = false,
+ },
+ jdtls = {
+ mason = false,
+ },
+ gopls = {
+ mason = false,
+ },
+ pyright = {
+ mason = false,
+ },
+ ruff_lsp = {
+ mason = false,
+ },
+ texlab = {
+ mason = false,
+ },
+ taplo = {
+ keys = {
+ {
+ "K",
+ function()
+ if vim.fn.expand("%:t") == "Cargo.toml" and require("crates").popup_available() then
+ require("crates").show_popup()
+ else
+ vim.lsp.buf.hover()
+ end
+ end,
+ desc = "Show Crate Documentation",
+ },
+ },
+ mason = false,
+ },
+ bashls = {
+ mason = false,
+ },
+ ansiblels = {
+ mason = false,
+ },
+ omnisharp = {
+ mason = false,
+ handlers = {
+ ["textDocument/definition"] = function(...)
+ return require("omnisharp_extended").handler(...)
+ end,
+ },
+ keys = {
+ {
+ "oe",
+ function()
+ require("omnisharp_extended").telescope_lsp_definitions()
+ end,
+ desc = "Goto Definition",
+ },
+ },
+ cmd = {
+ -- no comment
+ "OmniSharp",
+ "-z",
+ "--hostPID",
+ tostring(vim.fn.getpid()),
+ "DotNet:enablePackageRestore=false",
+ "--encoding",
+ "utf-8",
+ "--languageserver",
+ "FormattingOptions:EnableEditorConfigSupport=true",
+ "FormattingOptions:OrganizeImports=true",
+ "RoslynExtensionsOptions:EnableAnalyzersSupport=true",
+ "RoslynExtensionsOptions:EnableImportCompletion=true",
+ -- inlay hints are bugged until next release.....
+ -- "RoslynExtensionsOptions:InlayHintsOptions:EnableForParameters=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForLiteralParameters=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForIndexerParameters=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForObjectCreationParameters=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForOtherParameters=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:SuppressForParametersThatDifferOnlyBySuffix=false",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:SuppressForParametersThatMatchMethodIntent=false",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:SuppressForParametersThatMatchArgumentName=false",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:EnableForTypes=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForImplicitVariableTypes=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForLambdaParameterTypes=true",
+ -- "RoslynExtensionsOptions:InlayHintsOptions:ForImplicitObjectCreation=true",
+ "Sdk:IncludePrereleases=true",
+ },
+ },
+ tinymist = {
+ settings = {
+ formatterMode = "typstyle",
+ exportPdf = "onSave",
+ },
+ mason = false,
+ },
+ nixd = {
+ settings = {
+ ["nixd"] = {
+ formatting = {
+ command = { "nixpkgs-fmt" },
+ },
+ },
+ },
+ mason = false,
+ },
+ ltex = {
+ settings = {
+ ltex = {
+ checkFrequency = "save",
+ dictionary = {
+ ["en-US"] = words,
+ },
+ },
+ },
+ filetypes = {
+ "bib",
+ "gitcommit",
+ "markdown",
+ "org",
+ "plaintex",
+ "rst",
+ "rnoweb",
+ "tex",
+ "pandoc",
+ "typst",
+ "typ",
+ "text",
+ },
+ mason = false,
+ },
+ sqls = {
+ mason = false,
+ },
+ lemminx = {
+ mason = false,
+ },
+ opencl_ls = {
+ mason = false,
+ },
+ yamlls = {
+ mason = false,
+ },
+ zls = {
+ mason = false,
+ },
+ jsonls = {
+ mason = false,
+ cmd = { "vscode-json-languageserver", "--stdio" },
+ },
+ cssls = {
+ mason = false,
+ cmd = { "css-languageserver", "--stdio" },
+ },
+ lua_ls = {
+ mason = false,
+ {
+ Lua = {
+ workspace = {
+ checkThirdParty = false,
+ },
+ completion = {
+ callSnippet = "Replace",
+ },
+ },
+ },
+ },
+ },
+ }
+ return vim.tbl_deep_extend("keep", new_opts, opts)
+ end,
+ init = function()
+ local keys = require("lazyvim.plugins.lsp.keymaps").get()
+ local my_keys = require("config.lsp-keymap").get()
+ local count = 0
+ for _ in pairs(my_keys) do
+ keys[#keys + 1] = my_keys[count]
+ count = count + 1
+ end
+ end,
+ },
+ {
+ "stevearc/conform.nvim",
+ opts = {
+ keys = {
+ {
+ "cF",
+ function()
+ require("conform").format({ async = true, lsp_fallback = true })
+ end,
+ mode = "",
+ numberdesc = "Format buffer",
+ },
+ },
+ formatters = {
+ mdformat = {
+ prepend_args = { "--number" },
+ },
+ },
+ formatters_by_ft = {
+ nix = { "nixpkgs-fmt" },
+ lua = { "stylua" },
+ sh = { "shfmt" },
+ cs = { "dotnet-csharpier" },
+ markdown = { "mdformat" },
+ sql = { "sql-formatter" },
+ json = { "jq" },
+ yaml = { "yamlfmt" },
+ },
+ },
+ },
+}
diff --git a/nix/programs/nvim/lua/plugins/plugins.lua b/nix/programs/nvim/lua/plugins/plugins.lua
new file mode 100644
index 0000000..833d72f
--- /dev/null
+++ b/nix/programs/nvim/lua/plugins/plugins.lua
@@ -0,0 +1,292 @@
+return {
+ {
+ "nvim-telescope/telescope.nvim",
+ cmd = "Telescope",
+ keys = function()
+ return {}
+ end,
+ opts = {
+ defaults = {
+ layout_strategy = "flex",
+ layout_config = {
+ flex = {
+ height = 0.95,
+ width = 0.95,
+ flip_columns = 100,
+ },
+ vertical = { preview_height = 0.5, preview_cutoff = 5 },
+ horizontal = { preview_width = 0.7, preview_cutoff = 99 },
+ },
+ },
+ },
+ },
+ {
+ "nvim-telescope/telescope-project.nvim",
+ lazy = true,
+ },
+ {
+ "nvim-telescope/telescope-file-browser.nvim",
+ lazy = true,
+ config = function()
+ require("telescope").load_extension("file_browser")
+ end,
+ },
+ {
+ "jvgrootveld/telescope-zoxide",
+ lazy = true,
+ config = function()
+ local z_utils = require("telescope._extensions.zoxide.utils")
+ local t = require("telescope")
+ -- Configure the extension
+ t.setup({
+ extensions = {
+ zoxide = {
+ prompt_title = "[ Queries ]",
+ mappings = {
+ default = {
+ after_action = function(selection)
+ print("Update to (" .. selection.z_score .. ") " .. selection.path)
+ end,
+ },
+ [""] = {
+ before_action = function(selection)
+ print("before C-s")
+ end,
+ action = function(selection)
+ vim.cmd("edit " .. selection.path)
+ end,
+ },
+ [""] = { action = z_utils.create_basic_command("split") },
+ },
+ },
+ },
+ })
+
+ -- Load the extension
+ t.load_extension("zoxide")
+ end,
+ },
+ {
+ "lervag/vimtex",
+ config = function()
+ vim.cmd("let g:vimtex_quickfix_mode=0")
+ vim.cmd("let g:vimtex_view_general_viewer = 'evince'")
+ vim.cmd("let g:vimtex_compiler_method = 'latexmk'")
+ vim.cmd(
+ "let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '--extra-mem-bot=10000000', '-synctex=1', '-interaction=nonstopmode',],}"
+ )
+ end,
+ },
+ {
+ "jbyuki/instant.nvim",
+ config = function()
+ vim.cmd("let g:instant_username = 'dashie'")
+ end,
+ },
+ {
+ "nvim-treesitter/nvim-treesitter",
+ config = function(_, _)
+ local opts = {
+ ensure_installed = {},
+ -- parser_install_dir = "~/.config/nvim",
+ textobjects = {
+ select = {
+ enable = true,
+ lookahead = true,
+ keymaps = {
+ -- You can use the capture groups defined in textobjects.scm
+ ["af"] = "@function.outer",
+ ["if"] = "@function.inner",
+ ["ac"] = "@class.outer",
+ ["ic"] = "@class.inner",
+ },
+ },
+ },
+ }
+ require("nvim-treesitter.configs").setup(opts)
+ end,
+ },
+ {
+ "karb94/neoscroll.nvim",
+ config = function()
+ require("neoscroll").setup()
+ end,
+ },
+ {
+ "kaarmu/typst.vim",
+ lazy = true,
+ event = "FileType typst",
+ },
+ {
+ "folke/which-key.nvim",
+ event = "VeryLazy",
+ opts = {
+ plugins = { spelling = true },
+ defaults = {
+ mode = { "n", "v" },
+ ["g"] = { name = "+goto" },
+ ["gz"] = { name = "+surround" },
+ ["]"] = { name = "+next" },
+ ["["] = { name = "+prev" },
+ [""] = { name = "+tabs" },
+ ["b"] = { name = "+buffer" },
+ ["c"] = { name = "+code" },
+ ["f"] = { name = "+file/find" },
+ ["g"] = { name = "+git" },
+ ["gh"] = { name = "+hunks" },
+ ["q"] = { name = "+quit/session" },
+ ["s"] = { name = "+search" },
+ ["u"] = { name = "+ui" },
+ ["w"] = { name = "+windows" },
+ ["x"] = { name = "+diagnostics/quickfix" },
+ ["h"] = { name = "+harpoon" },
+ ["d"] = { name = "+DAP" },
+ },
+ },
+ config = function(_, opts)
+ local wk = require("which-key")
+ wk.setup(opts)
+ wk.register(opts.defaults)
+ end,
+ },
+ {
+ "f-person/git-blame.nvim",
+ lazy = true,
+ },
+ {
+ "mg979/vim-visual-multi",
+ },
+ {
+ "barreiroleo/ltex_extra.nvim",
+ ft = { "tex", "typst", "typ" },
+ lazy = true,
+ },
+ {
+ "smjonas/inc-rename.nvim",
+ lazy = true,
+ event = "BufEnter",
+ config = function()
+ require("inc_rename").setup({
+ cmd_name = "IncRename", -- the name of the command
+ hl_group = "Substitute", -- the highlight group used for highlighting the identifier's new name
+ preview_empty_name = true, -- whether an empty new name should be previewed; if false the command preview will be cancelled instead
+ show_message = true, -- whether to display a `Renamed m instances in n files` message after a rename operation
+ input_buffer_type = nil, -- the type of the external input buffer to use (the only supported value is currently "dressing")
+ post_hook = nil, -- callback to run after renaming, receives the result table (from LSP handler) as an argument
+ })
+ end,
+ },
+ {
+ "nvim-tree/nvim-tree.lua",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ config = function()
+ require("nvim-tree").setup({
+ renderer = {
+ group_empty = true,
+ },
+ view = {
+ side = "right",
+ },
+ diagnostics = {
+ enable = true,
+ },
+ })
+ end,
+ keys = {
+ {
+ "fe",
+ function()
+ require("nvim-tree.api").tree.toggle()
+ end,
+ desc = "Explorer NvimTree (root dir)",
+ },
+ {
+ "fE",
+ function()
+ require("nvim-tree.api").tree.toggle()
+ end,
+ desc = "Explorer NvimTree (cwd)",
+ },
+ { "", "fe", desc = "Explorer NvimTree (root dir)", remap = true },
+ { "", "fE", desc = "Explorer NvimTree (cwd)", remap = true },
+ },
+ },
+ {
+ "rcarriga/nvim-dap-ui",
+ keys = {
+ {
+ "dk",
+ function()
+ require("dap").down()
+ end,
+ desc = "Down",
+ },
+ {
+ "dl",
+ function()
+ require("dap").up()
+ end,
+ desc = "Up",
+ },
+ {
+ "d;",
+ function()
+ require("dap").run_last()
+ end,
+ desc = "Run Last",
+ },
+ },
+ },
+ {
+ "nvim-neotest/neotest",
+ dependencies = {
+ "rcasia/neotest-java",
+ },
+ opts = {
+ adapters = {
+ ["neotest-java"] = {
+ ignore_wrapper = false, -- whether to ignore maven/gradle wrapper
+ junit_jar = "/home/dashie/.local/share/nvim/mason/bin/junit-standalone.jar",
+ -- default: .local/share/nvim/neotest-java/junit-platform-console-standalone-[version].jar
+ },
+ },
+ },
+ },
+ {
+ "DreamMaoMao/yazi.nvim",
+ dependencies = {
+ "nvim-telescope/telescope.nvim",
+ "nvim-lua/plenary.nvim",
+ },
+ keys = {
+ { "fy", "Yazi", desc = "Toggle Yazi" },
+ },
+ },
+ {
+ "sindrets/diffview.nvim",
+ keys = {
+ { "gd", "