{ [ u, U, udiaeresis, Udiaeresis ] };
};
'';
-in
-{
- environment.systemPackages = [ pkgs.xorg.xkbcomp ];
- services.xserver.xkb.extraLayouts.dashie = {
+in {
+ environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp];
+ services.xserver.xkb.extraLayouts.enIntUmlaut = {
description = "US layout with 'umlaut'";
- languages = [ "eng" ];
- symbolsFile = "${dashie}";
+ languages = ["eng"];
+ symbolsFile = "${layout}";
};
}
-
-
diff --git a/docs/default.nix b/docs/default.nix
new file mode 100644
index 0000000..1fd8a1e
--- /dev/null
+++ b/docs/default.nix
@@ -0,0 +1,61 @@
+# 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
new file mode 100644
index 0000000..3658e00
--- /dev/null
+++ b/docs/src/README.md
@@ -0,0 +1,329 @@
+
+
+
+
+
+
+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/nix/.gitignore b/docs/src/SUMMARY.md
similarity index 100%
rename from nix/.gitignore
rename to docs/src/SUMMARY.md
diff --git a/docs/src/coding.md b/docs/src/coding.md
new file mode 100644
index 0000000..e69de29
diff --git a/docs/src/conf.md b/docs/src/conf.md
new file mode 100755
index 0000000..aa51f0b
--- /dev/null
+++ b/docs/src/conf.md
@@ -0,0 +1 @@
+# 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
new file mode 100644
index 0000000..08baa43
--- /dev/null
+++ b/docs/src/logo.svg
@@ -0,0 +1,238 @@
+
+
+
+DashNix DashNix
diff --git a/docs/src/mods.md b/docs/src/mods.md
new file mode 100755
index 0000000..df7fe4f
--- /dev/null
+++ b/docs/src/mods.md
@@ -0,0 +1 @@
+# This file handles configuration of individual modules.
diff --git a/example/flake.nix b/example/flake.nix
new file mode 100644
index 0000000..01ec944
--- /dev/null
+++ b/example/flake.nix
@@ -0,0 +1,51 @@
+{
+ 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
new file mode 100644
index 0000000..dbe8cd0
--- /dev/null
+++ b/example/hosts/example/configuration.nix
@@ -0,0 +1,68 @@
+{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
new file mode 100644
index 0000000..855cafb
--- /dev/null
+++ b/example/hosts/example/hardware.nix
@@ -0,0 +1,3 @@
+{
+ # this file adds custom NixOS configuration
+}
diff --git a/example/hosts/example/home.nix b/example/hosts/example/home.nix
new file mode 100644
index 0000000..e011ea7
--- /dev/null
+++ b/example/hosts/example/home.nix
@@ -0,0 +1,3 @@
+{
+ # this file adds custom home-manager configuration
+}
diff --git a/example/secrets/secrets.md b/example/secrets/secrets.md
new file mode 100644
index 0000000..86d99c6
--- /dev/null
+++ b/example/secrets/secrets.md
@@ -0,0 +1,3 @@
+# 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
new file mode 100644
index 0000000..e69de29
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..be1d5c2
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,113 @@
+{
+ 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/gtk-4.0/gtk.css b/gtk-4.0/gtk.css
deleted file mode 100644
index ef7f654..0000000
--- a/gtk-4.0/gtk.css
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Generated with Gradience
-
-Issues caused by theming should be reported to Gradience repository, and not to upstream
-
-https://github.com/GradienceTeam/Gradience
-*/
-
-@define-color accent_color #a9b1d6;
-@define-color accent_bg_color #a9b1d6;
-@define-color accent_fg_color rgba(0, 0, 0, 0.87);
-@define-color destructive_color #F28B82;
-@define-color destructive_bg_color #F28B82;
-@define-color destructive_fg_color rgba(0, 0, 0, 0.87);
-@define-color success_color #81C995;
-@define-color success_bg_color #81C995;
-@define-color success_fg_color rgba(0, 0, 0, 0.87);
-@define-color warning_color #FDD633;
-@define-color warning_bg_color #FDD633;
-@define-color warning_fg_color rgba(0, 0, 0, 0.87);
-@define-color error_color #F28B82;
-@define-color error_bg_color #F28B82;
-@define-color error_fg_color rgba(0, 0, 0, 0.87);
-@define-color window_bg_color #1a1b26;
-@define-color window_fg_color #c0caf5;
-@define-color view_bg_color #1a1b26;
-@define-color view_fg_color #c0caf5;
-@define-color headerbar_bg_color #1a1b26;
-@define-color headerbar_fg_color #c0caf5;
-@define-color headerbar_border_color rgba(192, 202, 245, 0.12);
-@define-color headerbar_backdrop_color @window_bg_color;
-@define-color headerbar_shade_color rgba(0, 0, 0, 0.36);
-@define-color card_bg_color #1a1b26;
-@define-color card_fg_color #c0caf5;
-@define-color card_shade_color rgba(0, 0, 0, 0.36);
-@define-color dialog_bg_color #1a1b26;
-@define-color dialog_fg_color #c0caf5;
-@define-color popover_bg_color #1a1b26;
-@define-color popover_fg_color #c0caf5;
-@define-color shade_color rgba(0, 0, 0, 0.36);
-@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5);
-@define-color sidebar_bg_color #1a1b26;
-@define-color sidebar_fg_color #c0caf5;
-@define-color secondary_sidebar_bg_color #1a1b26;
-@define-color secondary_sidebar_fg_color #c0caf5;
-@define-color sidebar_shade_color rgba(0, 0, 0, 0.36);
-@define-color secondary_sidebar_shade_color rgba(0, 0, 0, 0.36);
-@define-color thumbnail_bg_color #1a1b26;
-@define-color thumbnail_fg_color #c0caf5;
-@define-color sidebar_backdrop_color rgba(192, 202, 245, 0.12);
-@define-color secondary_sidebar_backdrop_color rgba(192, 202, 245, 0.12);
-@define-color blue_1 #99c1f1;
-@define-color blue_2 #62a0ea;
-@define-color blue_3 #3584e4;
-@define-color blue_4 #1c71d8;
-@define-color blue_5 #1a5fb4;
-@define-color green_1 #8ff0a4;
-@define-color green_2 #57e389;
-@define-color green_3 #33d17a;
-@define-color green_4 #2ec27e;
-@define-color green_5 #26a269;
-@define-color yellow_1 #f9f06b;
-@define-color yellow_2 #f8e45c;
-@define-color yellow_3 #f6d32d;
-@define-color yellow_4 #f5c211;
-@define-color yellow_5 #e5a50a;
-@define-color orange_1 #ffbe6f;
-@define-color orange_2 #ffa348;
-@define-color orange_3 #ff7800;
-@define-color orange_4 #e66100;
-@define-color orange_5 #c64600;
-@define-color red_1 #f66151;
-@define-color red_2 #ed333b;
-@define-color red_3 #e01b24;
-@define-color red_4 #c01c28;
-@define-color red_5 #a51d2d;
-@define-color purple_1 #dc8add;
-@define-color purple_2 #c061cb;
-@define-color purple_3 #9141ac;
-@define-color purple_4 #813d9c;
-@define-color purple_5 #613583;
-@define-color brown_1 #cdab8f;
-@define-color brown_2 #b5835a;
-@define-color brown_3 #986a44;
-@define-color brown_4 #865e3c;
-@define-color brown_5 #63452c;
-@define-color light_1 #ffffff;
-@define-color light_2 #f6f5f4;
-@define-color light_3 #deddda;
-@define-color light_4 #c0bfbc;
-@define-color light_5 #9a9996;
-@define-color dark_1 #77767b;
-@define-color dark_2 #5e5c64;
-@define-color dark_3 #3d3846;
-@define-color dark_4 #241f31;
-@define-color dark_5 #000000;
-
-.navigation-sidebar {
-background-color: #1a1b26;
-}
diff --git a/home/common.nix b/home/common.nix
new file mode 100644
index 0000000..fe2fa53
--- /dev/null
+++ b/home/common.nix
@@ -0,0 +1,42 @@
+{
+ 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
new file mode 100644
index 0000000..afc0ab3
--- /dev/null
+++ b/home/default.nix
@@ -0,0 +1,66 @@
+{
+ 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
new file mode 100644
index 0000000..38dceea
--- /dev/null
+++ b/home/sync.nix
@@ -0,0 +1,55 @@
+# 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
new file mode 100644
index 0000000..9976455
--- /dev/null
+++ b/home/themes/default.nix
@@ -0,0 +1,8 @@
+{
+ imports = [
+ ./qt.nix
+ ./kdeglobals.nix
+ ./oxiced.nix
+ ./firefoxTheme.nix
+ ];
+}
diff --git a/home/themes/firefoxTheme.nix b/home/themes/firefoxTheme.nix
new file mode 100644
index 0000000..0de46f6
--- /dev/null
+++ b/home/themes/firefoxTheme.nix
@@ -0,0 +1,327 @@
+# 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
new file mode 100644
index 0000000..8fa5003
--- /dev/null
+++ b/home/themes/kdeglobals.nix
@@ -0,0 +1,252 @@
+# 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
new file mode 100644
index 0000000..8a9e7dc
--- /dev/null
+++ b/home/themes/oxiced.nix
@@ -0,0 +1,86 @@
+{
+ 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/home/themes/qt.nix b/home/themes/qt.nix
new file mode 100644
index 0000000..21dc324
--- /dev/null
+++ b/home/themes/qt.nix
@@ -0,0 +1,124 @@
+{
+ config,
+ inputs,
+ pkgs,
+ lib,
+ ...
+}: let
+ username = config.conf.username;
+ # 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;
+ # active_colors=#ffc0caf5, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5
+ # disabled_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d
+ # inactive_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d
+ color = ''
+
+
+ [ColorScheme]
+ active_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
+ disabled_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
+ inactive_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
+ '';
+ qss = ''
+
+ QTabBar::tab:selected {
+ color: palette(highlight);
+ }
+ QMenuBar, QMenu, QToolBar, QStatusBar, QFrame, QScrollBar {
+ border: none;
+ }
+ '';
+in {
+ stylix.targets.qt = {
+ enable = false;
+ };
+ qt = {
+ enable = true;
+ style.package = pkgs.kdePackages.breeze;
+ style.name = lib.mkForce "breeze-dark";
+ };
+
+ xdg.configFile = {
+ "qt5ct/colors/tokyonight.conf" = {
+ text = "${color}";
+ };
+ "qt6ct/colors/tokyonight.conf" = {
+ text = "${color}";
+ };
+ "qt5ct/qss/tab.qss" = {
+ text = "${qss}";
+ };
+ "qt5ct/qt5ct.conf" = {
+ text = ''
+
+ [Appearance]
+ color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf
+ custom_palette=true
+ icon_theme=MoreWaita
+ standard_dialogs=xdgdesktopportal
+ style=Breeze
+
+ [Fonts]
+ fixed="Noto Sans,12,-1,5,50,0,0,0,0,0"
+ general="Noto Sans,12,-1,5,50,0,0,0,0,0"
+
+ [Interface]
+ activate_item_on_single_click=2
+ buttonbox_layout=3
+ cursor_flash_time=1000
+ dialog_buttons_have_icons=0
+ double_click_interval=400
+ gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
+ keyboard_scheme=4
+ menus_have_icons=true
+ show_shortcuts_in_context_menus=true
+ stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss
+ toolbutton_style=4
+ underline_shortcut=0
+ wheel_scroll_lines=3
+
+ [SettingsWindow]
+ geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q)
+
+ [Troubleshooting]
+ force_raster_widgets=1
+ ignored_applications=@Invalid()
+ '';
+ };
+ "qt6ct/qt6ct.conf" = {
+ text = ''
+
+ [Appearance]
+ color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf
+ custom_palette=true
+ standard_dialogs=xdgdesktopportal
+ style=Breeze
+
+ [Fonts]
+ fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
+ general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
+
+ [Interface]
+ activate_item_on_single_click=2
+ buttonbox_layout=3
+ cursor_flash_time=1000
+ dialog_buttons_have_icons=0
+ double_click_interval=400
+ gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
+ keyboard_scheme=4
+ menus_have_icons=true
+ show_shortcuts_in_context_menus=true
+ stylesheets=@Invalid()
+ toolbutton_style=4
+ underline_shortcut=1
+ wheel_scroll_lines=3
+
+ [Troubleshooting]
+ force_raster_widgets=1
+ ignored_applications=@Invalid()
+ '';
+ };
+ };
+}
diff --git a/iso/configuration.nix b/iso/configuration.nix
new file mode 100644
index 0000000..9272a65
--- /dev/null
+++ b/iso/configuration.nix
@@ -0,0 +1,86 @@
+{
+ 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
new file mode 100644
index 0000000..d8a7402
--- /dev/null
+++ b/lib/default.nix
@@ -0,0 +1,292 @@
+{
+ 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
new file mode 100644
index 0000000..d2360ad
--- /dev/null
+++ b/lib/foxextensions.nix
@@ -0,0 +1,59 @@
+{
+ 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
new file mode 100644
index 0000000..e5c39a7
--- /dev/null
+++ b/lib/foxwrappers.nix
@@ -0,0 +1,43 @@
+# 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
new file mode 100644
index 0000000..cfcd413
--- /dev/null
+++ b/lib/importPkgs.nix
@@ -0,0 +1,17 @@
+{
+ 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
new file mode 100644
index 0000000..4d222f8
--- /dev/null
+++ b/lib/override.nix
@@ -0,0 +1 @@
+{lib, ...}: value: lib.mkOverride 999 value
diff --git a/lib/wm.nix b/lib/wm.nix
new file mode 100644
index 0000000..416956a
--- /dev/null
+++ b/lib/wm.nix
@@ -0,0 +1,446 @@
+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
new file mode 100644
index 0000000..8c9526c
--- /dev/null
+++ b/logo.svg
@@ -0,0 +1,293 @@
+
+
+
+DashNix DashNix
diff --git a/modules/conf.nix b/modules/conf.nix
new file mode 100644
index 0000000..0e3a166
--- /dev/null
+++ b/modules/conf.nix
@@ -0,0 +1,170 @@
+{
+ 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
new file mode 100644
index 0000000..683596a
--- /dev/null
+++ b/modules/default.nix
@@ -0,0 +1,6 @@
+{
+ imports = [
+ ./programs
+ ./conf.nix
+ ];
+}
diff --git a/modules/programs/acpid.nix b/modules/programs/acpid.nix
new file mode 100644
index 0000000..228c402
--- /dev/null
+++ b/modules/programs/acpid.nix
@@ -0,0 +1,21 @@
+{
+ 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
new file mode 100644
index 0000000..b1b7922
--- /dev/null
+++ b/modules/programs/anyrun.nix
@@ -0,0 +1,145 @@
+{
+ 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
new file mode 100644
index 0000000..1d1b2b9
--- /dev/null
+++ b/modules/programs/basePackages.nix
@@ -0,0 +1,132 @@
+{
+ 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
new file mode 100644
index 0000000..f0e2ef1
--- /dev/null
+++ b/modules/programs/bluetooth.nix
@@ -0,0 +1,27 @@
+{
+ 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
new file mode 100644
index 0000000..404fddd
--- /dev/null
+++ b/modules/programs/browser/brave.nix
@@ -0,0 +1,22 @@
+{
+ 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
new file mode 100644
index 0000000..5d48046
--- /dev/null
+++ b/modules/programs/browser/chromium.nix
@@ -0,0 +1,22 @@
+{
+ 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
new file mode 100644
index 0000000..ade4ecf
--- /dev/null
+++ b/modules/programs/browser/default.nix
@@ -0,0 +1,9 @@
+{
+ 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
new file mode 100644
index 0000000..d93ac58
--- /dev/null
+++ b/modules/programs/browser/firefox.nix
@@ -0,0 +1,125 @@
+{
+ 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
new file mode 100644
index 0000000..fc74bf3
--- /dev/null
+++ b/modules/programs/browser/librewolf.nix
@@ -0,0 +1,119 @@
+{
+ 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
new file mode 100644
index 0000000..db32900
--- /dev/null
+++ b/modules/programs/browser/zen.nix
@@ -0,0 +1,157 @@
+# 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
new file mode 100644
index 0000000..e212529
--- /dev/null
+++ b/modules/programs/clam.nix
@@ -0,0 +1,60 @@
+{
+ 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
new file mode 100644
index 0000000..5a22205
--- /dev/null
+++ b/modules/programs/coding.nix
@@ -0,0 +1,575 @@
+{
+ 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
new file mode 100644
index 0000000..b62ee25
--- /dev/null
+++ b/modules/programs/containers.nix
@@ -0,0 +1,79 @@
+{
+ 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
new file mode 100644
index 0000000..08a4a2d
--- /dev/null
+++ b/modules/programs/default.nix
@@ -0,0 +1,56 @@
+{
+ 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
new file mode 100644
index 0000000..a631802
--- /dev/null
+++ b/modules/programs/drives.nix
@@ -0,0 +1,312 @@
+{
+ 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
new file mode 100644
index 0000000..8abf24d
--- /dev/null
+++ b/modules/programs/fancontrol.nix
@@ -0,0 +1,37 @@
+{
+ 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
new file mode 100644
index 0000000..9953d84
--- /dev/null
+++ b/modules/programs/fastfetch.nix
@@ -0,0 +1,75 @@
+{
+ 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
new file mode 100644
index 0000000..1d8c8c8
--- /dev/null
+++ b/modules/programs/fish.nix
@@ -0,0 +1,190 @@
+{
+ 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
new file mode 100644
index 0000000..68ec2da
--- /dev/null
+++ b/modules/programs/flatpak.nix
@@ -0,0 +1,21 @@
+{
+ 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
new file mode 100644
index 0000000..6c3eb0a
--- /dev/null
+++ b/modules/programs/gaming.nix
@@ -0,0 +1,149 @@
+{
+ 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
new file mode 100644
index 0000000..343c6cd
--- /dev/null
+++ b/modules/programs/gdm.nix
@@ -0,0 +1,33 @@
+{
+ 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
new file mode 100644
index 0000000..57c1623
--- /dev/null
+++ b/modules/programs/git.nix
@@ -0,0 +1,64 @@
+{
+ 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
new file mode 100644
index 0000000..faf2b1e
--- /dev/null
+++ b/modules/programs/gnome.nix
@@ -0,0 +1,77 @@
+{
+ 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
new file mode 100644
index 0000000..29bdea8
--- /dev/null
+++ b/modules/programs/gnomeServices.nix
@@ -0,0 +1,81 @@
+{
+ 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
new file mode 100644
index 0000000..023b462
--- /dev/null
+++ b/modules/programs/gpu.nix
@@ -0,0 +1,111 @@
+{
+ 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
new file mode 100644
index 0000000..fe3e455
--- /dev/null
+++ b/modules/programs/greetd.nix
@@ -0,0 +1,164 @@
+{
+ 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
new file mode 100644
index 0000000..6a995f0
--- /dev/null
+++ b/modules/programs/homePackages.nix
@@ -0,0 +1,154 @@
+{
+ 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
new file mode 100644
index 0000000..68b88ea
--- /dev/null
+++ b/modules/programs/hypr/default.nix
@@ -0,0 +1,7 @@
+{
+ imports = [
+ ./hyprland.nix
+ ./hyprlock.nix
+ ./hyprpaper.nix
+ ];
+}
diff --git a/modules/programs/hypr/hyprland.nix b/modules/programs/hypr/hyprland.nix
new file mode 100644
index 0000000..442b964
--- /dev/null
+++ b/modules/programs/hypr/hyprland.nix
@@ -0,0 +1,357 @@
+{
+ 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
new file mode 100644
index 0000000..c152b22
--- /dev/null
+++ b/modules/programs/hypr/hyprlock.nix
@@ -0,0 +1,69 @@
+{
+ 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
new file mode 100644
index 0000000..b392b54
--- /dev/null
+++ b/modules/programs/hypr/hyprpaper.nix
@@ -0,0 +1,36 @@
+{
+ 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
new file mode 100644
index 0000000..b955d51
--- /dev/null
+++ b/modules/programs/ironbar.nix
@@ -0,0 +1,552 @@
+{
+ 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
new file mode 100644
index 0000000..f81194d
--- /dev/null
+++ b/modules/programs/kde.nix
@@ -0,0 +1,22 @@
+{
+ 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
new file mode 100644
index 0000000..46b12e8
--- /dev/null
+++ b/modules/programs/kdeConnect.nix
@@ -0,0 +1,42 @@
+{
+ 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
new file mode 100644
index 0000000..d8c0c6a
--- /dev/null
+++ b/modules/programs/keepassxc.nix
@@ -0,0 +1,75 @@
+{
+ 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
new file mode 100644
index 0000000..ab2ae5a
--- /dev/null
+++ b/modules/programs/kitty.nix
@@ -0,0 +1,129 @@
+{
+ 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
new file mode 100644
index 0000000..c37d62b
--- /dev/null
+++ b/modules/programs/media.nix
@@ -0,0 +1,123 @@
+{
+ 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
new file mode 100644
index 0000000..4da7aff
--- /dev/null
+++ b/modules/programs/mime.nix
@@ -0,0 +1,161 @@
+# 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
new file mode 100644
index 0000000..b998942
--- /dev/null
+++ b/modules/programs/ncspot.nix
@@ -0,0 +1,64 @@
+{
+ 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
new file mode 100644
index 0000000..31216ee
--- /dev/null
+++ b/modules/programs/nextcloud.nix
@@ -0,0 +1,38 @@
+{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
new file mode 100644
index 0000000..0531829
--- /dev/null
+++ b/modules/programs/niri.nix
@@ -0,0 +1,392 @@
+{
+ 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
new file mode 100644
index 0000000..56bd79d
--- /dev/null
+++ b/modules/programs/onedrive.nix
@@ -0,0 +1,24 @@
+{
+ 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
new file mode 100644
index 0000000..83c4f23
--- /dev/null
+++ b/modules/programs/oxi/default.nix
@@ -0,0 +1,81 @@
+{
+ 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
new file mode 100644
index 0000000..9ea519e
--- /dev/null
+++ b/modules/programs/oxi/oxidash.nix
@@ -0,0 +1,79 @@
+{
+ 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
new file mode 100644
index 0000000..d265af3
--- /dev/null
+++ b/modules/programs/oxi/oxinoti.nix
@@ -0,0 +1,129 @@
+{
+ 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
new file mode 100644
index 0000000..4ec7b1d
--- /dev/null
+++ b/modules/programs/oxi/oxipaste.nix
@@ -0,0 +1,48 @@
+{
+ 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
new file mode 100644
index 0000000..55f4d75
--- /dev/null
+++ b/modules/programs/oxi/oxirun.nix
@@ -0,0 +1,20 @@
+{
+ 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
new file mode 100644
index 0000000..25ebe0b
--- /dev/null
+++ b/modules/programs/oxi/oxishut.nix
@@ -0,0 +1,42 @@
+{
+ 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
new file mode 100644
index 0000000..24beced
--- /dev/null
+++ b/modules/programs/piper.nix
@@ -0,0 +1,20 @@
+{
+ 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
new file mode 100644
index 0000000..af9c615
--- /dev/null
+++ b/modules/programs/plymouth.nix
@@ -0,0 +1,18 @@
+{
+ 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
new file mode 100644
index 0000000..98bbe4f
--- /dev/null
+++ b/modules/programs/printing.nix
@@ -0,0 +1,38 @@
+{
+ 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
new file mode 100644
index 0000000..98eb26b
--- /dev/null
+++ b/modules/programs/scripts.nix
@@ -0,0 +1,123 @@
+{
+ 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
new file mode 100644
index 0000000..57328d4
--- /dev/null
+++ b/modules/programs/sddm.nix
@@ -0,0 +1,43 @@
+{
+ 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
new file mode 100644
index 0000000..5897eaa
--- /dev/null
+++ b/modules/programs/sops.nix
@@ -0,0 +1,61 @@
+{
+ 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
new file mode 100644
index 0000000..de86504
--- /dev/null
+++ b/modules/programs/starship.nix
@@ -0,0 +1,175 @@
+{
+ 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
new file mode 100644
index 0000000..544367f
--- /dev/null
+++ b/modules/programs/streamcontroller.nix
@@ -0,0 +1,39 @@
+{
+ 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
new file mode 100644
index 0000000..dd11e8c
--- /dev/null
+++ b/modules/programs/stylix.nix
@@ -0,0 +1,131 @@
+{
+ 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
new file mode 100644
index 0000000..f031e2f
--- /dev/null
+++ b/modules/programs/superfreq.nix
@@ -0,0 +1,28 @@
+{
+ 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
new file mode 100644
index 0000000..3b732df
--- /dev/null
+++ b/modules/programs/supersonic.nix
@@ -0,0 +1,73 @@
+{
+ 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
new file mode 100644
index 0000000..eef6025
--- /dev/null
+++ b/modules/programs/sway.nix
@@ -0,0 +1,30 @@
+{
+ 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
new file mode 100644
index 0000000..e9d843a
--- /dev/null
+++ b/modules/programs/teams.nix
@@ -0,0 +1,38 @@
+{
+ 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
new file mode 100644
index 0000000..de38848
--- /dev/null
+++ b/modules/programs/virtmanager.nix
@@ -0,0 +1,67 @@
+{
+ 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
new file mode 100644
index 0000000..0f794d3
--- /dev/null
+++ b/modules/programs/wm.nix
@@ -0,0 +1,403 @@
+{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
new file mode 100644
index 0000000..ebb1bda
--- /dev/null
+++ b/modules/programs/xkb.nix
@@ -0,0 +1,28 @@
+{
+ 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
new file mode 100644
index 0000000..84ecd48
--- /dev/null
+++ b/modules/programs/xone.nix
@@ -0,0 +1,19 @@
+{
+ 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
new file mode 100644
index 0000000..d890a81
--- /dev/null
+++ b/modules/programs/yazi/default.nix
@@ -0,0 +1,62 @@
+{
+ 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
new file mode 100644
index 0000000..22e3169
--- /dev/null
+++ b/modules/programs/yazi/yazi.nix
@@ -0,0 +1,1016 @@
+{
+ # 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/base/base_packages.nix b/nix/base/base_packages.nix
deleted file mode 100644
index ebde6aa..0000000
--- a/nix/base/base_packages.nix
+++ /dev/null
@@ -1,78 +0,0 @@
-{ config, pkgs, ... }:
-{
- 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
- gnome.adwaita-icon-theme
- hicolor-icon-theme
- morewaita-icon-theme
- kdePackages.breeze-icons
- gnome.seahorse
- upower
- ];
-
- gtk.iconCache.enable = false;
-
- fonts.packages = with pkgs; [
- cantarell-fonts
- ];
-
- nix.settings.experimental-features = "nix-command flakes";
- 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
- ];
- virtualisation.docker.enable = true;
-
- programs.dconf.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;
- };
- # services.xserver.desktopManager.gnome.extraGSettingsOverrides = ''
- # [org.gnome.desktop.interface]
- # gtk-theme='adw-gtk3'
- # cursor-theme='Bibata-Modern-Classsic'
- # cursor-size=24
- # '';
-
- programs.direnv = {
- package = pkgs.direnv;
- silent = false;
- loadInNixShell = true;
- direnvrcExtra = "";
- nix-direnv = {
- enable = true;
- package = pkgs.nix-direnv;
- };
- };
- programs.ssh.startAgent = true;
-
-}
diff --git a/nix/base/big_g.nix b/nix/base/big_g.nix
deleted file mode 100644
index f5cc767..0000000
--- a/nix/base/big_g.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ 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/nix/base/common_hardware.nix b/nix/base/common_hardware.nix
deleted file mode 100644
index d514dc0..0000000
--- a/nix/base/common_hardware.nix
+++ /dev/null
@@ -1,102 +0,0 @@
-{ pkgs, config, ... }:
-{
- # 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;
-
- # Enable sound with pipewire.
- sound.enable = true;
- 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 = [
- "dashie"
- ];
-
- # allows user change later on
- users.mutableUsers = true;
- users.users.dashie = {
- isNormalUser = true;
- description = "dashie";
- extraGroups = [ "networkmanager" "wheel" "gamemode" "docker" ];
- 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";
- boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
-
- 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"; }];
-
- boot.kernelParams = [
- "resume=\"PARTLABEL=SWAP\""
- ] ++ config.programs.boot.boot_params;
-}
diff --git a/nix/base/env.nix b/nix/base/env.nix
deleted file mode 100644
index 5166603..0000000
--- a/nix/base/env.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{ pkgs
-, ...
-}: {
- 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";
- };
-}
diff --git a/nix/base/login_manager.nix b/nix/base/login_manager.nix
deleted file mode 100644
index 34d3280..0000000
--- a/nix/base/login_manager.nix
+++ /dev/null
@@ -1,65 +0,0 @@
-{ inputs
-, lib
-, config
-, pkgs
-, ...
-}:
-let
- regreet_override = pkgs.greetd.regreet.overrideAttrs (final: prev: {
- SESSION_DIRS = "${config.services.xserver.displayManager.sessionData.desktops}/share";
- });
- session = {
- command = "${lib.getExe pkgs.hyprland} --config /etc/greetd/hyprgreet.conf";
- user = "dashie";
- };
-in
-{
- imports = [
- inputs.hyprland.nixosModules.default
- ];
-
- 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.programs.ironbar.monitor},3440x1440@180,0x0,1
- monitor=_,disable
-
- input {
- force_no_accel = true
- }
-
- misc {
- disable_splash_rendering = true
- disable_hyprland_logo = true
- }
-
- exec-once=regreet --style /home/dashie/.config/gtk-3.0/gtk.css; hyprctl dispatch exit
- '';
-
- # unlock GPG keyring on login
- security.pam.services.greetd.enableGnomeKeyring = true;
-}
diff --git a/nix/flake.lock b/nix/flake.lock
deleted file mode 100644
index 42051be..0000000
--- a/nix/flake.lock
+++ /dev/null
@@ -1,636 +0,0 @@
-{
- "nodes": {
- "Hyprspace": {
- "inputs": {
- "hyprland": [
- "hyprland"
- ]
- },
- "locked": {
- "lastModified": 1715376791,
- "narHash": "sha256-QKecFhWAB7sagSE+FXztINDqYqLro2nYp94f+ZtE/f4=",
- "owner": "KZDKM",
- "repo": "Hyprspace",
- "rev": "8049b2794ca19d49320093426677d8c2911e7327",
- "type": "github"
- },
- "original": {
- "owner": "KZDKM",
- "repo": "Hyprspace",
- "type": "github"
- }
- },
- "anyrun": {
- "inputs": {
- "flake-parts": "flake-parts",
- "nixpkgs": "nixpkgs"
- },
- "locked": {
- "lastModified": 1713259062,
- "narHash": "sha256-WTO84hUL8IlNuHDK2yOCeJ38EewFzGt5E0kzBjNWxa8=",
- "owner": "Kirottu",
- "repo": "anyrun",
- "rev": "f9d30e34fa4ccb2797c6becec37e8bcff6585d39",
- "type": "github"
- },
- "original": {
- "owner": "Kirottu",
- "repo": "anyrun",
- "type": "github"
- }
- },
- "crane": {
- "inputs": {
- "nixpkgs": [
- "ironbar",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1713979152,
- "narHash": "sha256-apdecPuh8SOQnkEET/kW/UcfjCRb8JbV5BKjoH+DcP4=",
- "owner": "ipetkov",
- "repo": "crane",
- "rev": "a5eca68a2cf11adb32787fc141cddd29ac8eb79c",
- "type": "github"
- },
- "original": {
- "owner": "ipetkov",
- "repo": "crane",
- "type": "github"
- }
- },
- "flake-parts": {
- "inputs": {
- "nixpkgs-lib": [
- "anyrun",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1696343447,
- "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "flake-utils": {
- "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_2": {
- "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"
- }
- },
- "home-manager": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1715380449,
- "narHash": "sha256-716+f9Rj3wjSyD1xitCv2FcYbgPz1WIVDj+ZBclH99Y=",
- "owner": "nix-community",
- "repo": "home-manager",
- "rev": "d7682620185f213df384c363288093b486b2883f",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "home-manager",
- "type": "github"
- }
- },
- "hyprcursor": {
- "inputs": {
- "hyprlang": [
- "hyprland",
- "hyprlang"
- ],
- "nixpkgs": [
- "hyprland",
- "nixpkgs"
- ],
- "systems": [
- "hyprland",
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1713612213,
- "narHash": "sha256-zJboXgWNpNhKyNF8H/3UYzWkx7w00TOCGKi3cwi+tsw=",
- "owner": "hyprwm",
- "repo": "hyprcursor",
- "rev": "cab4746180f210a3c1dd3d53e45c510e309e90e1",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprcursor",
- "type": "github"
- }
- },
- "hyprland": {
- "inputs": {
- "hyprcursor": "hyprcursor",
- "hyprlang": "hyprlang",
- "hyprwayland-scanner": "hyprwayland-scanner",
- "nixpkgs": "nixpkgs_2",
- "systems": "systems",
- "xdph": "xdph"
- },
- "locked": {
- "lastModified": 1715448710,
- "narHash": "sha256-ntVaQOHnfejEiqHUY07kWrytdXVlXtg1RLv65T9w2/c=",
- "ref": "refs/heads/main",
- "rev": "494b9415a1157279a1e1782ba635fc2ef6a18155",
- "revCount": 4668,
- "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": 1691753796,
- "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
- "owner": "hyprwm",
- "repo": "hyprland-protocols",
- "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprland-protocols",
- "type": "github"
- }
- },
- "hyprlang": {
- "inputs": {
- "nixpkgs": [
- "hyprland",
- "nixpkgs"
- ],
- "systems": [
- "hyprland",
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1713121246,
- "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=",
- "owner": "hyprwm",
- "repo": "hyprlang",
- "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprlang",
- "type": "github"
- }
- },
- "hyprlang_2": {
- "inputs": {
- "nixpkgs": [
- "hyprlock",
- "nixpkgs"
- ],
- "systems": "systems_2"
- },
- "locked": {
- "lastModified": 1713121246,
- "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=",
- "owner": "hyprwm",
- "repo": "hyprlang",
- "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprlang",
- "type": "github"
- }
- },
- "hyprlock": {
- "inputs": {
- "hyprlang": "hyprlang_2",
- "nixpkgs": "nixpkgs_3",
- "systems": "systems_3"
- },
- "locked": {
- "lastModified": 1714843107,
- "narHash": "sha256-89WxndRGO3CGuWE5XCaHKnsV3IKBRdOWqScp6o8enT4=",
- "owner": "hyprwm",
- "repo": "hyprlock",
- "rev": "c87af3aa1f6e6bd06cffaabcc400bd45e26d565a",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprlock",
- "type": "github"
- }
- },
- "hyprwayland-scanner": {
- "inputs": {
- "nixpkgs": [
- "hyprland",
- "nixpkgs"
- ],
- "systems": [
- "hyprland",
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1715287423,
- "narHash": "sha256-B7AJIjOyWgVMKhu7DlOnWa0VprdhywUVHuB/j+EwSxM=",
- "owner": "hyprwm",
- "repo": "hyprwayland-scanner",
- "rev": "e2fc1c0eb8b392110588f478cce644348ead7271",
- "type": "github"
- },
- "original": {
- "owner": "hyprwm",
- "repo": "hyprwayland-scanner",
- "type": "github"
- }
- },
- "ironbar": {
- "inputs": {
- "crane": "crane",
- "naersk": "naersk",
- "nixpkgs": "nixpkgs_5",
- "rust-overlay": "rust-overlay"
- },
- "locked": {
- "lastModified": 1715272723,
- "narHash": "sha256-/pHq16sUYKOpwtSDDlnQ3M3lBy9abQq39UNSzadFd8w=",
- "owner": "JakeStanger",
- "repo": "ironbar",
- "rev": "386955c1ea07869277b646c203f7b976d83db427",
- "type": "github"
- },
- "original": {
- "owner": "JakeStanger",
- "repo": "ironbar",
- "type": "github"
- }
- },
- "naersk": {
- "inputs": {
- "nixpkgs": "nixpkgs_4"
- },
- "locked": {
- "lastModified": 1713520724,
- "narHash": "sha256-CO8MmVDmqZX2FovL75pu5BvwhW+Vugc7Q6ze7Hj8heI=",
- "owner": "nix-community",
- "repo": "naersk",
- "rev": "c5037590290c6c7dae2e42e7da1e247e54ed2d49",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "naersk",
- "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": 1696193975,
- "narHash": "sha256-mnQjUcYgp9Guu3RNVAB2Srr1TqKcPpRXmJf4LJk6KRY=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "fdd898f8f79e8d2f99ed2ab6b3751811ef683242",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_2": {
- "locked": {
- "lastModified": 1715087517,
- "narHash": "sha256-CLU5Tsg24Ke4+7sH8azHWXKd0CFd4mhLWfhYgUiDBpQ=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "b211b392b8486ee79df6cdfb1157ad2133427a29",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_3": {
- "locked": {
- "lastModified": 1715266358,
- "narHash": "sha256-doPgfj+7FFe9rfzWo1siAV2mVCasW+Bh8I1cToAXEE4=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "f1010e0469db743d14519a1efd37e23f8513d714",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_4": {
- "locked": {
- "lastModified": 1714314149,
- "narHash": "sha256-yNAevSKF4krRWacmLUsLK7D7PlfuY3zF0lYnGYNi9vQ=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "cf8cc1201be8bc71b7cbbbdaf349b22f4f99c7ae",
- "type": "github"
- },
- "original": {
- "id": "nixpkgs",
- "type": "indirect"
- }
- },
- "nixpkgs_5": {
- "locked": {
- "lastModified": 1714253743,
- "narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=",
- "owner": "nixos",
- "repo": "nixpkgs",
- "rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994",
- "type": "github"
- },
- "original": {
- "owner": "nixos",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_6": {
- "locked": {
- "lastModified": 1715266358,
- "narHash": "sha256-doPgfj+7FFe9rfzWo1siAV2mVCasW+Bh8I1cToAXEE4=",
- "owner": "NixOs",
- "repo": "nixpkgs",
- "rev": "f1010e0469db743d14519a1efd37e23f8513d714",
- "type": "github"
- },
- "original": {
- "owner": "NixOs",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_7": {
- "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"
- }
- },
- "root": {
- "inputs": {
- "Hyprspace": "Hyprspace",
- "anyrun": "anyrun",
- "home-manager": "home-manager",
- "hyprland": "hyprland",
- "hyprlock": "hyprlock",
- "ironbar": "ironbar",
- "nix-flatpak": "nix-flatpak",
- "nixpkgs": "nixpkgs_6",
- "rust-overlay": "rust-overlay_2"
- }
- },
- "rust-overlay": {
- "inputs": {
- "flake-utils": "flake-utils",
- "nixpkgs": [
- "ironbar",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1714443211,
- "narHash": "sha256-lKTA3XqRo4aVgkyTSCtpcALpGXdmkilHTtN00eRg0QU=",
- "owner": "oxalica",
- "repo": "rust-overlay",
- "rev": "ce35c36f58f82cee6ec959e0d44c587d64281b6f",
- "type": "github"
- },
- "original": {
- "owner": "oxalica",
- "repo": "rust-overlay",
- "type": "github"
- }
- },
- "rust-overlay_2": {
- "inputs": {
- "flake-utils": "flake-utils_2",
- "nixpkgs": "nixpkgs_7"
- },
- "locked": {
- "lastModified": 1715393623,
- "narHash": "sha256-nSUFcUqyTQQ/aYFIB05mpCzytcKvfKMy3ZQAe0fP26A=",
- "type": "tarball",
- "url": "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"
- },
- "original": {
- "type": "tarball",
- "url": "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"
- }
- },
- "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_2": {
- "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_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"
- }
- },
- "xdph": {
- "inputs": {
- "hyprland-protocols": "hyprland-protocols",
- "hyprlang": [
- "hyprland",
- "hyprlang"
- ],
- "nixpkgs": [
- "hyprland",
- "nixpkgs"
- ],
- "systems": [
- "hyprland",
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1714662532,
- "narHash": "sha256-Pj2xGSYhapYbXL7sk7TTlOtCZcTfPQoL3fPbZeg7L4Y=",
- "owner": "hyprwm",
- "repo": "xdg-desktop-portal-hyprland",
- "rev": "1f228ba2f1f254195c0b571302b37482861abee3",
- "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
deleted file mode 100644
index 58f47c2..0000000
--- a/nix/flake.nix
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- 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";
- };
-
- hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
-
- hyprlock.url = "github:hyprwm/hyprlock";
-
- Hyprspace = {
- url = "github:KZDKM/Hyprspace";
- inputs.hyprland.follows = "hyprland";
- };
-
- ironbar = {
- url = "github:JakeStanger/ironbar";
- };
-
- rust-overlay = {
- url = "https://github.com/oxalica/rust-overlay/archive/master.tar.gz";
- };
-
- anyrun.url = "github:Kirottu/anyrun";
- };
-
- outputs = { ... }@inputs:
- let
- pkgs = import inputs.nixpkgs {
- system = "x86_64-linux";
- config = {
- allowUnfree = true;
- };
- overlays = [
- # because allowing rust nightly is too hard by default....
- (import
- inputs.rust-overlay
- )
- ];
- };
- base_imports = [
- inputs.home-manager.nixosModules.home-manager
- ./base/default.nix
- ./programs
- ];
- in
- {
- nixosConfigurations."marmo" = inputs.nixpkgs.lib.nixosSystem {
- specialArgs = {
- inherit inputs pkgs;
- mod = ./hardware/marmo/base_config.nix;
- };
- modules = [
- ./hardware/marmo/default.nix
- ./programs/gaming/default.nix
- ] ++ base_imports;
- };
- nixosConfigurations."overheating" = inputs.nixpkgs.lib.nixosSystem {
- specialArgs = {
- inherit inputs pkgs;
- mod = ./hardware/overheating/base_config.nix;
- };
- modules = [
- ./hardware/overheating/default.nix
- ] ++ base_imports;
- };
- nixosConfigurations."spaceship" = inputs.nixpkgs.lib.nixosSystem {
- specialArgs = {
- inherit inputs pkgs;
- mod = ./hardware/spaceship/base_config.nix;
- };
- modules = [
- ./hardware/spaceship/default.nix
- ./hardware/streamdeck.nix
- ./programs/gaming/default.nix
- ] ++ base_imports;
- };
- };
-
- 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/base_config.nix b/nix/hardware/marmo/base_config.nix
deleted file mode 100644
index 2276588..0000000
--- a/nix/hardware/marmo/base_config.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- imports = [
- ../../modules
- ];
- wayland.windowManager.hyprland.settings.monitor = [
- # default
- "DP-1,1920x1080@144,0x0,1"
- # all others
- ",highrr,auto,1"
- ];
- programs.ironbar.monitor = "DP-1";
-}
diff --git a/nix/hardware/marmo/configuration.nix b/nix/hardware/marmo/configuration.nix
deleted file mode 100644
index 89ca0f6..0000000
--- a/nix/hardware/marmo/configuration.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{ pkgs, ... }:
-{
- imports = [
- ../../modules/gamemode.nix
- ../../modules/boot_params.nix
- ];
- boot.kernelPackages = pkgs.linuxPackages_zen;
- programs.boot.boot_params = [
- "amdgpu.ppfeaturemask=0xffffffff"
- ];
- networking.hostName = "marmo";
- programs.gamemode = {
- device = 1;
- };
-}
diff --git a/nix/hardware/marmo/default.nix b/nix/hardware/marmo/default.nix
deleted file mode 100644
index 2e9bfbc..0000000
--- a/nix/hardware/marmo/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- imports = [
- ./marmo.nix
- ./configuration.nix
- ];
-}
diff --git a/nix/hardware/marmo/marmo.nix b/nix/hardware/marmo/marmo.nix
deleted file mode 100644
index 3969c18..0000000
--- a/nix/hardware/marmo/marmo.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ config, lib, modulesPath, ... }:
-{
- imports =
- [
- (modulesPath + "/installer/scan/not-detected.nix")
- ];
-
- boot.initrd.kernelModules = [ ];
- boot.extraModulePackages = [ ];
-
- # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
- # (the default) this is the recommended approach. When using systemd-networkd it's
- # still possible to use this option, but it's recommended to use it in conjunction
- # with explicit per-interface declarations with `networking.interfaces..useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp15s0.useDHCP = lib.mkDefault true;
- # networking.interfaces.wlp16s0.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
- hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
- services.fstrim.enable = lib.mkDefault true;
- nix.settings.auto-optimise-store = true;
-}
diff --git a/nix/hardware/overheating/base_config.nix b/nix/hardware/overheating/base_config.nix
deleted file mode 100644
index ee120c7..0000000
--- a/nix/hardware/overheating/base_config.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- imports = [
- ../../modules
- ];
- wayland.windowManager.hyprland.settings.monitor = [
- # default
- "eDP-1,2944x1840@90,0x0,2"
-
- # all others
- ",highrr,auto,1"
- ];
- programs.ironbar.monitor = "eDP-1";
- programs.ironbar.battery = [
- { type = "upower"; class = "memory-usage"; }
- ];
-}
diff --git a/nix/hardware/overheating/configuration.nix b/nix/hardware/overheating/configuration.nix
deleted file mode 100644
index bf150ce..0000000
--- a/nix/hardware/overheating/configuration.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ pkgs, ... }:
-{
- boot.kernelPackages = pkgs.linuxPackages_latest;
- networking.hostName = "overheating";
-}
diff --git a/nix/hardware/overheating/default.nix b/nix/hardware/overheating/default.nix
deleted file mode 100644
index 3091cdc..0000000
--- a/nix/hardware/overheating/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- imports = [
- ./overheating.nix
- ./configuration.nix
- ];
-}
diff --git a/nix/hardware/overheating/overheating.nix b/nix/hardware/overheating/overheating.nix
deleted file mode 100644
index e30f979..0000000
--- a/nix/hardware/overheating/overheating.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ config, lib, modulesPath, ... }:
-{
- imports =
- [
- (modulesPath + "/installer/scan/not-detected.nix")
- ];
-
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ "kvm-amd" ];
- boot.extraModulePackages = [ ];
-
- # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
- # (the default) this is the recommended approach. When using systemd-networkd it's
- # still possible to use this option, but it's recommended to use it in conjunction
- # with explicit per-interface declarations with `networking.interfaces..useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp15s0.useDHCP = lib.mkDefault true;
- # networking.interfaces.wlp16s0.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
- hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
- services.fstrim.enable = lib.mkDefault true;
- nix.settings.auto-optimise-store = true;
-}
diff --git a/nix/hardware/spaceship/base_config.nix b/nix/hardware/spaceship/base_config.nix
deleted file mode 100644
index da11987..0000000
--- a/nix/hardware/spaceship/base_config.nix
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- imports = [
- ../../modules
- ];
- wayland.windowManager.hyprland.settings.monitor = [
- # default
- "DP-2,2560x1440@165,0x0,1"
- "DP-1,3440x1440@180,2560x0,1"
- "HDMI-A-1,1920x1200@60,6000x0,1"
- "HDMI-A-1,transform,1"
-
- # all others
- ",highrr,auto,1"
- ];
- wayland.windowManager.hyprland.settings.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"
- ];
- programs.ironbar.monitor = "DP-1";
- programs.hyprland.hyprpaper = ''
- #load
- preload = /home/dashie/Pictures/backgrounds/shinobu_2k.jpg
- preload = /home/dashie/Pictures/backgrounds/shino_wide.png
- preload = /home/dashie/Pictures/backgrounds/shinobu_1200.jpg
-
- #set
- wallpaper = DP-2,/home/dashie/Pictures/backgrounds/shinobu_2k.jpg
- wallpaper = DP-1,/home/dashie/Pictures/backgrounds/shino_wide.png
- wallpaper = HDMI-A-1,/home/dashie/Pictures/backgrounds/shinobu_1200.jpg
- splash = true
- '';
- programs.hyprland.extra_autostart = [ "streamdeck -n" ];
-}
diff --git a/nix/hardware/spaceship/configuration.nix b/nix/hardware/spaceship/configuration.nix
deleted file mode 100644
index a13352f..0000000
--- a/nix/hardware/spaceship/configuration.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ pkgs, lib, ... }:
-{
- imports = [
- ../../modules/gamemode.nix
- ../../modules/boot_params.nix
- ../../modules/ironbar_config.nix
- ];
- boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
- programs.boot.boot_params = [
- "amdgpu.ppfeaturemask=0xffffffff"
- ];
- networking.hostName = "spaceship";
-
- programs.gamemode = {
- device = 0;
- };
- users.extraGroups.vboxusers.members = [ "dashie" ];
- virtualisation.virtualbox.host.enable = true;
-
- # enable hardware acceleration and rocm
- hardware.xone.enable = true;
- hardware.opengl.extraPackages = with pkgs; [
- libvdpau-va-gl
- vaapiVdpau
- rocmPackages.clr.icd
- rocm-opencl-runtime
- ];
- hardware.opengl = {
- enable = true;
- driSupport = lib.mkDefault true;
- driSupport32Bit = lib.mkDefault true;
- };
- boot.initrd.kernelModules = [ "amdgpu" ];
- programs.ironbar.monitor = "DP-1";
-}
diff --git a/nix/hardware/spaceship/default.nix b/nix/hardware/spaceship/default.nix
deleted file mode 100644
index 5ac7293..0000000
--- a/nix/hardware/spaceship/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- imports = [
- ./spaceship.nix
- ./configuration.nix
- ];
-}
diff --git a/nix/hardware/spaceship/spaceship.nix b/nix/hardware/spaceship/spaceship.nix
deleted file mode 100644
index 43ae303..0000000
--- a/nix/hardware/spaceship/spaceship.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ config, lib, modulesPath, ... }:
-{
- imports =
- [
- (modulesPath + "/installer/scan/not-detected.nix")
- ];
-
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ "kvm-amd" ];
- boot.extraModulePackages = [ ];
-
- fileSystems."/drive2" =
- {
- device = "/dev/disk/by-label/DRIVE2";
- fsType = "ext4";
- options = [
- "noatime"
- "nodiratime"
- "discard"
- ];
- };
-
- # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
- # (the default) this is the recommended approach. When using systemd-networkd it's
- # still possible to use this option, but it's recommended to use it in conjunction
- # with explicit per-interface declarations with `networking.interfaces..useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp15s0.useDHCP = lib.mkDefault true;
- # networking.interfaces.wlp16s0.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
- hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
- services.fstrim.enable = lib.mkDefault true;
- nix.settings.auto-optimise-store = true;
-}
diff --git a/nix/hardware/streamdeck.nix b/nix/hardware/streamdeck.nix
deleted file mode 100644
index c8a082f..0000000
--- a/nix/hardware/streamdeck.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- #programs.streamdeck-ui = {
- # enable = true;
- # autoStart = false; # optional
- #};
-}
diff --git a/nix/modules/boot_params.nix b/nix/modules/boot_params.nix
deleted file mode 100644
index 6df3ee5..0000000
--- a/nix/modules/boot_params.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ lib, ... }: {
- options.programs.boot = {
- boot_params = lib.mkOption {
- default = [ ];
- example = [ "resume=something" ];
- description = ''
- Boot params
- '';
- };
- };
-}
diff --git a/nix/modules/default.nix b/nix/modules/default.nix
deleted file mode 100644
index 8c9ce42..0000000
--- a/nix/modules/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- imports = [
- ./ironbar_config.nix
- ./hyprpaper_config.nix
- ];
-}
diff --git a/nix/modules/gamemode.nix b/nix/modules/gamemode.nix
deleted file mode 100644
index 220dcef..0000000
--- a/nix/modules/gamemode.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ lib, ... }: {
- options.programs.gamemode = {
- device = lib.mkOption {
- default = 0;
- example = 0;
- description = ''
- GPU device number
- '';
- };
- };
-}
diff --git a/nix/modules/hyprpaper_config.nix b/nix/modules/hyprpaper_config.nix
deleted file mode 100644
index 3f9776c..0000000
--- a/nix/modules/hyprpaper_config.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ lib, ... }: {
- options.programs.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.
- '';
- };
- };
-}
diff --git a/nix/modules/ironbar_config.nix b/nix/modules/ironbar_config.nix
deleted file mode 100644
index f77886c..0000000
--- a/nix/modules/ironbar_config.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ lib, ... }: {
- options.programs.ironbar = {
- monitor = lib.mkOption {
- default = "";
- example = "eDP-1";
- type = lib.types.str;
- description = ''
- Extra settings for foo.
- '';
- };
-
- battery = lib.mkOption {
- default = [];
- example = [];
- };
- };
-}
diff --git a/nix/override/cambalache.nix b/nix/override/cambalache.nix
deleted file mode 100644
index 7b119fb..0000000
--- a/nix/override/cambalache.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ 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/default.nix b/nix/override/default.nix
deleted file mode 100644
index b34cd63..0000000
--- a/nix/override/default.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-#{pkgs, ...}:{
-# hello = pkgs.callPackage ./ncspot.nix;
-#}
-{ }
diff --git a/nix/override/ncspot.nix b/nix/override/ncspot.nix
deleted file mode 100644
index 837a7ed..0000000
--- a/nix/override/ncspot.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-{ pkgs
-, stdenv
-, lib
-, fetchFromGitHub
-, rustPlatform
-, withALSA ? false
-, withClipboard ? true
-, withCover ? false
-, withPulseAudio ? true
-, withPortAudio ? false
-, withMPRIS ? true
-, withNotify ? true
-, withCross ? true
-, nix-update-script
-, testers
-, ncspot
-}:
-
-rustPlatform.buildRustPackage rec {
- pname = "ncspot";
- version = "1.1.0";
-
- src = fetchFromGitHub {
- owner = "hrkfdn";
- repo = "ncspot";
- rev = "v${version}";
- hash = "sha256-RgA3jV/vD6qgIVQCZ0Sm+9CST4SlqN4MUurVM3nIdh0=";
- };
-
- cargoHash = "sha256-8ZUgm1O4NmZpxgNRKnh1MNhiFNoBWQHo22kyP3hWJwI=";
-
- nativeBuildInputs = [ pkgs.pkg-config ]
- ++ lib.optional withClipboard pkgs.python3;
-
- buildInputs = [ pkgs.ncurses ]
- ++ lib.optional stdenv.isLinux pkgs.openssl
- ++ lib.optional withALSA pkgs.alsa-lib
- ++ lib.optional withClipboard pkgs.xorg.libxcb
- ++ lib.optional withCover pkgs.ueberzug
- ++ lib.optional withPulseAudio pkgs.libpulseaudio
- ++ lib.optional withPortAudio pkgs.portaudio
- ++ lib.optional (withMPRIS || withNotify) pkgs.dbus
- ++ lib.optional stdenv.isDarwin pkgs.Cocoa;
-
- env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-DNCURSES_UNCTRL_H_incl";
-
- buildNoDefaultFeatures = true;
-
- buildFeatures = [ "cursive/pancurses-backend" ]
- ++ lib.optional withALSA "alsa_backend"
- ++ lib.optional withClipboard "share_clipboard"
- ++ lib.optional withCover "cover"
- ++ lib.optional withPulseAudio "pulseaudio_backend"
- ++ lib.optional withPortAudio "portaudio_backend"
- ++ lib.optional withMPRIS "mpris"
- ++ lib.optional withCross "crossterm_backend"
- ++ lib.optional withNotify "notify";
-
- postInstall = ''
- install -D --mode=444 $src/misc/ncspot.desktop $out/share/applications/${pname}.desktop
- install -D --mode=444 $src/images/logo.svg $out/share/icons/hicolor/scalable/apps/${pname}.png
- '';
-
- passthru = {
- updateScript = nix-update-script { };
- tests.version = testers.testVersion { package = ncspot; };
- };
-
- meta = with lib; {
- description = "Cross-platform ncurses Spotify client written in Rust, inspired by ncmpc and the likes";
- homepage = "https://github.com/hrkfdn/ncspot";
- changelog = "https://github.com/hrkfdn/ncspot/releases/tag/v${version}";
- license = licenses.bsd2;
- maintainers = with maintainers; [ marsam liff ];
- mainProgram = "ncspot";
- };
-}
diff --git a/nix/override/oxicalc.nix b/nix/override/oxicalc.nix
deleted file mode 100644
index 7f4e20c..0000000
--- a/nix/override/oxicalc.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{ pkgs
-, lib
-, fetchFromGitHub
-}:
-let
- toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal);
- rustPlatform = pkgs.makeRustPlatform {
- cargo = toolchain;
- rustc = toolchain;
- };
-in
-rustPlatform.buildRustPackage rec {
- pname = "oxicalc";
- version = "0.2.4";
-
- src = fetchFromGitHub {
- owner = "DashieTM";
- repo = "OxiCalc";
- rev = "${version}";
- hash = "sha256-7qrnA0jnLg2mckpxCe66+axU3jE6nOBu7HefmP8I2Xc=";
- };
-
- cargoHash = "sha256-nxLXT9SVorsgj7qzwX8Ipx8SDvyTYMAcpepTg62QL7o=";
-
- nativeBuildInputs = with pkgs;[
- pkg-config
- wrapGAppsHook4
- ];
-
- buildInputs = with pkgs;[
- gtk4
- libadwaita
- ];
-
- postInstall = ''
- install -D --mode=444 $src/${pname}.desktop $out/share/applications/${pname}.desktop
- install -D --mode=444 $src/${pname}.svg $out/share/pixmaps/${pname}.svg
- '';
-
- meta = with lib; {
- description = "A small, simple calculator written in rust/gtk4";
- homepage = "https://github.com/DashieTM/OxiCalc";
- changelog = "https://github.com/DashieTM/OxiCalc/releases/tag/${version}";
- license = licenses.gpl3;
- maintainers = with maintainers; [ DashieTM ];
- mainProgram = "oxicalc";
- };
-}
diff --git a/nix/override/oxidash.nix b/nix/override/oxidash.nix
deleted file mode 100644
index 60b78a1..0000000
--- a/nix/override/oxidash.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-{ pkgs
-, lib
-, fetchFromGitHub
-}:
-let
- toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal);
- rustPlatform = pkgs.makeRustPlatform {
- cargo = toolchain;
- rustc = toolchain;
- };
-in
-rustPlatform.buildRustPackage rec {
- pname = "oxidash";
- version = "1.0";
-
- src = fetchFromGitHub {
- owner = "DashieTM";
- repo = "OxiDash";
- rev = "${version}";
- hash = "sha256-GVkmqwn3mHriMHUfEej4LW0MaYURqtsftC5L+Cox+5E=";
- };
-
- cargoHash = "sha256-seFHiBht0vc+iqQw5bd22qVvdhCMqDthWuth3NTm8OY=";
-
- nativeBuildInputs = with pkgs;[
- pkg-config
- glib
- wrapGAppsHook4
- ];
-
- buildInputs = with pkgs;[
- dbus
- gtk4
- gtk4-layer-shell
- libadwaita
- ];
-
- meta = with lib; {
- description = "A work in progress notification daemon made with rust and gtk.";
- homepage = "https://github.com/DashieTM/OxiDash";
- changelog = "https://github.com/DashieTM/OxiDash/releases/tag/${version}";
- license = licenses.gpl3;
- maintainers = with maintainers; [ DashieTM ];
- mainProgram = "oxidash";
- };
-}
diff --git a/nix/override/oxinoti.nix b/nix/override/oxinoti.nix
deleted file mode 100644
index 30c76b2..0000000
--- a/nix/override/oxinoti.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ pkgs
-, lib
-, fetchFromGitHub
-}:
-let
- toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal);
- rustPlatform = pkgs.makeRustPlatform {
- cargo = toolchain;
- rustc = toolchain;
- };
-in
-rustPlatform.buildRustPackage rec {
- pname = "oxinoti";
- version = "1.0";
-
- src = fetchFromGitHub {
- owner = "DashieTM";
- repo = "OxiNoti";
- rev = "${version}";
- hash = "sha256-fsrtLb14mCuYb1ibJAzPCrPNXdlcU/J7ZGYoVfppFBM=";
- };
-
- cargoHash = "sha256-jIdev6K5MQ8jASDo1KWU89rSLd9UhI2MhTT4l7pP+tA=";
-
- nativeBuildInputs = with pkgs;[
- pkg-config
- wrapGAppsHook4
- ];
-
- buildInputs = with pkgs;[
- dbus
- gtk3
- gtk-layer-shell
- ];
-
- meta = with lib; {
- description = "A work in progress notification daemon made with rust and gtk.";
- homepage = "https://github.com/DashieTM/OxiNoti";
- changelog = "https://github.com/DashieTM/OxiNoti/releases/tag/${version}";
- license = licenses.gpl3;
- maintainers = with maintainers; [ DashieTM ];
- mainProgram = "oxinoti";
- };
-}
diff --git a/nix/override/oxipaste.nix b/nix/override/oxipaste.nix
deleted file mode 100644
index 463fe95..0000000
--- a/nix/override/oxipaste.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ pkgs
-, lib
-, fetchFromGitHub
-}:
-let
- toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal);
- rustPlatform = pkgs.makeRustPlatform {
- cargo = toolchain;
- rustc = toolchain;
- };
-in
-rustPlatform.buildRustPackage rec {
- pname = "oxipaste";
- version = "1.0";
-
- src = fetchFromGitHub {
- owner = "DashieTM";
- repo = "OxiPaste";
- rev = "${version}";
- hash = "sha256-2copt808b4cpmE8HO2H960xLs7OegvOUYYS/6z7fNMk=";
- };
-
- cargoHash = "sha256-RXaL5y0hohP9VJ7IJCEfdJjyxwY2l555xSwRa9ZiNKc=";
-
- nativeBuildInputs = with pkgs;[
- pkg-config
- wrapGAppsHook4
- ];
-
- buildInputs = with pkgs;[
- dbus
- gtk4
- libadwaita
- gtk4-layer-shell
- ];
-
- meta = with lib; {
- description = "A work in progress notification daemon made with rust and gtk.";
- homepage = "https://github.com/DashieTM/OxiPaste";
- changelog = "https://github.com/DashieTM/OxiPaste/releases/tag/${version}";
- license = licenses.gpl3;
- maintainers = with maintainers; [ DashieTM ];
- mainProgram = "oxipaste";
- };
-}
diff --git a/nix/override/oxishut.nix b/nix/override/oxishut.nix
deleted file mode 100644
index 98036bb..0000000
--- a/nix/override/oxishut.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ pkgs
-, lib
-, fetchFromGitHub
-}:
-let
- toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal);
- rustPlatform = pkgs.makeRustPlatform {
- cargo = toolchain;
- rustc = toolchain;
- };
-in
-rustPlatform.buildRustPackage rec {
- pname = "oxishut";
- version = "1.0";
-
- src = fetchFromGitHub {
- owner = "DashieTM";
- repo = "OxiShut";
- rev = "${version}";
- hash = "sha256-aCNnNxmIHq+IjjviWNGSHfdXT55s367GTAeQoaTZ/KA=";
- };
-
- cargoHash = "sha256-UeoBSHwMGfhkgRT7kmelcG3/omtB03Wh4IZrTy3yf3Y=";
-
- nativeBuildInputs = with pkgs;[
- pkg-config
- glib
- wrapGAppsHook4
- ];
-
- buildInputs = with pkgs;[
- gtk4
- libadwaita
- gtk4-layer-shell
- ];
-
- meta = with lib; {
- description = "";
- homepage = "https://github.com/DashieTM/OxiShut";
- changelog = "https://github.com/DashieTM/OxiShut/releases/tag/${version}";
- license = licenses.gpl3;
- maintainers = with maintainers; [ DashieTM ];
- mainProgram = "oxishut";
- };
-}
diff --git a/nix/override/reset.nix b/nix/override/reset.nix
deleted file mode 100644
index 50f4f83..0000000
--- a/nix/override/reset.nix
+++ /dev/null
@@ -1,53 +0,0 @@
-{ pkgs
-, lib
-, fetchFromGitHub
-}:
-let
- toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal);
- rustPlatform = pkgs.makeRustPlatform {
- cargo = toolchain;
- rustc = toolchain;
- };
-in
-rustPlatform.buildRustPackage rec {
- pname = "reset";
- version = "1.2.0";
-
- src = fetchFromGitHub {
- owner = "Xetibo";
- repo = "ReSet";
- rev = "${version}";
- hash = "sha256-6n7IaYQAw0VSkQFO1wXwQjuGbhvheiV6ZJDkpaEIeLU=";
- };
-
- cargoHash = "sha256-S3Z2tHQuv17Dvg2VMFDeOvDzyLfIPROcFMsYOoCscqM=";
-
- nativeBuildInputs = with pkgs;[
- pkg-config
- glib
- wrapGAppsHook4
- ];
-
- buildInputs = with pkgs;[
- gtk4
- libadwaita
- pulseaudio
- dbus
- gdk-pixbuf
- gnome.adwaita-icon-theme
- ];
-
- postInstall = ''
- install -D --mode=444 $src/${pname}.desktop $out/share/applications/${pname}.desktop
- install -D --mode=444 $src/src/resources/icons/ReSet.svg $out/share/pixmaps/ReSet.svg
- '';
-
- meta = with lib; {
- description = "";
- homepage = "https://github.com/Xetibo/ReSet";
- changelog = "https://github.com/Xetibo/ReSet/releases/tag/${version}";
- license = licenses.gpl3;
- maintainers = with maintainers; [ DashieTM ];
- mainProgram = "reset";
- };
-}
diff --git a/nix/override/streamdeck.nix b/nix/override/streamdeck.nix
deleted file mode 100644
index 705155f..0000000
--- a/nix/override/streamdeck.nix
+++ /dev/null
@@ -1,106 +0,0 @@
-{ 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
deleted file mode 100644
index 3c8cf05..0000000
--- a/nix/override/streamdeck.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 16edde3..0000000
--- a/nix/programs/coding.nix
+++ /dev/null
@@ -1,68 +0,0 @@
-{ pkgs
-, ...
-}:
-{
- imports = [
- ./nvim/default.nix
- ];
-
- home.packages = with pkgs; [
- #basics
- git
- gcc
- meson
- ninja
- tree-sitter
- unzip
- pkg-config
- sqlite
- plantuml
- d-spy
-
- #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
- typst-lsp
- typstfmt
- ltex-ls
-
- #java
- gradle
- maven
- jdt-language-server
- adoptopenjdk-jre-bin
-
- #.!
- dotnet-sdk_8
- omnisharp-roslyn
- csharpier
-
- #zig
- zig
- zls
- ];
-}
diff --git a/nix/programs/common.nix b/nix/programs/common.nix
deleted file mode 100644
index b4f59d3..0000000
--- a/nix/programs/common.nix
+++ /dev/null
@@ -1,113 +0,0 @@
-{ pkgs
-, lib
-, ...
-}:
-let callPackage = lib.callPackageWith (pkgs);
-in
-{
- manual = {
- html.enable = false;
- json.enable = false;
- manpages.enable = false;
- };
-
- fonts.fontconfig.enable = true;
- home.packages = with pkgs; [
- vesktop
- kitty
- firefox
- fish
- ripgrep
- rm-improved
- bat
- fd
- lsd
- (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
- flatpak
- networkmanager
- zoxide
- fastfetch
- pkgs.gnome.gnome-keyring
- dbus
- killall
- adw-gtk3
- qt5ct
- qt6ct
- gnutar
- fishPlugins.tide
- nix-index
- libnotify
- zenith
- nh
- amberol
- pulseaudio
- playerctl
- ncspot
- poppler_utils
- neofetch
- brave
- greetd.regreet
- (callPackage
- ../override/oxinoti.nix
- { })
- (callPackage
- ../override/oxidash.nix
- { })
- (callPackage
- ../override/oxicalc.nix
- { })
- (callPackage
- ../override/oxipaste.nix
- { })
- (callPackage
- ../override/oxishut.nix
- { })
- (callPackage
- ../override/streamdeck.nix
- { })
- (callPackage
- ../override/reset.nix
- { })
- (callPackage
- ../override/cambalache.nix
- { })
- ];
-
- home.username = "dashie";
- home.homeDirectory = "/home/dashie";
- 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;
- };
- home.sessionVariables =
- {
- FLAKE = "home/dasshie/gits/dotFiles/nix";
- };
-}
diff --git a/nix/programs/default.nix b/nix/programs/default.nix
deleted file mode 100644
index 1418c7b..0000000
--- a/nix/programs/default.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ inputs, pkgs, mod, ... }:
-let
- base_imports = [
- inputs.hyprland.homeManagerModules.default
- inputs.hyprlock.homeManagerModules.default
- inputs.anyrun.homeManagerModules.default
- inputs.ironbar.homeManagerModules.default
- inputs.nix-flatpak.homeManagerModules.nix-flatpak
- ];
-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.users.dashie = {
- #home-manager overlap -> use flake instead
- disabledModules = [ "programs/hyprlock.nix" ];
- imports = [
- {
- _module = { args = { inherit inputs; }; };
- }
- ./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
- mod
- ] ++ base_imports;
- };
-}
diff --git a/nix/programs/flatpak.nix b/nix/programs/flatpak.nix
deleted file mode 100644
index 4abc89d..0000000
--- a/nix/programs/flatpak.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ 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
deleted file mode 100644
index 5216390..0000000
--- a/nix/programs/gaming/default.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ pkgs
-, config
-, ...
-}: {
- imports = [
- # ./anyrun.nix
- # ./config.nix
- ];
-
- 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.programs.gamemode.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
deleted file mode 100644
index 08d78dc..0000000
--- a/nix/programs/hyprland/anyrun.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{ 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
deleted file mode 100644
index f3ab6b6..0000000
--- a/nix/programs/hyprland/config.nix
+++ /dev/null
@@ -1,261 +0,0 @@
-{ pkgs
-, inputs
-, config
-, ...
-}:
-{
- wayland.windowManager.hyprland.enable = true;
- wayland.windowManager.hyprland.settings = {
- "$mod" = "SUPER";
-
- 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,L,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" = "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 = {
- vrr = 1;
- 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;
- };
-
- 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)$"
- "forceinput,class:^(.*)(Pal)$"
- "forceinput,class:^(.*)(Battlefield 4)$"
- ];
-
- 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"
- # TODO: is this necessary?
- #"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
- "nextcloud --background"
- "oxinoti"
- ] ++ config.programs.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
deleted file mode 100644
index 6a444ca..0000000
--- a/nix/programs/hyprland/default.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ inputs
-, 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
- gnome.nautilus
- gnome.sushi
- wl-clipboard
- hyprcursor
- hyprpaper
- hyprpicker
- ];
-}
diff --git a/nix/programs/hyprland/hyprlock.nix b/nix/programs/hyprland/hyprlock.nix
deleted file mode 100644
index 99ed9d9..0000000
--- a/nix/programs/hyprland/hyprlock.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ pkgs
-, inputs
-, config
-, ...
-}:
-{
- programs.hyprlock.enable = true;
- programs.hyprlock = {
-
- backgrounds = [
- {
- monitor = "";
- path = "";
- color = "rgba(26, 27, 38, 1.0)";
- }
- ];
-
- input-fields = [
- {
- monitor = "${config.programs.ironbar.monitor}";
-
- placeholder_text = "password or something";
- }
- ];
-
- labels = [
- {
- monitor = "";
- text = "$TIME";
- font_size = 50;
- valign = "center";
- halign = "center";
- }
- ];
-
- };
-}
diff --git a/nix/programs/hyprland/hyprpaper.nix b/nix/programs/hyprland/hyprpaper.nix
deleted file mode 100644
index 8b93285..0000000
--- a/nix/programs/hyprland/hyprpaper.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ config, ... }: {
- xdg.configFile."hypr/hyprpaper.conf" = {
- text = config.programs.hyprland.hyprpaper;
- };
-}
diff --git a/nix/programs/hyprland/ironbar.nix b/nix/programs/hyprland/ironbar.nix
deleted file mode 100644
index 0682d27..0000000
--- a/nix/programs/hyprland/ironbar.nix
+++ /dev/null
@@ -1,257 +0,0 @@
-{ config, ... }: {
-
- programs.ironbar =
- {
- enable = true;
- style = ''
- @import url("/home/dashie/.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.programs.ironbar.monitor}" = {
- end = config.programs.ironbar.battery ++ [
- {
- 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/dashie/.config/eww/scripts/audio_control.sh bluetooth";
- }
- {
- type = "button";
- class = "audio-button";
- label = "";
- on_click = "!/home/dashie/.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/dashie/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
deleted file mode 100644
index 8c7425d..0000000
--- a/nix/programs/individual_configs/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- imports = [
- ./kitty.nix
- ./yazi.nix
- ./fish.nix
- ./ncspot.nix
- ];
-}
diff --git a/nix/programs/individual_configs/fish.nix b/nix/programs/individual_configs/fish.nix
deleted file mode 100644
index 1859164..0000000
--- a/nix/programs/individual_configs/fish.nix
+++ /dev/null
@@ -1,140 +0,0 @@
-{
- 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/dashie/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/kitty.nix b/nix/programs/individual_configs/kitty.nix
deleted file mode 100644
index 60ef324..0000000
--- a/nix/programs/individual_configs/kitty.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- programs.kitty = {
- enable = true;
-
- settings = {
- enable_audio_bell = "no";
- window_alert_on_bell = "no";
- background_opacity = "0.8";
- cursor_blink_interval = "0";
- window_padding_width = "1";
- shell_integration = "yes";
- sync_with_monitor = "no";
-
- 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 = "#1a1b25";
- foreground = "#c5c8c6";
-
- selection_background = "#b2ceee";
- selection_foreground = "#080808";
-
- url_color = "#73daca";
- cursor = "#c0caf5";
- cursor_text_color = "#1a1b25";
-
- active_tab_background = "#7aa2f7";
- active_tab_foreground = "#16161e";
- inactive_tab_background = "#292e42";
- inactive_tab_foreground = "#545c7e";
-
- active_border_color = "#7aa2f7";
- inactive_border_color = "#292e42";
-
- color0 = "#15161e";
- color1 = "#c94448";
- color2 = "#9ece6a";
- color3 = "#e0af68";
- color4 = "#7aa2f7";
- color5 = "#bb9af7";
- color6 = "#7dcfff";
- color7 = "#a9b1d6";
-
- color8 = "#414868";
- color9 = "#f2201f";
- color10 = "#9ece6a";
- color11 = "#e0af68";
- color12 = "#7aa2f7";
- color13 = "#bb9af7";
- color14 = "#7dcfff";
- color15 = "#c0caf5";
-
- color16 = "#ff9e64";
- color17 = "#db4b4b";
-
- shell = "fish";
- };
-
- };
-}
diff --git a/nix/programs/individual_configs/ncspot.nix b/nix/programs/individual_configs/ncspot.nix
deleted file mode 100644
index 931535b..0000000
--- a/nix/programs/individual_configs/ncspot.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ 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/yazi.nix b/nix/programs/individual_configs/yazi.nix
deleted file mode 100644
index 486c94a..0000000
--- a/nix/programs/individual_configs/yazi.nix
+++ /dev/null
@@ -1,1494 +0,0 @@
-{
- # 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
deleted file mode 100644
index 8f6dc12..0000000
--- a/nix/programs/media.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ pkgs, ... }:
-{
- home.packages = with pkgs; [
- # base audio
- pipewire
- wireplumber
- # audio control
- playerctl
- # images
- imv
- # videos
- mpv
- # pdf
- zathura
- evince
- libreoffice-fresh
- onlyoffice-bin
- pdftk
- # spotify
- #ncspot
- # video editing
- kdenlive
- # image creation
- inkscape
- gimp
- krita
- ];
- 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
deleted file mode 100644
index c0f7885..0000000
--- a/nix/programs/nvim/default.nix
+++ /dev/null
@@ -1,171 +0,0 @@
-{ lib, pkgs, ... }:
-{
- programs.neovim = {
- enable = true;
- extraPackages = with pkgs; [
- # Telescope
- ripgrep
- # lua
- lua-language-server
- stylua
- # nix
- nil
- # go
- gopls
- # jafuck
- jdt-language-server
- taplo
- typst-lsp
- sqls
- shfmt
- texlab
- nixpkgs-fmt
- crate2nix
- ruff-lsp
- nodePackages.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
- conform-nvim
- dashboard-nvim
- dressing-nvim
- flash-nvim
- friendly-snippets
- gitsigns-nvim
- indent-blankline-nvim
- lualine-nvim
- neo-tree-nvim
- neoconf-nvim
- neodev-nvim
- noice-nvim
- nui-nvim
- nvim-cmp
- 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
- omnisharp-extended-lsp-nvim
- neotest
- neotest-java
- neotest-rust
- persistence-nvim
- plenary-nvim
- telescope-fzf-native-nvim
- telescope-nvim
- todo-comments-nvim
- tokyonight-nvim
- trouble-nvim
- vim-illuminate
- vim-startuptime
- which-key-nvim
- { name = "LuaSnip"; path = luasnip; }
- #{ name = "catppuccin"; path = catppuccin-nvim; }
- { 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", 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.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" },
- { "nvim-telescope/telescope-fzf-native.nvim", enabled = true },
- -- disable mason.nvim, use programs.neovim.extraPackages
- { "williamboman/mason-lspconfig.nvim", enabled = false },
- --{ "williamboman/mason.nvim", enabled = false },
- -- treesitter handled by xdg.configFile."nvim/parser", put this line at the end of spec to clear ensure_installed
- { "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = {} } },
- { import = "plugins" },
- { import = "plugins.plugins" },
- },
- install = { colorscheme = { "tokyonight" } },
- 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/ftplugin/java.lua b/nix/programs/nvim/ftplugin/java.lua
deleted file mode 100644
index 1a4f22e..0000000
--- a/nix/programs/nvim/ftplugin/java.lua
+++ /dev/null
@@ -1,5 +0,0 @@
-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
deleted file mode 100644
index 291710e..0000000
--- a/nix/programs/nvim/lua/config/autocmds.lua
+++ /dev/null
@@ -1,16 +0,0 @@
--- nvimtree
-local function open_nvim_tree(data)
- local directory = vim.fn.isdirectory(data.file) == 1
-
- if not directory then
- return
- end
- print("FUCK")
- -- 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
deleted file mode 100644
index b325537..0000000
--- a/nix/programs/nvim/lua/config/keymaps.lua
+++ /dev/null
@@ -1,202 +0,0 @@
-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
deleted file mode 100644
index 858e048..0000000
--- a/nix/programs/nvim/lua/config/lazy.lua
+++ /dev/null
@@ -1,56 +0,0 @@
-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,
- },
- install = { colorscheme = { "tokyonight", "catppuccin-mocha" } },
- 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
deleted file mode 100644
index df316e9..0000000
--- a/nix/programs/nvim/lua/config/lsp-keymap.lua
+++ /dev/null
@@ -1,126 +0,0 @@
-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
deleted file mode 100644
index e9c9543..0000000
--- a/nix/programs/nvim/lua/config/options.lua
+++ /dev/null
@@ -1,33 +0,0 @@
--- 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
deleted file mode 100644
index d8650fc..0000000
--- a/nix/programs/nvim/lua/plugins/cmp.lua
+++ /dev/null
@@ -1,144 +0,0 @@
-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",
- { "roobert/tailwindcss-colorizer-cmp.nvim", config = true },
- },
- 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
deleted file mode 100644
index 82715ad..0000000
--- a/nix/programs/nvim/lua/plugins/dashboard.lua
+++ /dev/null
@@ -1,100 +0,0 @@
-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
deleted file mode 100644
index 76dc307..0000000
--- a/nix/programs/nvim/lua/plugins/disabled.lua
+++ /dev/null
@@ -1,9 +0,0 @@
-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
deleted file mode 100644
index 52f7d55..0000000
--- a/nix/programs/nvim/lua/plugins/lsp.lua
+++ /dev/null
@@ -1,169 +0,0 @@
-return {
- {
- "williamboman/mason.nvim",
- --opts = function()
- -- return {
- -- ensure_installed = {},
- -- }
- --end,
- },
- {
- "neovim/nvim-lspconfig",
- ---@class PluginLspOpts
- opts = {
- -- inlay_hints = {
- -- enabled = true,
- -- },
- format_notify = false,
- -- LSP Server Settings
- ---@type lspconfig.options
- servers = {
- rust_analyzer = {
- mason = false,
- },
- 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,
- cmd = { "OmniSharp" },
- },
- typst_lsp = {
- settings = {
- experimentalFormatterMode = "on",
- exportPdf = "onSave",
- },
- mason = false,
- },
- nil_ls = {
- settings = {
- ["nil"] = {
- formatting = {
- command = { "nixpkgs-fmt" },
- },
- },
- },
- mason = false,
- },
- ltex = {
- settings = {
- ltex = {
- checkFrequency = "save",
- },
- },
- filetypes = {
- "bib",
- "gitcommit",
- "markdown",
- "org",
- "plaintex",
- "rst",
- "rnoweb",
- "tex",
- "pandoc",
- "typst",
- "typ",
- },
- mason = false,
- },
- sqlls = {
- mason = false,
- },
- lemminx = {
- mason = false,
- },
- opencl_ls = {
- mason = false,
- },
- yamlls = {
- mason = false,
- },
- lua_ls = {
- mason = false,
- {
- Lua = {
- workspace = {
- checkThirdParty = false,
- },
- completion = {
- callSnippet = "Replace",
- },
- },
- },
- },
- },
- },
- 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 = {
- {
- -- Customize or remove this keymap to your liking
- "cF",
- function()
- require("conform").format({ async = true, lsp_fallback = true })
- end,
- mode = "",
- desc = "Format buffer",
- },
- },
- formatters_by_ft = {
- typst = { "typstfmt" },
- nix = { "nixpkgs-fmt" },
- lua = { "stylua" },
- sh = { "shfmt" },
- cs = { "dotnet-csharpier" },
- },
- },
- },
-}
diff --git a/nix/programs/nvim/lua/plugins/plugins.lua b/nix/programs/nvim/lua/plugins/plugins.lua
deleted file mode 100644
index 8c0b441..0000000
--- a/nix/programs/nvim/lua/plugins/plugins.lua
+++ /dev/null
@@ -1,276 +0,0 @@
-local Util = require("lazyvim.util")
-
-return {
- {
- "LazyVim/LazyVim",
- opts = {
- colorscheme = "tokyonight-night",
- -- colorscheme = "catppuccin-mocha",
- },
- },
- {
- "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",
- opts = {
- 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",
- },
- },
- },
- },
- },
- {
- "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 = { "markdown", "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
- },
- },
- },
- },
- {
- "DashieTM/test_plugin",
- lazy = false,
- opts = {
- what = 0,
- },
- },
- {
- "DreamMaoMao/yazi.nvim",
- dependencies = {
- "nvim-telescope/telescope.nvim",
- "nvim-lua/plenary.nvim",
- },
- keys = {
- { "fy", "Yazi