diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
index 06dc541..015dc25 100644
--- a/.github/workflows/docs.yaml
+++ b/.github/workflows/docs.yaml
@@ -1,34 +1,58 @@
# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
name: Docs
+
on:
push:
branches:
- main
+
jobs:
build:
name: Build
+
permissions:
contents: read
- runs-on: nixos-latest
+
+ runs-on: ubuntu-latest
+
steps:
- - name: Nix Config
- run: |
- mkdir -p $HOME/.config
- mkdir -p $HOME/.config/nix
- echo experimental-features = nix-command flakes pipe-operators >> $HOME/.config/nix/nix.conf
- echo access-tokens = github.com=${{ secrets.GITHUBTOKEN }} >> $HOME/.config/nix/nix.conf
- nix profile install nixpkgs#nodejs
+ - name: Install Nix
+ uses: DeterminateSystems/nix-installer-action@main
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ extra-conf: |
+ extra-experimental-features = nix-command flakes
+
+ - name: Set up cache
+ uses: DeterminateSystems/magic-nix-cache-action@main
+
- name: Build docs
- run: nix -L build git+https://git.dashie.org/${{ forgejo.repository }}.git?rev=${{ forgejo.sha }}#docs --no-write-lock-file
+ run: nix -L build github:${{ github.repository }}/${{ github.sha }}#docs --no-write-lock-file
+
- name: Prepare docs for upload
run: cp -r --dereference --no-preserve=mode,ownership result/ public/
- # - name: Upload artifact
- # uses: https://data.forgejo.org/forgejo/upload-artifact@v4
- # with:
- # path: public/
- - name: Publish Page
- uses: https://data.forgejo.org/actions/git-pages@v2
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
with:
- site: https://username.pages.dashie.org/reponame/
- token: ${{ forge.token }}
- source: public/
+ path: public/
+
+ deploy:
+ name: Deploy
+
+ needs: build
+
+ permissions:
+ pages: write
+ id-token: write
+
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Deploy docs to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
deleted file mode 100644
index e92ddfd..0000000
--- a/.github/workflows/pr.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-# inspired by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
-name: PR check
-on:
- pull_request:
- branches: ["main"]
-jobs:
- build:
- name: check
- permissions:
- contents: read
- runs-on: ubuntu-latest
- steps:
- - name: Install Nix
- uses: DeterminateSystems/nix-installer-action@main
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- extra-conf: |
- extra-experimental-features = nix-command flakes pipe-operators
- - name: Set up cache
- uses: DeterminateSystems/magic-nix-cache-action@main
- - name: action
- uses: cachix/install-nix-action@v25
- with:
- nix_path: nixpkgs=channel:nixos-unstable
- - name: cache
- uses: cachix/cachix-action@v16
- with:
- name: dashnix
- authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- - name: Linter check
- run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#lint -- check
- - name: Format check
- run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#format -- --check .
- - name: Build docs
- run: nix -L build github:${{ github.repository }}/${{ github.sha }}#docs --no-write-lock-file
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 1984fb1..193d5e7 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -1,29 +1,30 @@
-# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
-name: Release
-on:
- release:
- types: [created]
-jobs:
- build:
- name: Release
- permissions: write-all
- runs-on: ubuntu-latest
- steps:
- - name: Install Nix
- uses: DeterminateSystems/nix-installer-action@main
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- extra-conf: |
- extra-experimental-features = nix-command flakes pipe-operators
- - name: Set up cache
- uses: DeterminateSystems/magic-nix-cache-action@main
- - name: Build ISO
- run: nix build github:${{ github.repository }}/${{ github.sha }}#iso --no-write-lock-file
- - name: Prepare ISO for upload
- run: |
- cp -r --dereference --no-preserve=mode,ownership result/iso/DashNix.iso DashNix.iso
- - name: upload ISO
- uses: softprops/action-gh-release@v1
- with:
- files: |
- DashNix.iso
+# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
+name: Release
+on:
+ release:
+ types: [created]
+jobs:
+ build:
+ name: Release
+ permissions:
+ contents: read
+ runs-on: ubuntu-latest
+ steps:
+ - name: Install Nix
+ uses: DeterminateSystems/nix-installer-action@main
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ extra-conf: |
+ extra-experimental-features = nix-command flakes
+ - name: Set up cache
+ uses: DeterminateSystems/magic-nix-cache-action@main
+ - name: Build ISO
+ run: nix build github:${{ github.repository }}/${{ github.sha }}#iso --no-write-lock-file
+ - name: Prepare ISO for upload
+ run: |
+ cp -r --dereference --no-preserve=mode,ownership result/ public/
+ - name: upload ISO
+ uses: softprops/action-gh-release@v1
+ with:
+ path: path/
+
diff --git a/.gitignore b/.gitignore
index f610716..a931378 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,2 @@
result/*
result
-flake.lock
diff --git a/assets/logo2.png b/assets/logo2.png
deleted file mode 100644
index beeac55..0000000
Binary files a/assets/logo2.png and /dev/null differ
diff --git a/assets/rainbow.svg b/assets/rainbow.svg
deleted file mode 100644
index 9f59c7c..0000000
--- a/assets/rainbow.svg
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
diff --git a/base/common_hardware.nix b/base/common_hardware.nix
index 9f7ccf1..7e6239a 100644
--- a/base/common_hardware.nix
+++ b/base/common_hardware.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
pkgs,
config,
lib,
@@ -11,36 +10,22 @@
in {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
+ #(modulesPath + "/misc/nixpkgs/read-only.nix")
];
- wsl.enable = mkDashDefault config.conf.wsl;
-
# Bootloader.
- boot = lib.mkIf (!config.conf.wsl) {
- consoleLogLevel = mkDashDefault 0;
-
- lanzaboote = lib.mkIf config.conf.secureBoot {
- enable = mkDashDefault true;
- pkiBundle = mkDashDefault "/var/lib/sbctl";
- settings.reboot-for-bitlocker = mkDashDefault true;
- };
-
+ boot = {
+ consoleLogLevel = 0;
loader = {
- systemd-boot = {
- enable =
- if config.conf.secureBoot
- then lib.mkForce false
- else if config.conf.useSystemdBootloader
- then true
- else mkDashDefault false;
+ systemd-boot = lib.mkIf config.conf.useSystemdBootloader {
+ enable = true;
configurationLimit = 5;
};
- efi.canTouchEfiVariables = mkDashDefault true;
+ efi.canTouchEfiVariables = true;
};
-
- kernelPackages = mkDashDefault pkgs.linuxPackages_latest;
+ kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
initrd = {
- verbose = mkDashDefault false;
+ verbose = false;
availableKernelModules = [
"nvme"
"xhci_pci"
@@ -59,98 +44,72 @@ in {
++ config.conf.bootParams;
};
+ # Enable networking
networking = {
- useDHCP = mkDashDefault true;
- networkmanager.enable = mkDashDefault true;
- hostName = mkDashDefault hostName;
+ useDHCP = lib.mkDefault true;
+ networkmanager.enable = true;
+ hostName = hostName;
};
- time = {
- timeZone = mkDashDefault config.conf.timezone;
- hardwareClockInLocalTime = mkDashDefault config.conf.systemLocalTime;
- };
+ # Set your time zone.
+ time.timeZone = config.conf.timezone;
- i18n.defaultLocale = mkDashDefault config.conf.locale;
+ # Select internationalisation properties.
+ i18n.defaultLocale = config.conf.locale;
+ # Enable the X11 windowing system.
services = {
- lorri.enable = mkDashDefault true;
- xserver.enable = mkDashDefault true;
- fstrim.enable = mkDashDefault true;
- pulseaudio.enable = mkDashDefault false;
+ lorri.enable = true;
+ flatpak.enable = true;
+ xserver.enable = true;
+ fstrim.enable = lib.mkDefault true;
+ # Enable sound with pipewire.
+ pulseaudio.enable = false;
pipewire = {
- enable = mkDashDefault true;
+ enable = true;
alsa = {
- enable = mkDashDefault true;
- support32Bit = mkDashDefault true;
+ enable = true;
+ support32Bit = true;
};
- jack.enable = mkDashDefault true;
- pulse.enable = mkDashDefault true;
+ jack.enable = true;
+ pulse.enable = true;
};
};
- nixpkgs.hostPlatform = mkDashDefault config.conf.system;
+ nixpkgs.hostPlatform = lib.mkDefault config.conf.system;
nix = {
gc = {
- automatic = mkDashDefault true;
- dates = mkDashDefault "weekly";
- options = mkDashDefault "--delete-older-than 7d --delete-generations +5";
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d --delete-generations +5";
};
settings = {
trusted-users = [username];
- auto-optimise-store = mkDashDefault true;
+ auto-optimise-store = true;
- builders-use-substitutes = mkDashDefault true;
-
- trusted-substituters = [
- "https://hyprland.cachix.org"
- "https://anyrun.cachix.org"
- "https://oxipaste.cachix.org"
- "https://oxinoti.cachix.org"
- "https://oxishut.cachix.org"
- "https://oxidash.cachix.org"
- "https://oxicalc.cachix.org"
- "https://hyprdock.cachix.org"
- "https://reset.cachix.org"
- "https://dashvim.cachix.org"
- ];
-
- trusted-public-keys = [
- "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
- "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
- "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
- "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
- "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
- "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
- "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
- "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
- "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
- "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
- ];
-
- experimental-features = mkDashDefault "nix-command flakes pipe-operators";
+ experimental-features = "nix-command flakes";
};
};
hardware = {
cpu.${config.conf.cpu}.updateMicrocode =
- mkDashDefault
- config.hardware.enableRedistributableFirmware;
+ lib.mkDefault config.hardware.enableRedistributableFirmware;
};
- security.rtkit.enable = mkDashDefault true;
+ security.rtkit.enable = true;
environment.variables = {
- XDG_CACHE_HOME = mkDashDefault "$HOME/.cache";
- DIRENV_LOG_FORMAT = mkDashDefault "";
- QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
+ XDG_CACHE_HOME = "$HOME/.cache";
+ DIRENV_LOG_FORMAT = "";
+ QT_QPA_PLATFORMTHEME = "qt5ct";
};
# allows user change later on
users = {
- mutableUsers = mkDashDefault true;
+ mutableUsers = true;
users.${username} = {
- isNormalUser = mkDashDefault true;
- description = mkDashDefault username;
+ isNormalUser = true;
+ description = username;
extraGroups = [
"networkmanager"
"wheel"
@@ -159,8 +118,6 @@ in {
"vboxusers"
"video"
"audio"
- "scanner"
- "lp"
];
packages = with pkgs; [
home-manager
@@ -168,7 +125,7 @@ in {
];
# this password will only last for the first login
# e.g. login, then change to whatever else, this also ensures no public hash is available
- password = mkDashDefault "firstlogin";
+ password = "firstlogin";
};
};
}
diff --git a/base/env.nix b/base/env.nix
index 0eaf068..8d6b97e 100644
--- a/base/env.nix
+++ b/base/env.nix
@@ -1,24 +1,21 @@
{
- mkDashDefault,
pkgs,
config,
- lib,
...
}: {
environment = {
variables = {
- GSETTINGS_SCHEMA_DIR = mkDashDefault "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}";
- NEOVIDE_MAXIMIZED = mkDashDefault "0";
- GPG_TTY = mkDashDefault "$(tty)";
- EDITOR = mkDashDefault "neovide --no-fork";
- SUDO_EDITOR = mkDashDefault "neovide --no-fork";
- SCRIPTS = mkDashDefault "$HOME/.config/scripts";
+ 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";
};
sessionVariables = {
- NIXOS_OZONE_WL = mkDashDefault "1";
- GOPATH = mkDashDefault "$HOME/.go";
- FLAKE = mkDashDefault config.conf.nixosConfigPath;
- NH_FLAKE = mkDashDefault config.conf.nixosConfigPath;
+ NIXOS_OZONE_WL = "1";
+ GOPATH = "$HOME/.go";
+ FLAKE = config.conf.nixosConfigPath;
};
};
}
diff --git a/base/xkb_layout.nix b/base/xkb_layout.nix
index b399693..0324c99 100644
--- a/base/xkb_layout.nix
+++ b/base/xkb_layout.nix
@@ -1,10 +1,6 @@
-{
- mkDashDefault,
- pkgs,
- ...
-}: let
- layout = pkgs.writeText "enIntUmlaut" ''
- xkb_symbols "enIntUmlaut"
+{pkgs, ...}: let
+ layout = pkgs.writeText "dashie" ''
+ xkb_symbols "dashie"
{
include "us(basic)"
include "level3(ralt_switch)"
@@ -14,8 +10,8 @@
};
'';
in {
- environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp];
- services.xserver.xkb.extraLayouts.enIntUmlaut = {
+ environment.systemPackages = [pkgs.xorg.xkbcomp];
+ services.xserver.xkb.extraLayouts.dashie = {
description = "US layout with 'umlaut'";
languages = ["eng"];
symbolsFile = "${layout}";
diff --git a/docs/default.nix b/docs/default.nix
index 1fd8a1e..f7e9622 100644
--- a/docs/default.nix
+++ b/docs/default.nix
@@ -1,7 +1,7 @@
# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
{
pkgs,
- buildSystems,
+ build_systems,
lib,
...
}: let
@@ -13,36 +13,16 @@
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;};
+ system = (build_systems {root = ../example/.;})."example".options;
+ makeOptionsDocPrograms = name: pkgs.nixosOptionsDoc {options = system.mods.${name};};
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 ""))
+ paths = builtins.readDir ../modules/programs;
+ names = lib.lists.remove "default" (
+ map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
);
- 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);
+ mods = map makeOptionsDocPrograms names;
+ docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists names mods));
+ summary = lib.strings.concatStringsSep " " (map summaryAppend names);
in
pkgs.stdenvNoCC.mkDerivation {
name = "dashNix-book";
diff --git a/docs/src/README.md b/docs/src/README.md
index 3658e00..2fc1e31 100644
--- a/docs/src/README.md
+++ b/docs/src/README.md
@@ -1,10 +1,12 @@
+

-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.
+An opinionated flake to bootstrap NixOS systems with default configurations for various programs and services from both NixOS and HomeManger which can be enabled, disabled, configured or replaced at will.
+
# Usage
@@ -12,7 +14,7 @@ This flake is intended to be used as an input to your own NixOS configuration:
```nix
dashNix = {
- url = "github:Xetibo/DashNix";
+ url = "github:DashieTM/DashNix";
inputs = {
# ensure these are here to update the packages on your own
nixpkgs.follows = "nixpkgs";
@@ -23,42 +25,8 @@ dashNix = {
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 = ./.; };
+nixosConfigurations = inputs.dashNix.dashNixLib.build_systems { root = ./.; };
```
This command will build each system that is placed within the hosts/ directory.
@@ -89,71 +57,69 @@ Here is a minimal required configuration.nix (the TODOs mention a required chang
```nix
{config, ...}: {
- # TODO denote important changes
-
# variables for system
+ # TODO important changes
conf = {
- # TODO your username
+ # change this to your monitor and your pc name
+ # should be something like DP-1
+ defaultMonitor = "YOURMONITOR";
+ # width x height @ refreshrate
+ defaultMonitorMode = "1920x1080@60";
+ # scale for your main monitor
+ defaultMonitorScale = "1";
+ # 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
+ 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" ];
+ # };
+ # }
+ # ];
+ };
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;
- # }
- ];
+ # default hyprland monitor config -> uncomment when necessary
+ # TODO: Add more monitors when needed
+ # hyprland.monitor = [
+ # # default
+ # "${config.conf.defaultMonitor},${config.conf.defaultMonitorMode},0x0,${config.conf.defaultMonitorScale}"
+ # # second example monitor
+ # "DP-2,3440x1440@180,auto,1"
+ # # all others
+ # ",highrr,auto,1"
+ # ];
+ # or amd, whatever you have
gpu.nvidia.enable = true;
- kdeConnect.enable = true;
+ kde_connect.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.
- };
};
}
```
@@ -162,120 +128,73 @@ Here is a minimal required configuration.nix (the TODOs mention a required chang
After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like.
-## Configuring pkgs
+## Nixos and Home-manager Modules
-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.
+You can add additional modules or remove all of them by overriding parameters to the build_systems command:
```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;
-}
+nixosConfigurations =
+ let
+ additionalMods = {
+ nixos = [
+ # your modules
+ ]; home = [
+ # your modules
+ ];
+ }
+ # passing this parameter will override the existing modules
+ mods = {
+ nixos = [];
+ home = [];
+ }
+ in
+ inputs.dashNix.dashNixLib.build_systems { root = ./.; inherit mods additionalMods; };
```
-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.
+## Additional Inputs
+
+Just like modules, you can add additional inputs to your configuration.
+
+```nix
+nixosConfigurations =
+ let
+ additionalInputs = {
+ something.url = "yoururl"
+ }
+ in
+ inputs.dashNix.dashNixLib.build_systems { root = ./.; inherit additionalInputs; };
+```
## 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;
- };
+ nixosConfigurations =
+ inputs.dashNix.dashNixLib.build_systems {
+ root = ./stable;
+ inherit additionalInputs;
+ overridePkgs = true;
+ }
+ // inputs.dashNix.dashNixLib.build_systems {
+ root = ./unstable;
+ inherit additionalInputs;
+ };
```
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.
+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
+# Installation
-You can find a custom ISO in the releases: [Link](https://github.com/Xetibo/DashNix/releases).
+You can find a custom ISO on my NextCloud server: [Link](https://cloud.dashie.org/s/z7G3zS9SXeEt2ERD).
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.
+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".
@@ -283,7 +202,6 @@ These modules attempt to combine the home-manager and nixos packages/options to
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
@@ -291,6 +209,7 @@ For package lists, please check the individual modules, as the lists can be long
- drives : A drive configuration module
- firefox: Enables and configures firefox (extensions and settings)
- fish: Enables and configures fish shell
+- flatpak : Installs and enables declarative flatpak
- gaming : Configures gaming related features (launchers, gamemode)
- git : Git key and config module
- gnome_services : Gnome services for minimal enviroments -> Window managers etc
@@ -321,9 +240,6 @@ For package lists, please check the individual modules, as the lists can be long
# Credits
- [Fufexan](https://github.com/fufexan) for the xdg-mime config:
-- [Catppuccin](https://github.com/catppuccin) for base16 colors and zen-browser css
+- [Catppuccin](https://github.com/catppuccin) for base16 colors
- [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/example/flake.nix b/example/flake.nix
index 01ec944..0ad08bc 100644
--- a/example/flake.nix
+++ b/example/flake.nix
@@ -2,19 +2,27 @@
description = "some dots";
inputs = {
+ dashvim.url = "github:DashieTM/DashVim";
+ hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
+ ironbar.url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
+ anyrun.url = "github:Kirottu/anyrun";
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
dashNix = {
- url = "github:Xetibo/DashNix";
+ url = "github:DashieTM/DashNix";
inputs = {
nixpkgs.follows = "nixpkgs";
stable.follows = "stable";
+ dashvim.follows = "dashvim";
+ hyprland.follows = "hyprland";
+ ironbar.follows = "ironbar";
+ anyrun.follows = "anyrun";
};
};
};
- outputs = inputs: {
- nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems {root = ./.;};
+ outputs = {...} @ inputs: {
+ nixosConfigurations = inputs.dashNix.dashNixLib.build_systems {root = ./.;};
};
nixConfig = {
@@ -24,28 +32,12 @@
"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
index dbe8cd0..c39c104 100644
--- a/example/hosts/example/configuration.nix
+++ b/example/hosts/example/configuration.nix
@@ -1,37 +1,69 @@
{config, ...}: {
- # TODO denote important changes
-
# variables for system
+ # TODO important changes
conf = {
- # TODO your username
- username = "exampleName";
+ # change this to your monitor and your pc name
+ # should be something like DP-1
+ defaultMonitor = "YOURMONITOR";
+ # width x height @ refreshrate
+ defaultMonitorMode = "1920x1080@60";
+ # scale for your main monitor
+ defaultMonitorScale = "1";
+ # your username
+ username = "YOURNAME";
# 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";
+ locale = "something.UTF-8";
+ timezone = "CONTINENT/CITY";
};
-
# modules
mods = {
# default disk config has root home boot and swap partition, overwrite if you want something different
+ 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"
+ # ];
+ # };
+ # }
+ #];
+ };
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;
- # }
- ];
+ # default hyprland monitor config -> uncomment when necessary
+ # TODO: Add more monitors when needed
+ # hyprland.monitor = [
+ # # default
+ # "${config.conf.defaultMonitor},${config.conf.defaultMonitorMode},0x0,${config.conf.defaultMonitorScale}"
+ # # second example monitor
+ # "DP-2,3440x1440@180,auto,1"
+ # # all others
+ # ",highrr,auto,1"
+ # ];
+ # or amd, whatever you have
gpu.nvidia.enable = true;
kdeConnect.enable = true;
# login manager:
@@ -39,30 +71,5 @@
# 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/flake.lock b/flake.lock
new file mode 100644
index 0000000..98a66e3
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,2585 @@
+{
+ "nodes": {
+ "Hyprspace": {
+ "inputs": {
+ "hyprland": [
+ "hyprland"
+ ],
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1739004667,
+ "narHash": "sha256-t/KaeHEgzh225HUdAiHXRsgDeyDrBCMTg0LjR73v3Nw=",
+ "owner": "KZDKM",
+ "repo": "Hyprspace",
+ "rev": "ac55bbdb6cee760af9315899b5b187a40ce43e46",
+ "type": "github"
+ },
+ "original": {
+ "owner": "KZDKM",
+ "repo": "Hyprspace",
+ "type": "github"
+ }
+ },
+ "anyrun": {
+ "inputs": {
+ "flake-parts": "flake-parts",
+ "nixpkgs": "nixpkgs",
+ "systems": "systems_2"
+ },
+ "locked": {
+ "lastModified": 1735301051,
+ "narHash": "sha256-jU88Q9tP4vuvWYGQcmOdFwI9e2uMPVYJHbXdiklIH9o=",
+ "owner": "Kirottu",
+ "repo": "anyrun",
+ "rev": "06017e753c8886d5296768dca80745ee09402a2d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Kirottu",
+ "repo": "anyrun",
+ "type": "github"
+ }
+ },
+ "aquamarine": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1739298463,
+ "narHash": "sha256-oAFv9jKwwA7d7384d2LeywDSgwhvb3ZnrwbfoWPhXsI=",
+ "owner": "hyprwm",
+ "repo": "aquamarine",
+ "rev": "f239e5aadd6d23c48e085c2de3397e2058e54d16",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "aquamarine",
+ "type": "github"
+ }
+ },
+ "base16": {
+ "inputs": {
+ "fromYaml": "fromYaml"
+ },
+ "locked": {
+ "lastModified": 1732200724,
+ "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "rev": "153d52373b0fb2d343592871009a286ec8837aec",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "type": "github"
+ }
+ },
+ "base16-fish": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1622559957,
+ "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
+ "owner": "tomyun",
+ "repo": "base16-fish",
+ "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tomyun",
+ "repo": "base16-fish",
+ "type": "github"
+ }
+ },
+ "base16-helix": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1736852337,
+ "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=",
+ "owner": "tinted-theming",
+ "repo": "base16-helix",
+ "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-helix",
+ "type": "github"
+ }
+ },
+ "base16-vim": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1732806396,
+ "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
+ "owner": "tinted-theming",
+ "repo": "base16-vim",
+ "rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-vim",
+ "rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
+ "type": "github"
+ }
+ },
+ "base16_2": {
+ "inputs": {
+ "fromYaml": "fromYaml_2"
+ },
+ "locked": {
+ "lastModified": 1732200724,
+ "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "rev": "153d52373b0fb2d343592871009a286ec8837aec",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "type": "github"
+ }
+ },
+ "base16_3": {
+ "inputs": {
+ "fromYaml": "fromYaml_3"
+ },
+ "locked": {
+ "lastModified": 1732200724,
+ "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "rev": "153d52373b0fb2d343592871009a286ec8837aec",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "type": "github"
+ }
+ },
+ "chaoticNyx": {
+ "inputs": {
+ "fenix": "fenix",
+ "flake-schemas": "flake-schemas",
+ "home-manager": "home-manager",
+ "jovian": "jovian",
+ "nixpkgs": "nixpkgs_2"
+ },
+ "locked": {
+ "lastModified": 1740408177,
+ "narHash": "sha256-baFhGvCncDj3zJlDODJESVE83lV5+tGOrvgwQczzp84=",
+ "owner": "chaotic-cx",
+ "repo": "nyx",
+ "rev": "62e2d6c89e4310c7cb56ee5f6bbdc280072dd082",
+ "type": "github"
+ },
+ "original": {
+ "owner": "chaotic-cx",
+ "ref": "nyxpkgs-unstable",
+ "repo": "nyx",
+ "type": "github"
+ }
+ },
+ "crane": {
+ "locked": {
+ "lastModified": 1737689766,
+ "narHash": "sha256-ivVXYaYlShxYoKfSo5+y5930qMKKJ8CLcAoIBPQfJ6s=",
+ "owner": "ipetkov",
+ "repo": "crane",
+ "rev": "6fe74265bbb6d016d663b1091f015e2976c4a527",
+ "type": "github"
+ },
+ "original": {
+ "owner": "ipetkov",
+ "repo": "crane",
+ "type": "github"
+ }
+ },
+ "dashvim": {
+ "inputs": {
+ "base16": "base16_2",
+ "flake-parts": "flake-parts_2",
+ "nixpkgs": "nixpkgs_3",
+ "nixvim": "nixvim"
+ },
+ "locked": {
+ "lastModified": 1740315793,
+ "narHash": "sha256-GXmi3T2Lj9a2LwfADZ82WiZTgPTH+vbUwj4647Bjeqc=",
+ "owner": "DashieTM",
+ "repo": "DashVim",
+ "rev": "752206afc9a03954b221d0a8880151636d8dbf53",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "DashVim",
+ "type": "github"
+ }
+ },
+ "devshell": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1735644329,
+ "narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=",
+ "owner": "numtide",
+ "repo": "devshell",
+ "rev": "f7795ede5b02664b57035b3b757876703e2c3eac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "devshell",
+ "type": "github"
+ }
+ },
+ "fenix": {
+ "inputs": {
+ "nixpkgs": [
+ "chaoticNyx",
+ "nixpkgs"
+ ],
+ "rust-analyzer-src": "rust-analyzer-src"
+ },
+ "locked": {
+ "lastModified": 1740292204,
+ "narHash": "sha256-ZbptkmqaenRhUKsodSEcVzBw+kXZ8DcZpTGutU1HEiI=",
+ "owner": "nix-community",
+ "repo": "fenix",
+ "rev": "93d59130e3fc121f927c03e406142df8d544b901",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "fenix",
+ "type": "github"
+ }
+ },
+ "firefox-gnome-theme": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1739223196,
+ "narHash": "sha256-vAxN2f3rvl5q62gQQjZGVSvF93nAsOxntuFz+e/655w=",
+ "owner": "rafaelmardojai",
+ "repo": "firefox-gnome-theme",
+ "rev": "a89108e6272426f4eddd93ba17d0ea101c34fb21",
+ "type": "github"
+ },
+ "original": {
+ "owner": "rafaelmardojai",
+ "repo": "firefox-gnome-theme",
+ "type": "github"
+ }
+ },
+ "flake-compat": {
+ "locked": {
+ "lastModified": 1733328505,
+ "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
+ "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
+ "revCount": 69,
+ "type": "tarball",
+ "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
+ }
+ },
+ "flake-compat_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696426674,
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-compat_3": {
+ "locked": {
+ "lastModified": 1733328505,
+ "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "anyrun",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1727826117,
+ "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_10": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "reset",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738453229,
+ "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_11": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "reset-plugins",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_12": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "stylix",
+ "nur",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1733312601,
+ "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_2": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1738453229,
+ "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_3": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738453229,
+ "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_4": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "hyprdock",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_5": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxicalc",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_6": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxidash",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_7": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxinoti",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_8": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxipaste",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1722555600,
+ "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_9": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "oxishut",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-schemas": {
+ "locked": {
+ "lastModified": 1721999734,
+ "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=",
+ "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982",
+ "revCount": 75,
+ "type": "tarball",
+ "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz"
+ }
+ },
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems_3"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "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"
+ }
+ },
+ "flake-utils_3": {
+ "inputs": {
+ "systems": "systems_6"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_4": {
+ "inputs": {
+ "systems": "systems_7"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_5": {
+ "inputs": {
+ "systems": "systems_8"
+ },
+ "locked": {
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_6": {
+ "inputs": {
+ "systems": [
+ "stylix",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "fromYaml": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1731966426,
+ "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "rev": "106af9e2f715e2d828df706c386a685698f3223b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "type": "github"
+ }
+ },
+ "fromYaml_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1731966426,
+ "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "rev": "106af9e2f715e2d828df706c386a685698f3223b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "type": "github"
+ }
+ },
+ "fromYaml_3": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1731966426,
+ "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "rev": "106af9e2f715e2d828df706c386a685698f3223b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "type": "github"
+ }
+ },
+ "git-hooks": {
+ "inputs": {
+ "flake-compat": [
+ "dashvim",
+ "nixvim",
+ "flake-compat"
+ ],
+ "gitignore": "gitignore",
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1737465171,
+ "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=",
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
+ "type": "github"
+ },
+ "original": {
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "type": "github"
+ }
+ },
+ "git-hooks_2": {
+ "inputs": {
+ "flake-compat": [
+ "stylix",
+ "flake-compat"
+ ],
+ "gitignore": "gitignore_3",
+ "nixpkgs": [
+ "stylix",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1737465171,
+ "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=",
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
+ "type": "github"
+ },
+ "original": {
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "type": "github"
+ }
+ },
+ "gitignore": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "git-hooks",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1709087332,
+ "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "type": "github"
+ }
+ },
+ "gitignore_2": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "pre-commit-hooks",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1709087332,
+ "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "type": "github"
+ }
+ },
+ "gitignore_3": {
+ "inputs": {
+ "nixpkgs": [
+ "stylix",
+ "git-hooks",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1709087332,
+ "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "gitignore.nix",
+ "type": "github"
+ }
+ },
+ "gnome-shell": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1732369855,
+ "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
+ "owner": "GNOME",
+ "repo": "gnome-shell",
+ "rev": "dadd58f630eeea41d645ee225a63f719390829dc",
+ "type": "github"
+ },
+ "original": {
+ "owner": "GNOME",
+ "ref": "47.2",
+ "repo": "gnome-shell",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "chaoticNyx",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1740318342,
+ "narHash": "sha256-fjr9+3Iru6O5qE+2oERQkabqAUXx4awm0+i2MBcta1U=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "b5ab2c7fdaa807cf425066ab7cd34b073946b1ca",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_2": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738878603,
+ "narHash": "sha256-fmhq8B3MvQLawLbMO+LWLcdC2ftLMmwSk+P29icJ3tE=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "433799271274c9f2ab520a49527ebfe2992dcfbd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_3": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1740494361,
+ "narHash": "sha256-Dd/GhJ9qKmUwuhgt/PAROG8J6YdU2ZjtJI9SQX5sVQI=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "74f0a8546e3f2458c870cf90fc4b38ac1f498b17",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_4": {
+ "inputs": {
+ "nixpkgs": [
+ "stylix",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1740347597,
+ "narHash": "sha256-st5q9egkPGz8TUcVVlIQX7y6G3AzHob+6M963bwVq74=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "12e26a74e5eb1a31e13daaa08858689e25ebd449",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "hyprcursor": {
+ "inputs": {
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738664950,
+ "narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=",
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprcursor",
+ "type": "github"
+ }
+ },
+ "hyprdock": {
+ "inputs": {
+ "flake-parts": "flake-parts_4",
+ "nixpkgs": "nixpkgs_5"
+ },
+ "locked": {
+ "lastModified": 1733264848,
+ "narHash": "sha256-HVlpDNoxteGWBWn2rybr03uVt4k3AOpswBpa8acbzcY=",
+ "owner": "DashieTM",
+ "repo": "hyprdock",
+ "rev": "a67de182fd3c38dbc3186df9985443062b850e2b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "hyprdock",
+ "type": "github"
+ }
+ },
+ "hyprgraphics": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1739049071,
+ "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=",
+ "owner": "hyprwm",
+ "repo": "hyprgraphics",
+ "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprgraphics",
+ "type": "github"
+ }
+ },
+ "hyprland": {
+ "inputs": {
+ "aquamarine": "aquamarine",
+ "hyprcursor": "hyprcursor",
+ "hyprgraphics": "hyprgraphics",
+ "hyprland-protocols": "hyprland-protocols",
+ "hyprland-qtutils": "hyprland-qtutils",
+ "hyprlang": "hyprlang",
+ "hyprutils": "hyprutils",
+ "hyprwayland-scanner": "hyprwayland-scanner",
+ "nixpkgs": "nixpkgs_6",
+ "pre-commit-hooks": "pre-commit-hooks",
+ "systems": "systems_4",
+ "xdph": "xdph"
+ },
+ "locked": {
+ "lastModified": 1740492189,
+ "narHash": "sha256-ulVWP6hjMT+aByXlqjaLSEywkfw8lbTwVg4K9J/j5f0=",
+ "ref": "refs/heads/main",
+ "rev": "f0850905f0275922340035f62b6d808c2980ceda",
+ "revCount": 5843,
+ "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",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738422629,
+ "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "hyprland-qt-support": {
+ "inputs": {
+ "hyprlang": [
+ "hyprland",
+ "hyprland-qtutils",
+ "hyprlang"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "hyprland-qtutils",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "hyprland-qtutils",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1737634706,
+ "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=",
+ "owner": "hyprwm",
+ "repo": "hyprland-qt-support",
+ "rev": "8810df502cdee755993cb803eba7b23f189db795",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-qt-support",
+ "type": "github"
+ }
+ },
+ "hyprland-qtutils": {
+ "inputs": {
+ "hyprland-qt-support": "hyprland-qt-support",
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "hyprutils": [
+ "hyprland",
+ "hyprland-qtutils",
+ "hyprlang",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1739048983,
+ "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=",
+ "owner": "hyprwm",
+ "repo": "hyprland-qtutils",
+ "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-qtutils",
+ "type": "github"
+ }
+ },
+ "hyprlang": {
+ "inputs": {
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1739048914,
+ "narHash": "sha256-vd5rJBTmp2w7SDgfv23Zcd84ktI5eDA7e5UBzx+pKrU=",
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "rev": "a7334904d591f38757c46fbe2ab68651877d9099",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprlang",
+ "type": "github"
+ }
+ },
+ "hyprutils": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1739891528,
+ "narHash": "sha256-h8HOCZ/rw2Buzku+GKF77VXxrGjCSOQkLhptiEKMYg0=",
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "rev": "61a5382f4b1ab578064d470b1b3d3f0df396b8ba",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprutils",
+ "type": "github"
+ }
+ },
+ "hyprwayland-scanner": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1739049028,
+ "narHash": "sha256-RleJp7LYbr6s+M1xgbmhtBs+fYa3ZdIiF7+QalJ4D1g=",
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "rev": "04146df74a8d5ec0b579657307be01f1e241125f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprwayland-scanner",
+ "type": "github"
+ }
+ },
+ "ironbar": {
+ "inputs": {
+ "crane": "crane",
+ "naersk": "naersk",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "rust-overlay": "rust-overlay"
+ },
+ "locked": {
+ "lastModified": 1740229415,
+ "narHash": "sha256-9x2r4mCmyZelgdlcd3Zla0bQp/dQhTvjMyb6OO1CMWY=",
+ "owner": "JakeStanger",
+ "repo": "ironbar",
+ "rev": "9b67719cac7b66727b16fe7a490039510fcc1965",
+ "type": "github"
+ },
+ "original": {
+ "owner": "JakeStanger",
+ "repo": "ironbar",
+ "type": "github"
+ }
+ },
+ "ixx": {
+ "inputs": {
+ "flake-utils": [
+ "dashvim",
+ "nixvim",
+ "nuschtosSearch",
+ "flake-utils"
+ ],
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nuschtosSearch",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1729958008,
+ "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=",
+ "owner": "NuschtOS",
+ "repo": "ixx",
+ "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NuschtOS",
+ "ref": "v0.0.6",
+ "repo": "ixx",
+ "type": "github"
+ }
+ },
+ "jovian": {
+ "inputs": {
+ "nix-github-actions": "nix-github-actions",
+ "nixpkgs": [
+ "chaoticNyx",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1740269380,
+ "narHash": "sha256-l+zB5a39MJp4Olc4YxP7GChFXmNZIhoXaiSS6QRXa9o=",
+ "owner": "Jovian-Experiments",
+ "repo": "Jovian-NixOS",
+ "rev": "11ba89d13831cb399194310304fffb025081c674",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Jovian-Experiments",
+ "repo": "Jovian-NixOS",
+ "type": "github"
+ }
+ },
+ "naersk": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_7"
+ },
+ "locked": {
+ "lastModified": 1736429655,
+ "narHash": "sha256-BwMekRuVlSB9C0QgwKMICiJ5EVbLGjfe4qyueyNQyGI=",
+ "owner": "nix-community",
+ "repo": "naersk",
+ "rev": "0621e47bd95542b8e1ce2ee2d65d6a1f887a13ce",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "naersk",
+ "type": "github"
+ }
+ },
+ "nix-darwin": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738743987,
+ "narHash": "sha256-O3bnAfsObto6l2tQOmQlrO6Z2kD6yKwOWfs7pA0CpOc=",
+ "owner": "lnl7",
+ "repo": "nix-darwin",
+ "rev": "ae406c04577ff9a64087018c79b4fdc02468c87c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "lnl7",
+ "repo": "nix-darwin",
+ "type": "github"
+ }
+ },
+ "nix-flatpak": {
+ "locked": {
+ "lastModified": 1739444422,
+ "narHash": "sha256-iAVVHi7X3kWORftY+LVbRiStRnQEob2TULWyjMS6dWg=",
+ "owner": "gmodena",
+ "repo": "nix-flatpak",
+ "rev": "5e54c3ca05a7c7d968ae1ddeabe01d2a9bc1e177",
+ "type": "github"
+ },
+ "original": {
+ "owner": "gmodena",
+ "repo": "nix-flatpak",
+ "type": "github"
+ }
+ },
+ "nix-github-actions": {
+ "inputs": {
+ "nixpkgs": [
+ "chaoticNyx",
+ "jovian",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1729697500,
+ "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
+ "owner": "zhaofengli",
+ "repo": "nix-github-actions",
+ "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
+ "type": "github"
+ },
+ "original": {
+ "owner": "zhaofengli",
+ "ref": "matrix-name",
+ "repo": "nix-github-actions",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1730200266,
+ "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1738452942,
+ "narHash": "sha256-vJzFZGaCpnmo7I6i416HaBLpC+hvcURh/BQwROcGIp8=",
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz"
+ }
+ },
+ "nixpkgs_10": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_11": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_12": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_13": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_14": {
+ "locked": {
+ "lastModified": 1723637854,
+ "narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_15": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_16": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_17": {
+ "locked": {
+ "lastModified": 1739446958,
+ "narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "2ff53fe64443980e139eaa286017f53f88336dd0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_18": {
+ "locked": {
+ "lastModified": 1736320768,
+ "narHash": "sha256-nIYdTAiKIGnFNugbomgBJR+Xv5F1ZQU+HfaBqJKroC0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "4bc9c909d9ac828a039f288cf872d16d38185db8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_19": {
+ "locked": {
+ "lastModified": 1716948383,
+ "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "ad57eef4ef0659193044870c731987a6df5cf56b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1740367490,
+ "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_20": {
+ "locked": {
+ "lastModified": 1706487304,
+ "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_21": {
+ "locked": {
+ "lastModified": 1731763621,
+ "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_22": {
+ "locked": {
+ "lastModified": 1740367490,
+ "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_23": {
+ "locked": {
+ "lastModified": 1740367490,
+ "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1739866667,
+ "narHash": "sha256-EO1ygNKZlsAC9avfcwHkKGMsmipUk1Uc0TbrEZpkn64=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "73cf49b8ad837ade2de76f87eb53fc85ed5d4680",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_4": {
+ "locked": {
+ "lastModified": 1738797219,
+ "narHash": "sha256-KRwX9Z1XavpgeSDVM/THdFd6uH8rNm/6R+7kIbGa+2s=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "1da52dd49a127ad74486b135898da2cef8c62665",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_5": {
+ "locked": {
+ "lastModified": 1716330097,
+ "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_6": {
+ "locked": {
+ "lastModified": 1739020877,
+ "narHash": "sha256-mIvECo/NNdJJ/bXjNqIh8yeoSjVLAuDuTUzAo7dzs8Y=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "a79cfe0ebd24952b580b1cf08cd906354996d547",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_7": {
+ "locked": {
+ "lastModified": 1738297584,
+ "narHash": "sha256-AYvaFBzt8dU0fcSK2jKD0Vg23K2eIRxfsVXIPCW9a0E=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "9189ac18287c599860e878e905da550aa6dec1cd",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "type": "indirect"
+ }
+ },
+ "nixpkgs_8": {
+ "locked": {
+ "lastModified": 1740367490,
+ "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=",
+ "owner": "NixOs",
+ "repo": "nixpkgs",
+ "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOs",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_9": {
+ "locked": {
+ "lastModified": 1716137900,
+ "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixvim": {
+ "inputs": {
+ "devshell": "devshell",
+ "flake-compat": "flake-compat",
+ "flake-parts": "flake-parts_3",
+ "git-hooks": "git-hooks",
+ "home-manager": "home-manager_2",
+ "nix-darwin": "nix-darwin",
+ "nixpkgs": "nixpkgs_4",
+ "nuschtosSearch": "nuschtosSearch",
+ "treefmt-nix": "treefmt-nix"
+ },
+ "locked": {
+ "lastModified": 1739902813,
+ "narHash": "sha256-BgOQcKKz7VNvSHIbBllHisv32HvF3W3ALF9sdnC++V8=",
+ "owner": "nix-community",
+ "repo": "nixvim",
+ "rev": "0ab9947137cd034ec64eb5cd9ede94e53af21f50",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixvim",
+ "type": "github"
+ }
+ },
+ "nur": {
+ "inputs": {
+ "flake-parts": "flake-parts_12",
+ "nixpkgs": [
+ "stylix",
+ "nixpkgs"
+ ],
+ "treefmt-nix": "treefmt-nix_2"
+ },
+ "locked": {
+ "lastModified": 1740408283,
+ "narHash": "sha256-2xECnhgF3MU9YjmvOkrRp8wRFo2OjjewgCtlfckhL5s=",
+ "owner": "nix-community",
+ "repo": "NUR",
+ "rev": "496a4a11162bdffb9a7b258942de138873f019f7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "NUR",
+ "type": "github"
+ }
+ },
+ "nuschtosSearch": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "ixx": "ixx",
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738508923,
+ "narHash": "sha256-4DaDrQDAIxlWhTjH6h/+xfG05jt3qDZrZE/7zDLQaS4=",
+ "owner": "NuschtOS",
+ "repo": "search",
+ "rev": "86e2038290859006e05ca7201425ea5b5de4aecb",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NuschtOS",
+ "repo": "search",
+ "type": "github"
+ }
+ },
+ "oxicalc": {
+ "inputs": {
+ "flake-parts": "flake-parts_5",
+ "nixpkgs": "nixpkgs_9"
+ },
+ "locked": {
+ "lastModified": 1733264508,
+ "narHash": "sha256-5JN+XBh4HFuxiinRW2rRNTTknmuCnE4g8djxCMsGirE=",
+ "owner": "DashieTM",
+ "repo": "OxiCalc",
+ "rev": "82f3632cbcf02e6ad5326082cd6d43d64edb0a13",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiCalc",
+ "type": "github"
+ }
+ },
+ "oxidash": {
+ "inputs": {
+ "flake-parts": "flake-parts_6",
+ "nixpkgs": "nixpkgs_10",
+ "rust-overlay": "rust-overlay_2"
+ },
+ "locked": {
+ "lastModified": 1733264230,
+ "narHash": "sha256-hrQ+d2qHR/lMW5s8iQ6S3GAGeidRToih963Y5lUjDaE=",
+ "owner": "DashieTM",
+ "repo": "OxiDash",
+ "rev": "fae92da1f0cd44efbeb75c3b3407430dc9a69448",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiDash",
+ "type": "github"
+ }
+ },
+ "oxinoti": {
+ "inputs": {
+ "flake-parts": "flake-parts_7",
+ "nixpkgs": "nixpkgs_12",
+ "rust-overlay": "rust-overlay_3"
+ },
+ "locked": {
+ "lastModified": 1733261311,
+ "narHash": "sha256-g6kbtp1MQUBavadCoJdSB1/2TtaNzjtC7wn48luJQ5k=",
+ "owner": "DashieTM",
+ "repo": "OxiNoti",
+ "rev": "68c48590ffdae7b70339de0f1d4807a45435db9b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiNoti",
+ "type": "github"
+ }
+ },
+ "oxipaste": {
+ "inputs": {
+ "flake-parts": "flake-parts_8",
+ "nixpkgs": "nixpkgs_14"
+ },
+ "locked": {
+ "lastModified": 1737624143,
+ "narHash": "sha256-256aX66hq37tVhfimOmFrrHOba+E7hMvsVYxEvVPrmI=",
+ "owner": "DashieTM",
+ "repo": "OxiPaste",
+ "rev": "54beb71d3545825d4888f971fe54b1bc0dc2a62a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiPaste",
+ "type": "github"
+ }
+ },
+ "oxishut": {
+ "inputs": {
+ "flake-parts": "flake-parts_9",
+ "nixpkgs": "nixpkgs_15",
+ "rust-overlay": "rust-overlay_4"
+ },
+ "locked": {
+ "lastModified": 1733262922,
+ "narHash": "sha256-fBgCJPyIBHMOJ4C54PmCVItcHwu7gTrVeSKkWkXXv2A=",
+ "owner": "DashieTM",
+ "repo": "OxiShut",
+ "rev": "3d3060e4e3668dbd8bd1f7b3a81728245de58d94",
+ "type": "github"
+ },
+ "original": {
+ "owner": "DashieTM",
+ "repo": "OxiShut",
+ "type": "github"
+ }
+ },
+ "pre-commit-hooks": {
+ "inputs": {
+ "flake-compat": "flake-compat_2",
+ "gitignore": "gitignore_2",
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1737465171,
+ "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=",
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
+ "type": "github"
+ },
+ "original": {
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "type": "github"
+ }
+ },
+ "reset": {
+ "inputs": {
+ "flake-parts": "flake-parts_10",
+ "nixpkgs": "nixpkgs_17",
+ "rust-overlay": "rust-overlay_5"
+ },
+ "locked": {
+ "lastModified": 1739632626,
+ "narHash": "sha256-ReEPsodGJDp3AUOoi+t7pQZaYZiZFxyz9TDEveSiBkI=",
+ "owner": "Xetibo",
+ "repo": "ReSet",
+ "rev": "f229ed7dea514bc7307cea8682553afd9584eaaa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Xetibo",
+ "repo": "ReSet",
+ "type": "github"
+ }
+ },
+ "reset-plugins": {
+ "inputs": {
+ "flake-parts": "flake-parts_11",
+ "nixpkgs": "nixpkgs_19",
+ "rust-overlay": "rust-overlay_6"
+ },
+ "locked": {
+ "lastModified": 1718300175,
+ "narHash": "sha256-kPeJJ/au+jV4jhyAhkLI3uwqK7pEDjdVJvwDmtQq8/k=",
+ "owner": "Xetibo",
+ "repo": "ReSet-Plugins",
+ "rev": "8d3af2fab9425f8b89fb7b82b4e23eba12a42f85",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Xetibo",
+ "repo": "ReSet-Plugins",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "Hyprspace": "Hyprspace",
+ "anyrun": "anyrun",
+ "base16": "base16",
+ "chaoticNyx": "chaoticNyx",
+ "dashvim": "dashvim",
+ "home-manager": "home-manager_3",
+ "hyprdock": "hyprdock",
+ "hyprland": "hyprland",
+ "ironbar": "ironbar",
+ "nix-flatpak": "nix-flatpak",
+ "nixpkgs": "nixpkgs_8",
+ "oxicalc": "oxicalc",
+ "oxidash": "oxidash",
+ "oxinoti": "oxinoti",
+ "oxipaste": "oxipaste",
+ "oxishut": "oxishut",
+ "reset": "reset",
+ "reset-plugins": "reset-plugins",
+ "sops-nix": "sops-nix",
+ "stable": "stable",
+ "stylix": "stylix",
+ "zen-browser": "zen-browser"
+ }
+ },
+ "rust-analyzer-src": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1740259966,
+ "narHash": "sha256-FJU9qiELvmJzNRr7wLFtJUy4bSk1PNqsRB7wOQz6zUE=",
+ "owner": "rust-lang",
+ "repo": "rust-analyzer",
+ "rev": "9df88ff0f65f8de9f73684d2bb96e1b62669d083",
+ "type": "github"
+ },
+ "original": {
+ "owner": "rust-lang",
+ "ref": "nightly",
+ "repo": "rust-analyzer",
+ "type": "github"
+ }
+ },
+ "rust-overlay": {
+ "inputs": {
+ "nixpkgs": [
+ "ironbar",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738290352,
+ "narHash": "sha256-YKOHUmc0Clm4tMV8grnxYL4IIwtjTayoq/3nqk0QM7k=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "b031b584125d33d23a0182f91ddbaf3ab4880236",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_2": {
+ "inputs": {
+ "flake-utils": "flake-utils_2",
+ "nixpkgs": "nixpkgs_11"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_3": {
+ "inputs": {
+ "flake-utils": "flake-utils_3",
+ "nixpkgs": "nixpkgs_13"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_4": {
+ "inputs": {
+ "flake-utils": "flake-utils_4",
+ "nixpkgs": "nixpkgs_16"
+ },
+ "locked": {
+ "lastModified": 1716171463,
+ "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_5": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_18"
+ },
+ "locked": {
+ "lastModified": 1739586408,
+ "narHash": "sha256-UN9hRKRE1eLU8C0cioTZubaCZQTA8NDc8/4vCpS5pS0=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "3dbc0ce1c0690b83cfb9a9a51fbe90c3bc8f9916",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "rust-overlay_6": {
+ "inputs": {
+ "flake-utils": "flake-utils_5",
+ "nixpkgs": "nixpkgs_20"
+ },
+ "locked": {
+ "lastModified": 1717035469,
+ "narHash": "sha256-MzH+yjKULH3HCRj9QCTwBvqq4LZkR0ZqRE/QfGOGC2E=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "095702e63a40e86f339d11864da9dc965b70a01e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "sops-nix": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_21"
+ },
+ "locked": {
+ "lastModified": 1739262228,
+ "narHash": "sha256-7JAGezJ0Dn5qIyA2+T4Dt/xQgAbhCglh6lzCekTVMeU=",
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "rev": "07af005bb7d60c7f118d9d9f5530485da5d1e975",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "type": "github"
+ }
+ },
+ "stable": {
+ "locked": {
+ "lastModified": 1740339700,
+ "narHash": "sha256-cbrw7EgQhcdFnu6iS3vane53bEagZQy/xyIkDWpCgVE=",
+ "owner": "NixOs",
+ "repo": "nixpkgs",
+ "rev": "04ef94c4c1582fd485bbfdb8c4a8ba250e359195",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOs",
+ "ref": "nixos-24.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "stylix": {
+ "inputs": {
+ "base16": "base16_3",
+ "base16-fish": "base16-fish",
+ "base16-helix": "base16-helix",
+ "base16-vim": "base16-vim",
+ "firefox-gnome-theme": "firefox-gnome-theme",
+ "flake-compat": "flake-compat_3",
+ "flake-utils": "flake-utils_6",
+ "git-hooks": "git-hooks_2",
+ "gnome-shell": "gnome-shell",
+ "home-manager": "home-manager_4",
+ "nixpkgs": "nixpkgs_22",
+ "nur": "nur",
+ "systems": "systems_9",
+ "tinted-foot": "tinted-foot",
+ "tinted-kitty": "tinted-kitty",
+ "tinted-schemes": "tinted-schemes",
+ "tinted-tmux": "tinted-tmux",
+ "tinted-zed": "tinted-zed"
+ },
+ "locked": {
+ "lastModified": 1740484771,
+ "narHash": "sha256-vVuuizPabugzTQtOKHB8NV/RC1PQWH6KxQtRW8Jqkyg=",
+ "owner": "danth",
+ "repo": "stylix",
+ "rev": "c9195530b40e2589a70d3bf4154d2f92de1fafca",
+ "type": "github"
+ },
+ "original": {
+ "owner": "danth",
+ "repo": "stylix",
+ "type": "github"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "type": "github"
+ }
+ },
+ "systems_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": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_4": {
+ "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_5": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_6": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_7": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_8": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "systems_9": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "tinted-foot": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1726913040,
+ "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
+ "owner": "tinted-theming",
+ "repo": "tinted-foot",
+ "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "tinted-foot",
+ "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
+ "type": "github"
+ }
+ },
+ "tinted-kitty": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1716423189,
+ "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
+ "owner": "tinted-theming",
+ "repo": "tinted-kitty",
+ "rev": "eb39e141db14baef052893285df9f266df041ff8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "tinted-kitty",
+ "rev": "eb39e141db14baef052893285df9f266df041ff8",
+ "type": "github"
+ }
+ },
+ "tinted-schemes": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1740351358,
+ "narHash": "sha256-Hdk850xgAd3DL8KX0AbyU7tC834d3Lej1jOo3duWiOA=",
+ "owner": "tinted-theming",
+ "repo": "schemes",
+ "rev": "a1bc2bd89e693e7e3f5764cfe8114e2ae150e184",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "schemes",
+ "type": "github"
+ }
+ },
+ "tinted-tmux": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1740272597,
+ "narHash": "sha256-/etfUV3HzAaLW3RSJVwUaW8ULbMn3v6wbTlXSKbcoWQ=",
+ "owner": "tinted-theming",
+ "repo": "tinted-tmux",
+ "rev": "b6c7f46c8718cc484f2db8b485b06e2a98304cd0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "tinted-tmux",
+ "type": "github"
+ }
+ },
+ "tinted-zed": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1725758778,
+ "narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=",
+ "owner": "tinted-theming",
+ "repo": "base16-zed",
+ "rev": "122c9e5c0e6f27211361a04fae92df97940eccf9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-zed",
+ "type": "github"
+ }
+ },
+ "treefmt-nix": {
+ "inputs": {
+ "nixpkgs": [
+ "dashvim",
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1738680491,
+ "narHash": "sha256-8X7tR3kFGkE7WEF5EXVkt4apgaN85oHZdoTGutCFs6I=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "64dbb922d51a42c0ced6a7668ca008dded61c483",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
+ },
+ "treefmt-nix_2": {
+ "inputs": {
+ "nixpkgs": [
+ "stylix",
+ "nur",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1733222881,
+ "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "49717b5af6f80172275d47a418c9719a31a78b53",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
+ },
+ "xdph": {
+ "inputs": {
+ "hyprland-protocols": [
+ "hyprland",
+ "hyprland-protocols"
+ ],
+ "hyprlang": [
+ "hyprland",
+ "hyprlang"
+ ],
+ "hyprutils": [
+ "hyprland",
+ "hyprutils"
+ ],
+ "hyprwayland-scanner": [
+ "hyprland",
+ "hyprwayland-scanner"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ],
+ "systems": [
+ "hyprland",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1737634991,
+ "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=",
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "type": "github"
+ }
+ },
+ "zen-browser": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_23"
+ },
+ "locked": {
+ "lastModified": 1740442108,
+ "narHash": "sha256-TfLmlndhcaGBzYMkv3QFrcwXJwony5apCBOWErKQov8=",
+ "owner": "youwen5",
+ "repo": "zen-browser-flake",
+ "rev": "4d82cf9b46b099c81758bd3fa2b5ce617db05532",
+ "type": "github"
+ },
+ "original": {
+ "owner": "youwen5",
+ "repo": "zen-browser-flake",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
index be1d5c2..4ae8f79 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,31 +2,31 @@
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";
+ nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
+ stable.url = "github:NixOs/nixpkgs/nixos-24.11";
nur.url = "github:nix-community/NUR";
- lanzaboote = {
- url = "github:nix-community/lanzaboote/v0.4.2";
- inputs.nixpkgs.follows = "unstable";
+
+ nix-flatpak = {
+ url = "github:gmodena/nix-flatpak";
};
- 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";
+ inputs.nixpkgs.follows = "nixpkgs";
};
- cachy.url = "github:xddxdd/nix-cachyos-kernel?rev=bb7b8aa687464f24dcd452354d9621331d6b0737";
sops-nix.url = "github:Mic92/sops-nix";
- hyprland.url = "github:hyprwm/Hyprland";
+ Hyprspace = {
+ url = "github:KZDKM/Hyprspace";
+ inputs.hyprland.follows = "hyprland";
+ };
+
+ hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
ironbar = {
url = "github:JakeStanger/ironbar";
- inputs.nixpkgs.follows = "unstable";
+ inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser.url = "github:youwen5/zen-browser-flake";
@@ -36,78 +36,119 @@
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";
+ oxicalc.url = "github:DashieTM/OxiCalc";
+ oxishut.url = "github:DashieTM/OxiShut";
+ oxinoti.url = "github:DashieTM/OxiNoti";
+ oxidash.url = "github:DashieTM/OxiDash";
+ oxipaste.url = "github:DashieTM/OxiPaste";
+ hyprdock.url = "github:DashieTM/hyprdock";
reset.url = "github:Xetibo/ReSet";
reset-plugins.url = "github:Xetibo/ReSet-Plugins";
- superfreq.url = "github:NotAShelf/superfreq";
+ # absolute insanity
+ chaoticNyx.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
- compose.url = "github:garnix-io/nixos-compose";
+ dashvim = {
+ url = "github:DashieTM/DashVim";
+ };
};
outputs = {self, ...} @ inputs: let
currentSystem = "x86_64-linux";
permittedPackages = [
"olm-3.2.16"
+ # well done dotnet...
+ # this is just for omnisharp
+ "dotnet-core-combined"
+ "dotnet-wrapped-combined"
+ "dotnet-combined"
+ "dotnet-sdk-6.0.428"
+ "dotnet-sdk-wrapped-6.0.428"
+ "dotnet-sdk-6.0.136"
+ "dotnet-sdk-wrapped-6.0.136"
+ "dotnet-sdk-7.0.120"
+ "dotnet-sdk-wrapped-7.0.120"
+ "dotnet-sdk-7.0.410"
+ "dotnet-sdk-wrapped-7.0.410"
+ "jitsi-meet-1.0.8043"
+ "nextcloud-27.1.11"
];
- importPkgsFn = import ./lib/importPkgs.nix;
- defaultConfigureFn = pkgs:
- importPkgsFn {
- inherit inputs currentSystem permittedPackages pkgs;
+ stable = import inputs.stable {
+ system = currentSystem;
+ config = {
+ allowUnfree = true;
+ permittedInsecurePackages = permittedPackages;
};
- stable = defaultConfigureFn inputs.stable;
- unstable = defaultConfigureFn inputs.unstable;
- pkgsDarkreader = defaultConfigureFn inputs.pkgsDarkreader;
+ overlays = [
+ inputs.nur.overlays.default
+ inputs.chaoticNyx.overlays.default
+ ];
+ };
+ pkgs = import inputs.nixpkgs {
+ system = currentSystem;
+ config = {
+ allowUnsupportedSystem = true;
+ permittedInsecurePackages = permittedPackages;
+ # Often happens with neovim, this should not block everything.
+ allowBroken = true;
+ allowUnfree = true;
+ };
+ overlays = [
+ inputs.nur.overlays.default
+ inputs.chaoticNyx.overlays.default
+ ];
+ };
in rec {
dashNixLib = import ./lib {
inherit
self
inputs
- unstable
- permittedPackages
+ pkgs
+ stable
;
- dashNixAdditionalProps = {
- inherit pkgsDarkreader;
- };
- system = currentSystem;
+ lib = inputs.nixpkgs.lib;
};
docs = import ./docs {
- inherit inputs;
- pkgs = unstable;
- system = currentSystem;
- inherit (inputs.unstable) lib;
- inherit (dashNixLib) buildSystems;
+ inherit inputs pkgs stable;
+ lib = inputs.nixpkgs.lib;
+ build_systems = dashNixLib.build_systems;
};
- lint = inputs.statix.packages.${currentSystem}.default;
- format = unstable.alejandra;
dashNixInputs = inputs;
stablePkgs = stable;
- unstablePkgs = unstable;
+ unstablePkgs = pkgs;
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
+ nixConfig = {
+ builders-use-substitutes = true;
- mv ~/gits/nixos/* ~/gits/backup_nixos/
- cp -r ${./example}/* ~/gits/nixos/
- '';
- };
+ 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://chaotic-nyx.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="
+ "chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
+ ];
};
}
diff --git a/home/common.nix b/home/common.nix
index fe2fa53..c1df32a 100644
--- a/home/common.nix
+++ b/home/common.nix
@@ -1,37 +1,40 @@
{
- mkDashDefault,
config,
lib,
- pkgs,
...
}: let
username = config.conf.username;
in {
manual = {
- html.enable = mkDashDefault false;
- json.enable = mkDashDefault false;
- manpages.enable = mkDashDefault false;
+ html.enable = false;
+ json.enable = false;
+ manpages.enable = false;
};
- fonts.fontconfig.enable = mkDashDefault true;
+ fonts.fontconfig.enable = true;
home = {
- username = mkDashDefault username;
- homeDirectory = mkDashDefault "/home/${username}";
+ username = username;
+ homeDirectory = "/home/${username}";
sessionPath = ["$HOME/.cargo/bin"];
- enableNixpkgsReleaseCheck = mkDashDefault false;
+ enableNixpkgsReleaseCheck = false;
sessionVariables = {
- GOROOT = mkDashDefault "$HOME/.go";
- QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
+ GOROOT = "$HOME/.go";
+ QT_QPA_PLATFORMTHEME = "qt5ct";
};
- keyboard = mkDashDefault null;
+ keyboard = null;
+
+ file.".local/share/flatpak/overrides/global".text = ''
+ [Context]
+ filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0
+ '';
};
programs.nix-index = {
- enable = mkDashDefault true;
- enableFishIntegration = mkDashDefault true;
+ enable = true;
+ enableFishIntegration = true;
};
nix = {
diff --git a/home/default.nix b/home/default.nix
index afc0ab3..f4fb47b 100644
--- a/home/default.nix
+++ b/home/default.nix
@@ -1,66 +1,42 @@
{
- mkDashDefault,
- dashNixAdditionalProps,
+ additionalHomeConfig,
+ additionalHomeMods,
+ additionalInputs,
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.config.common.default = "*";
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)
- ];
+ enable = true;
+ extraPortals = [pkgs.xdg-desktop-portal-gtk];
};
};
home-manager = {
- useGlobalPkgs = mkDashDefault true;
- useUserPackages = mkDashDefault true;
+ useGlobalPkgs = true;
+ useUserPackages = true;
extraSpecialArgs = {
- inherit
- inputs
- root
- alternativePkgs
- system
- stable
- unstable
- dashNixAdditionalProps
- ;
- mkDashDefault = import ../lib/override.nix {inherit lib;};
+ inherit inputs root additionalInputs alternativePkgs;
};
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;
+ ++ additionalHomeMods
+ ++ lib.optional (builtins.pathExists mod) mod
+ ++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig;
};
};
}
diff --git a/home/sync.nix b/home/sync.nix
index 38dceea..06b6a02 100644
--- a/home/sync.nix
+++ b/home/sync.nix
@@ -15,40 +15,44 @@
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";
+ 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"];
};
- 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
+ })
+ 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
+ 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
index 9976455..1e091a9 100644
--- a/home/themes/default.nix
+++ b/home/themes/default.nix
@@ -3,6 +3,5 @@
./qt.nix
./kdeglobals.nix
./oxiced.nix
- ./firefoxTheme.nix
];
}
diff --git a/home/themes/firefoxTheme.nix b/home/themes/firefoxTheme.nix
deleted file mode 100644
index 0de46f6..0000000
--- a/home/themes/firefoxTheme.nix
+++ /dev/null
@@ -1,327 +0,0 @@
-# css from https://github.com/catppuccin/zen-browser/tree/main/themes
-{
- config,
- inputs,
- pkgs,
- lib,
- ...
-}: let
- # at time of using this here, stylix might not be evaluated yet
- # hence ensure it is by using base16 mkSchemeAttrs
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- userChrome =
- /*
- css
- */
- ''
- /* Catppuccin Mocha Blue userContent.css*/
-
- @media (prefers-color-scheme: dark) {
-
- /* Common variables affecting all pages */
- @-moz-document url-prefix("about:") {
- :root {
- --in-content-page-color: #${scheme.base05} !important;
- --color-accent-primary: #${scheme.base0D} !important;
- --color-accent-primary-hover: rgb(163, 197, 251) !important; // TODO
- --color-accent-primary-active: rgb(138, 153, 250) !important; // TODO
- background-color: #${scheme.base00} !important;
- --in-content-page-background: #${scheme.base00} !important;
- }
-
- }
-
- /* Variables and styles specific to about:newtab and about:home */
- @-moz-document url("about:newtab"), url("about:home") {
-
- :root {
- --newtab-background-color: #${scheme.base00} !important;
- --newtab-background-color-secondary: #${scheme.base02} !important;
- --newtab-element-hover-color: #${scheme.base02} !important;
- --newtab-text-primary-color: #${scheme.base05} !important;
- --newtab-wordmark-color: #${scheme.base05} !important;
- --newtab-primary-action-background: #${scheme.base0D} !important;
- }
-
- .icon {
- color: #${scheme.base0D} !important;
- }
-
- .search-wrapper .logo-and-wordmark .logo {
- //background: url("zen-logo-mocha.svg"), url("https://raw.githubusercontent.com/IAmJafeth/zen-browser/main/themes/Mocha/Blue/zen-logo-mocha.svg") no-repeat center !important; // TODO
- display: inline-block !important;
- height: 82px !important;
- width: 82px !important;
- background-size: 82px !important;
- }
-
- @media (max-width: 609px) {
- .search-wrapper .logo-and-wordmark .logo {
- background-size: 64px !important;
- height: 64px !important;
- width: 64px !important;
- }
- }
-
- .card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title {
- color: #${scheme.base0D} !important;
- }
-
- .top-site-outer .search-topsite {
- background-color: #${scheme.base0D} !important;
- }
-
- .compact-cards .card-outer .card-context .card-context-icon.icon-download {
- fill: #${scheme.base0B} !important;
- }
- }
-
- /* Variables and styles specific to about:preferences */
- @-moz-document url-prefix("about:preferences") {
- :root {
- --zen-colors-tertiary: #${scheme.base01} !important;
- --in-content-text-color: #${scheme.base05} !important;
- --link-color: #${scheme.base0D} !important;
- --link-color-hover: rgb(163, 197, 251) !important; // TODO
- --zen-colors-primary: #${scheme.base02} !important;
- --in-content-box-background: #${scheme.base02} !important;
- --zen-primary-color: #${scheme.base0D} !important;
- }
-
- groupbox , moz-card{
- background: #${scheme.base00} !important;
- }
-
- button,
- groupbox menulist {
- background: #${scheme.base02} !important;
- color: #${scheme.base05} !important;
- }
-
- .main-content {
- background-color: #${scheme.base01} !important;
- }
-
- .identity-color-blue {
- --identity-tab-color: #8aadf4 !important; // TODO
- --identity-icon-color: #8aadf4 !important; // TODO
- }
-
- .identity-color-turquoise {
- --identity-tab-color: #8bd5ca !important; // TODO
- --identity-icon-color: #8bd5ca !important; // TODO
- }
-
- .identity-color-green {
- --identity-tab-color: #${scheme.base0B} !important;
- --identity-icon-color: #${scheme.base0B} !important;
- }
-
- .identity-color-yellow {
- --identity-tab-color: #eed49f !important; // TODO
- --identity-icon-color: #eed49f !important; // TODO
- }
-
- .identity-color-orange {
- --identity-tab-color: #f5a97f !important; // TODO
- --identity-icon-color: #f5a97f !important; // TODO
- }
-
- .identity-color-red {
- --identity-tab-color: #ed8796 !important; // TODO
- --identity-icon-color: #ed8796 !important; // TODO
- }
-
- .identity-color-pink {
- --identity-tab-color: #f5bde6 !important; // TODO
- --identity-icon-color: #f5bde6 !important; // TODO
- }
-
- .identity-color-purple {
- --identity-tab-color: #c6a0f6 !important; // TODO
- --identity-icon-color: #c6a0f6 !important; // TODO
- }
- }
-
- /* Variables and styles specific to about:addons */
- @-moz-document url-prefix("about:addons") {
- :root {
- --zen-dark-color-mix-base: #${scheme.base01} !important;
- --background-color-box: #${scheme.base00} !important;
- }
- }
-
- /* Variables and styles specific to about:protections */
- @-moz-document url-prefix("about:protections") {
- :root {
- --zen-primary-color: #${scheme.base00} !important;
- --social-color: #${scheme.base0E} !important;
- --coockie-color: #${scheme.base08} !important;
- --fingerprinter-color: #${scheme.base0A} !important;
- --cryptominer-color: #${scheme.base07} !important;
- --tracker-color: #${scheme.base0B} !important;
- --in-content-primary-button-background-hover: rgb(81, 83, 05) !important;
- --in-content-primary-button-text-color-hover: #${scheme.base05} !important;
- --in-content-primary-button-background: #${scheme.base03} !important;
- --in-content-primary-button-text-color: #${scheme.base05} !important;
- }
-
-
- .card {
- background-color: #${scheme.base02} !important;
- }
- }
- }
- '';
- userContent =
- /*
- css
- */
- ''
- /* Catppuccin Mocha Blue userChrome.css*/
- @media (prefers-color-scheme: dark) {
-
- :root {
- --zen-colors-primary: #${scheme.base02} !important;
- --zen-primary-color: #${scheme.base0D} !important;
- --zen-colors-secondary: #${scheme.base02} !important;
- --zen-colors-tertiary: #${scheme.base01} !important;
- --zen-colors-border: #${scheme.base0D} !important;
- --toolbarbutton-icon-fill: #${scheme.base0D} !important;
- --lwt-text-color: #${scheme.base05} !important;
- --toolbar-field-color: #${scheme.base05} !important;
- --tab-selected-textcolor: rgb(171, 197, 247) !important; // TODO
- --toolbar-field-focus-color: #${scheme.base05} !important;
- --toolbar-color: #${scheme.base05} !important;
- --newtab-text-primary-color: #${scheme.base05} !important;
- --arrowpanel-color: #${scheme.base05} !important;
- --arrowpanel-background: #${scheme.base00} !important;
- --sidebar-text-color: #${scheme.base05} !important;
- --lwt-sidebar-text-color: #${scheme.base05} !important;
- --lwt-sidebar-background-color: #${scheme.base01} !important; //TODO 11111b !important;
- --toolbar-bgcolor: #${scheme.base02} !important;
- --newtab-background-color: #${scheme.base00} !important;
- --zen-themed-toolbar-bg: #${scheme.base01} !important;
- --zen-main-browser-background: #${scheme.base01} !important;
- }
-
- #permissions-granted-icon{
- color: #${scheme.base01} !important;
- }
-
- .sidebar-placesTree {
- background-color: #${scheme.base00} !important;
- }
-
- #zen-workspaces-button {
- background-color: #${scheme.base00} !important;
- }
-
- #TabsToolbar {
- background-color: #${scheme.base01} !important;
- }
-
- #urlbar-background {
- background-color: #${scheme.base00} !important;
- }
-
- .content-shortcuts {
- background-color: #${scheme.base00} !important;
- border-color: #${scheme.base0D} !important;
- }
-
- .urlbarView-url {
- color: #${scheme.base0D} !important;
- }
-
- #zenEditBookmarkPanelFaviconContainer {
- background: #${scheme.base01} !important;
- }
-
- toolbar .toolbarbutton-1 {
- &:not([disabled]) {
- &:is([open], [checked]) > :is(.toolbarbutton-icon, .toolbarbutton-text, .toolbarbutton-badge-stack){
- fill: #${scheme.base01};
- }
- }
- }
-
- .identity-color-blue {
- --identity-tab-color: #${scheme.base0D} !important;
- --identity-icon-color: #${scheme.base0D} !important;
- }
-
- .identity-color-turquoise {
- --identity-tab-color: #${scheme.base0C} !important;
- --identity-icon-color: #${scheme.base0C} !important;
- }
-
- .identity-color-green {
- --identity-tab-color: #${scheme.base0B} !important;
- --identity-icon-color: #${scheme.base0B} !important;
- }
-
- .identity-color-yellow {
- --identity-tab-color: #${scheme.base0A} !important;
- --identity-icon-color: #${scheme.base0A} !important;
- }
-
- .identity-color-orange {
- --identity-tab-color: #${scheme.base09} !important;
- --identity-icon-color: #${scheme.base09} !important;
- }
-
- .identity-color-red {
- --identity-tab-color: #${scheme.base08} !important;
- --identity-icon-color: #${scheme.base08} !important;
- }
-
- .identity-color-pink {
- --identity-tab-color: #${scheme.base0F} !important;
- --identity-icon-color: #${scheme.base0F} !important; // TODO f5c2e7
- }
-
- .identity-color-purple {
- --identity-tab-color: #${scheme.base0E} !important;
- --identity-icon-color: #${scheme.base0E} !important;
- }
- }
- '';
- browsername = config.mods.homePackages.browser;
- profiles =
- if config.mods.homePackages.browser == "firefox"
- then config.mods.browser.firefox.profiles
- else if config.mods.homePackages.browser == "zen"
- then config.mods.browser.zen.profiles
- else if config.mods.homePackages.browser == "librewolf"
- then [
- {
- name = "default";
- value = {};
- }
- ]
- else [];
- profileNamesFn =
- builtins.catAttrs "name";
- chromesFn = builtins.map (
- name:
- if (builtins.isString browsername)
- then {
- ".${browsername}/${name}/chrome/userContent.css" = {
- text = userChrome;
- };
-
- ".${browsername}/${name}/chrome/userChrome.css" = {
- text = userContent;
- };
- }
- else {}
- );
- moduleFn = lib.lists.foldr (attr1: attr2: attr1 // attr2) {};
- mkFirefoxTheme = profiles:
- profiles
- |> profileNamesFn
- |> chromesFn
- |> moduleFn;
-in {home.file = mkFirefoxTheme profiles;}
diff --git a/home/themes/oxiced.nix b/home/themes/oxiced.nix
index 8a9e7dc..562ddd8 100644
--- a/home/themes/oxiced.nix
+++ b/home/themes/oxiced.nix
@@ -8,73 +8,20 @@
# 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;
+ base00 = scheme.base00;
+ base01 = scheme.base01;
+ base02 = scheme.base02;
+ base03 = scheme.base03;
+ base04 = scheme.base04;
+ base05 = scheme.base05;
+ base06 = scheme.base06;
+ base07 = scheme.base07;
+ base08 = scheme.base08;
+ base09 = scheme.base09;
base0a = scheme.base0A;
base0b = scheme.base0B;
base0c = scheme.base0C;
diff --git a/home/themes/qt.nix b/home/themes/qt.nix
index 21dc324..042c0f6 100644
--- a/home/themes/qt.nix
+++ b/home/themes/qt.nix
@@ -31,94 +31,92 @@
}
'';
in {
+ xdg.configFile."qt5ct/colors/tokyonight.conf" = {
+ text = "${color}";
+ };
+ xdg.configFile."qt6ct/colors/tokyonight.conf" = {
+ text = "${color}";
+ };
+ xdg.configFile."qt5ct/qss/tab.qss" = {
+ text = "${qss}";
+ };
stylix.targets.qt = {
enable = false;
};
qt = {
enable = true;
- style.package = pkgs.kdePackages.breeze;
+ style.package = pkgs.libsForQt5.breeze-qt5;
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 = ''
+ xdg.configFile."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
+ [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"
+ [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
+ [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)
+ [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 = ''
+ [Troubleshooting]
+ force_raster_widgets=1
+ ignored_applications=@Invalid()
+ '';
+ };
+ xdg.configFile."qt6ct/qt6ct.conf" = {
+ text = ''
- [Appearance]
- color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf
- custom_palette=true
- standard_dialogs=xdgdesktopportal
- style=Breeze
+ [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"
+ [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
+ [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()
- '';
- };
+ [Troubleshooting]
+ force_raster_widgets=1
+ ignored_applications=@Invalid()
+ '';
};
}
diff --git a/iso/configuration.nix b/iso/configuration.nix
index 9272a65..a17ba81 100644
--- a/iso/configuration.nix
+++ b/iso/configuration.nix
@@ -1,77 +1,53 @@
{
pkgs,
- modulesPath,
lib,
+ modulesPath,
self,
- inputs,
...
-}: let
- system = "x86_64-linux";
-in {
- imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"];
+}: {
+ imports = ["${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix"];
nixpkgs.hostPlatform = {
- inherit system;
+ system = "x86_64-linux";
};
environment.systemPackages = with pkgs; [
- inputs.dashvim.packages.${system}.minimal
+ neovim
disko
git
+ vesktop
+ vscodium
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";
-
+ # gnome is a good default that works with every gpu and doesn't require knowledge about custom keybinds.
services = {
+ xserver = {
+ enable = true;
+ displayManager = {
+ gdm.enable = true;
+ };
+ desktopManager = {
+ gnome.enable = true;
+ };
+ };
displayManager.autoLogin = {
enable = true;
user = "nixos";
};
- greetd = {
- enable = true;
- settings = {
- terminal.vt = 1;
- default_session = {
- command = "${lib.getExe pkgs.hyprland}";
- user = "nixos";
- };
- };
- };
};
isoImage = {
+ isoName = lib.mkForce "DashNix.iso";
makeEfiBootable = true;
makeUsbBootable = true;
contents = [
@@ -81,6 +57,4 @@ in {
}
];
};
-
- system.stateVersion = "25.11";
}
diff --git a/lib/default.nix b/lib/default.nix
index d8a7402..93408b3 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -1,191 +1,14 @@
{
inputs,
- unstable,
+ lib,
+ pkgs,
self,
- system,
- permittedPackages,
- dashNixAdditionalProps ? {},
+ stable,
...
-}: 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
+ # build_systems
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.
@@ -200,7 +23,7 @@ in rec {
# Example usage
:::{.example}
```nix
- nixosConfigurations = buildSystems { root = ./.; };
+ nixosConfigurations = build_systems { root = ./.; };
```
:::
*/
@@ -211,79 +34,100 @@ in rec {
# );
# in
- buildFunc = func: {
+ build_systems = {
root,
- unstableBundle ? {},
- stableBundle ? {},
+ additionalMods ? {
+ nixos = [];
+ home = [];
+ },
+ mods ? {
+ nixos = [
+ inputs.home-manager.nixosModules.home-manager
+ inputs.stylix.nixosModules.stylix
+ inputs.disko.nixosModules.disko
+ ../base
+ ../home
+ ../modules
+ ];
+ home = [
+ inputs.anyrun.homeManagerModules.default
+ inputs.ironbar.homeManagerModules.default
+ inputs.oxicalc.homeManagerModules.default
+ inputs.oxishut.homeManagerModules.default
+ inputs.oxinoti.homeManagerModules.default
+ inputs.oxidash.homeManagerModules.default
+ inputs.oxipaste.homeManagerModules.default
+ inputs.hyprdock.homeManagerModules.default
+ inputs.hyprland.homeManagerModules.default
+ inputs.reset.homeManagerModules.default
+ inputs.nix-flatpak.homeManagerModules.nix-flatpak
+ inputs.sops-nix.homeManagerModules.sops
+ inputs.dashvim.homeManagerModules.dashvim
+ ../modules
+ ];
+ },
+ additionalInputs ? {},
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
- ];
+ }:
+ builtins.listToAttrs (
+ map
+ (name: {
+ name = 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
+ root
+ ;
+ pkgs = lib.mkForce (
+ if overridePkgs
+ then stable
+ else pkgs
+ );
+ alternativePkgs =
+ if overridePkgs
+ then pkgs
+ else stable;
+ hostName = name;
+ homeMods = mods.home;
+ additionalHomeMods = additionalMods.home;
+ additionalInputs = additionalInputs;
+ };
+ in
+ inputs.nixpkgs.lib.nixosSystem {
+ modules =
+ [
+ {_module.args = args;}
+ mod
+ ]
+ ++ mods.nixos
+ ++ additionalMods.nixos
+ ++ inputs.nixpkgs.lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
+ ++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
+ };
+ })
+ (
+ lib.lists.remove "" (
+ lib.attrsets.mapAttrsToList (name: fType:
+ if fType == "directory"
+ then name
+ else "") (
+ builtins.readDir (root + /hosts)
+ )
+ )
+ )
+ );
- 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 {
+ buildIso = inputs.nixpkgs.lib.nixosSystem {
specialArgs = {
- inherit self inputs unstable;
+ inherit self inputs pkgs;
};
modules = [
../iso/configuration.nix
diff --git a/lib/foxextensions.nix b/lib/foxextensions.nix
deleted file mode 100644
index d2360ad..0000000
--- a/lib/foxextensions.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- lib,
- name,
- ...
-}: let
- mkExtension = id: install_url: {
- ${id} = {
- inherit install_url;
- installation_mode = "normal_installed";
- };
- };
-in {
- options.mods.browser.${name} = {
- darkreader = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to enable darkreader";
- };
- extensions = lib.mkOption {
- default = [
- (mkExtension "uBlock0@raymondhill.net" "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi")
- (mkExtension "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi")
- (mkExtension "{d7742d87-e61d-4b78-b8a1-b469842139fa}" "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi")
- (mkExtension "firefox@ghostery.com" "https://addons.mozilla.org/firefox/downloads/latest/ghostery/latest.xpi")
- (mkExtension "CanvasBlocker@kkapsner.de" "https://addons.mozilla.org/firefox/downloads/latest/canvasblocker/latest.xpi")
- (mkExtension "jid1-KKzOGWgsW3Ao4Q@jetpack" "https://addons.mozilla.org/firefox/downloads/latest/i-dont-care-about-cookies/latest.xpi")
- (mkExtension "keepassxc-browser@keepassxc.org" "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi")
- (mkExtension "@react-devtools" "https://addons.mozilla.org/firefox/downloads/latest/react-devtools/latest.xpi")
- (mkExtension "extension@redux.devtools" "https://addons.mozilla.org/firefox/downloads/latest/reduxdevtools/latest.xpi")
- (mkExtension "{20a9bb38-ed7c-4faf-9aaf-7c5d241fd747}" "https://addons.mozilla.org/firefox/downloads/file/4524699/angular_devtools-1.0.37.xpi")
- (mkExtension "private-relay@firefox.com" "https://addons.mozilla.org/firefox/downloads/latest/private-relay/latest.xpi")
- ];
- example = [
- {
- "78272b6fa58f4a1abaac99321d503a20@proton.me" = {
- install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/proton-pass/latest.xpi";
- installation_mode = "normal_installed";
- };
- }
- ];
- type = with lib.types; listOf anything;
- description = ''
- List of extensions via attrsets:
- ```nix
- # id
- # figure out the id via:
- # nix run github:tupakkatapa/mozid -- 'https://addons.mozilla.org/en/firefox/addon/ublock-origin'
- "uBlock0@raymondhill.net" = {
- # install url
- install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
- # method https://mozilla.github.io/policy-templates/#extensionsettings
- installation_mode = "force_installed";
- };
- ```
- '';
- };
- };
-}
diff --git a/lib/foxwrappers.nix b/lib/foxwrappers.nix
deleted file mode 100644
index e5c39a7..0000000
--- a/lib/foxwrappers.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-# https://github.com/0xc000022070/zen-browser-flake/issues/9#issuecomment-2711057434
-{inputs, ...}: let
- mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix";
-in {
- imports = [
- (mkFirefoxModule {
- modulePath = [
- "programs"
- "zen-browser"
- ];
- name = "Zen Browser";
- wrappedPackageName = "zen";
- unwrappedPackageName = "zen-unwrapped";
- visible = true;
- platforms = {
- linux = {
- vendorPath = ".zen";
- configPath = ".zen";
- };
- darwin = {
- configPath = "Library/Application Support/Zen";
- };
- };
- })
- (mkFirefoxModule {
- modulePath = [
- "programs"
- "librewolf-dashnix"
- ];
- name = "LibreWolf";
- description = "LibreWolf is a privacy enhanced Firefox fork.";
- wrappedPackageName = "librewolf";
- unwrappedPackageName = "librewolf-unwrapped";
-
- platforms.linux = {configPath = ".librewolf";};
- platforms.darwin = {
- configPath = "Library/Application Support/LibreWolf";
- };
-
- enableBookmarks = false;
- })
- ];
-}
diff --git a/lib/importPkgs.nix b/lib/importPkgs.nix
deleted file mode 100644
index cfcd413..0000000
--- a/lib/importPkgs.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- inputs,
- currentSystem,
- permittedPackages,
- pkgs,
-}:
-import pkgs {
- system = currentSystem;
- config = {
- allowUnfree = true;
- permittedInsecurePackages = permittedPackages;
- };
- overlays = [
- inputs.nur.overlays.default
- inputs.cachy.overlays.default
- ];
-}
diff --git a/lib/override.nix b/lib/override.nix
deleted file mode 100644
index 4d222f8..0000000
--- a/lib/override.nix
+++ /dev/null
@@ -1 +0,0 @@
-{lib, ...}: value: lib.mkOverride 999 value
diff --git a/lib/wm.nix b/lib/wm.nix
deleted file mode 100644
index 416956a..0000000
--- a/lib/wm.nix
+++ /dev/null
@@ -1,446 +0,0 @@
-let
- browserName = config:
- if (builtins.isString config.mods.homePackages.browser)
- then config.mods.homePackages.browser
- else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram
- then config.mods.homePackages.browser.meta.mainProgram
- else config.mods.homePackages.browser.pname;
- mkSimpleBind = modKeys: key: command: args: {
- inherit modKeys key command args;
- };
- mkRepeatSimpleBind = modKeys: key: command: args: {
- inherit modKeys key command args;
- meta.hyprland.repeat = true;
- };
- mkSimpleCustomBind = modKeys: key: niri: hyprland: args: {
- inherit modKeys key args;
- command = {
- inherit niri hyprland;
- };
- };
- mkRepeatCustomBind = modKeys: key: niri: hyprland: args: {
- inherit modKeys key args;
- command = {
- inherit niri hyprland;
- };
- meta.hyprland.repeat = true;
- };
- mkBindWithDesc = modKeys: key: command: args: desc:
- {
- meta.niri.desc = desc;
- }
- // mkSimpleBind modKeys key command args;
-in {
- defaultWindowRules = {
- niri = [
- ''
- match app-id=r#"^org\.keepassxc\.KeePassXC$"#
- match app-id=r#"^org\.gnome\.World\.Secrets$"#
-
- block-out-from "screen-capture"
- ''
- ''
- match app-id=r#"^steam$"#
- open-on-workspace "0"
- ''
- ''
- geometry-corner-radius 12
- clip-to-geometry true
- ''
- ];
- hyprland = [
- # window rules
- "match:class OxiCalc, float on"
- "match:class winecfg.exe, float on"
- "match:class copyq, float on"
- "match:class swappy, center on"
- "match:class steam, workspace 10 silent"
- ];
- };
-
- defaultStartup = config: {
- all = [
- "systemctl --user import-environment"
- "dbus-update-activation-environment --systemd --all"
- "hyprctl setcursor ${config.mods.stylix.cursor.name} ${toString config.mods.stylix.cursor.size}"
- # ensures the systemd service knows what "hyprctl" is :)
- (
- if config.mods.gaming.gamemode
- then "systemctl try-restart gamemoded.service --user"
- else ""
- )
-
- # other programs
- "${browserName config}"
- (
- if config.mods.oxi.hyprdock.enable
- then "hyprdock --server"
- else ""
- )
- (
- if config.mods.hypr.hyprpaper.enable
- then "hyprpaper"
- else ""
- )
- (
- if config.mods.hypr.hyprland.useIronbar
- then "ironbar"
- else ""
- )
- (
- if config.mods.oxi.oxipaste.enable
- then "oxipaste_daemon"
- else ""
- )
- (
- if config.mods.oxi.oxinoti.enable
- then "oxinoti"
- else ""
- )
- ];
- niri = [
- "XDG_CURRENT_DESKTOP=Niri"
- "XDG_SESSION_DESKTOP=Niri"
- "XDG_SESSION_TYPE=wayland"
- ];
- hyprland = [
- "XDG_CURRENT_DESKTOP=Hyprland"
- "XDG_SESSION_DESKTOP=Hyprland"
- "XDG_SESSION_TYPE=wayland"
- ];
- };
-
- defaultEnv = config: {
- all = {
- GTK_CSD = "0";
- TERM = "kitty /bin/fish";
- HYPRCURSOR_THEME = config.mods.stylix.cursor.name;
- HYPRCURSOR_SIZE = toString config.mods.stylix.cursor.size;
- XCURSOR_THEME = config.mods.stylix.cursor.name;
- XCURSOR_SIZE = toString config.mods.stylix.cursor.size;
- QT_QPA_PLATFORM = "wayland";
- QT_QPA_PLATFORMTHEME = "qt5ct";
- QT_WAYLAND_FORCE_DPI = "96";
- QT_AUTO_SCREEN_SCALE_FACTOR = "0";
- QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
- QT_SCALE_FACTOR = "1";
- EDITOR = "neovide --novsync --nofork";
-
- LIBVA_DRIVER_NAME =
- if config.mods.gpu.nvidia.enable
- then "nvidia"
- else "";
- GBM_BACKEND =
- if config.mods.gpu.nvidia.enable
- then "nvidia-drm"
- else "";
- __GLX_VENDOR_LIBRARY_NAME =
- if config.mods.gpu.nvidia.enable
- then "nvidia"
- else "";
- };
- niri = {};
- hyprland = {};
- };
-
- defaultBinds = config: [
- (mkSimpleBind ["Mod"] "1" "focusWorkspace" ["1"])
- (mkSimpleBind ["Mod"] "2" "focusWorkspace" ["2"])
- (mkSimpleBind ["Mod"] "3" "focusWorkspace" ["3"])
- (mkSimpleBind ["Mod"] "4" "focusWorkspace" ["4"])
- (mkSimpleBind ["Mod"] "5" "focusWorkspace" ["5"])
- (mkSimpleBind ["Mod"] "6" "focusWorkspace" ["6"])
- (mkSimpleBind ["Mod"] "7" "focusWorkspace" ["7"])
- (mkSimpleBind ["Mod"] "8" "focusWorkspace" ["8"])
- (mkSimpleBind ["Mod"] "9" "focusWorkspace" ["9"])
- (mkSimpleBind ["Mod"] "0" "focusWorkspace" ["10"])
- (mkSimpleBind ["Mod" "Shift"] "1" "moveToWorkspace" ["1"])
- (mkSimpleBind ["Mod" "Shift"] "2" "moveToWorkspace" ["2"])
- (mkSimpleBind ["Mod" "Shift"] "3" "moveToWorkspace" ["3"])
- (mkSimpleBind ["Mod" "Shift"] "4" "moveToWorkspace" ["4"])
- (mkSimpleBind ["Mod" "Shift"] "5" "moveToWorkspace" ["5"])
- (mkSimpleBind ["Mod" "Shift"] "6" "moveToWorkspace" ["6"])
- (mkSimpleBind ["Mod" "Shift"] "7" "moveToWorkspace" ["7"])
- (mkSimpleBind ["Mod" "Shift"] "8" "moveToWorkspace" ["8"])
- (mkSimpleBind ["Mod" "Shift"] "9" "moveToWorkspace" ["9"])
- (mkSimpleBind ["Mod" "Shift"] "0" "moveToWorkspace" ["10"])
- (mkSimpleBind ["Mod"] "B" "toggleFullscreen" [])
- (mkSimpleBind ["Mod"] "V" "toggleFloating" [])
- (mkSimpleBind ["Mod" "Shift"] "M" "quit" [])
- (mkSimpleBind ["Mod"] "Left" "moveWindowLeft" [])
- (mkSimpleBind ["Mod"] "Down" "moveWindowDown" [])
- (mkSimpleBind ["Mod"] "Up" "moveWindowUp" [])
- (mkSimpleBind ["Mod"] "Right" "moveWindowRight" [])
-
- (mkRepeatSimpleBind ["Mod"] "J" "moveFocusLeft" [])
- (mkRepeatSimpleBind ["Mod"] "K" "moveFocusDown" [])
- (mkRepeatSimpleBind ["Mod"] "L" "moveFocusUp" [])
- (mkRepeatSimpleBind ["Mod"] "semicolon" "moveFocusRight" [])
-
- (mkBindWithDesc ["Mod"] "Q" "killActive" [] "Kill active window")
-
- (mkBindWithDesc ["Mod"] "N" "spawn" ["neovide"] "Open Neovide")
- (mkBindWithDesc ["Mod"] "T" "spawn-sh" ["kitty" "-1"] "Open Kitty")
- (mkBindWithDesc ["Mod" "Shift"] "L" "spawn" ["hyprlock"] "Lock screen")
-
- (
- if config.mods.yazi.enable
- then mkBindWithDesc ["Mod"] "E" "spawn-sh" ["EDITOR='neovide --no-fork' kitty yazi"] "Open Yazi"
- else {}
- )
- (
- if config.mods.anyrun.enable
- then mkBindWithDesc ["Mod"] "R" "spawn" ["anyrun"] "Open Anyrun"
- else {}
- )
- (
- if config.mods.oxi.oxirun.enable
- then mkBindWithDesc ["Mod"] "R" "spawn" ["oxirun"] "Open OxiRun"
- else {}
- )
- (
- if config.mods.oxi.oxidash.enable
- then mkBindWithDesc ["Mod"] "M" "spawn" ["oxidash"] "Open OxiDash"
- else {}
- )
- (
- if config.mods.oxi.oxicalc.enable
- then mkBindWithDesc ["Mod"] "G" "spawn" ["oxicalc"] "Open Oxicalc"
- else {}
- )
- (
- if config.mods.oxi.oxishut.enable
- then mkBindWithDesc ["Mod"] "D" "spawn" ["oxishut"] "Open OxiShut"
- else {}
- )
- (
- if config.mods.oxi.oxipaste.enable
- then mkBindWithDesc ["Mod"] "A" "spawn" ["oxipaste"] "Open Oxipaste"
- else {}
- )
- (
- if config.mods.oxi.hyprdock.enable
- then mkBindWithDesc ["Mod" "Shift"] "P" "spawn" ["hyprdock --gui"] "Open Hyprdock"
- else {}
- )
- (
- if config.mods.hypr.hyprlock.enable
- then mkBindWithDesc ["Mod" "Shift" "Alt"] "L" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl suspend"] "Lock and suspend"
- else {}
- )
- (
- if config.mods.hypr.hyprlock.enable
- then mkBindWithDesc ["Mod" "Shift" "Alt"] "K" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl hibernate"] "Lock and hibernate"
- else {}
- )
-
- (mkBindWithDesc ["Mod"] "F" "spawn" ["${browserName config}"] "Open Browser")
- (
- if
- (
- browserName config == "firefox" || browserName config == "zen"
- )
- then mkBindWithDesc ["Mod" "Shift"] "F" "spawn" ["${browserName config} -p special"] "Open Browser Special Profile"
- else {}
- )
-
- (mkBindWithDesc ["Mod"] "S" "spawn-sh" [''grim -g "$(slurp)" - | wl-copy''] "Take Screenshot")
- (mkBindWithDesc ["Mod" "Shift"] "S" "spawn-sh" [''grim -g "$(slurp)" - | satty -f -''] "Take Screenshot and edit")
-
- (
- if config.mods.scripts.audioControl
- then {
- key = "XF86AudioMute";
- command = "spawn-sh";
- args = ["audioControl mute"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Mute Audio";
- };
- }
- else {}
- )
- (
- if config.mods.scripts.audioControl
- then {
- key = "XF86AudioRaiseVolume";
- command = "spawn-sh";
- args = ["audioControl +5%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Raise Audio Volume";
- };
- }
- else {}
- )
- (
- if config.mods.scripts.audioControl
- then {
- key = "XF86AudioLowerVolume";
- command = "spawn-sh";
- args = ["audioControl -5%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Lower Audio Volume";
- };
- }
- else {}
- )
- {
- key = "XF86AudioPlay";
- command = "spawn-sh";
- args = ["playerctl play-pause"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Play/Pause";
- };
- }
- {
- key = "XF86AudioNext";
- command = "spawn-sh";
- args = ["playerctl next"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Next Song";
- };
- }
- {
- key = "XF86AudioPrev";
- command = "spawn-sh";
- args = ["playerctl previous"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Previous Song";
- };
- }
- (
- if config.mods.scripts.changeBrightness
- then {
- key = "XF86MonBrightnessDown";
- command = "spawn-sh";
- args = ["changeBrightness -10%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Lower Brigthness";
- };
- }
- else {}
- )
- (
- if config.mods.scripts.changeBrightness
- then {
- key = "XF86MonBrightnessUp";
- command = "spawn-sh";
- args = ["changeBrightness +10%"];
- meta.niri = {
- allowWhileLocked = true;
- desc = "Raise Brigthness";
- };
- }
- else {}
- )
-
- # Niri only keybinds
- (mkSimpleCustomBind ["Mod"] "BracketLeft" "consume-or-expel-window-left" null [])
- (mkSimpleCustomBind ["Mod"] "BracketRight" "consume-or-expel-window-right" null [])
- (mkSimpleCustomBind ["Mod"] "Comma" "consume-window-into-column" null [])
- (mkSimpleCustomBind ["Mod"] "Period" "expel-window-from-column" null [])
- (mkSimpleCustomBind ["Mod"] "Y" "switch-preset-column-width" null [])
- (mkSimpleCustomBind ["Mod"] "Tab" "focus-workspace-previous" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "V" "switch-focus-between-floating-and-tiling" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "B" "expand-column-to-available-width" null [])
- (mkSimpleCustomBind ["Mod"] "U" "set-column-width" null ["-10%"])
- (mkSimpleCustomBind ["Mod"] "P" "set-column-width" null ["+10%"])
- (mkSimpleCustomBind ["Mod"] "O" "set-column-width" null ["50%"])
- (mkSimpleCustomBind ["Mod" "Shift"] "Minus" "set-window-height" null ["-10%"])
- (mkSimpleCustomBind ["Mod" "Shift"] "Equal" "set-window-height" null ["+10%"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "1" "move-column-to-workspace" null ["1"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "2" "move-column-to-workspace" null ["2"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "3" "move-column-to-workspace" null ["3"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "4" "move-column-to-workspace" null ["4"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "5" "move-column-to-workspace" null ["5"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "6" "move-column-to-workspace" null ["6"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "7" "move-column-to-workspace" null ["7"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "8" "move-column-to-workspace" null ["8"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "9" "move-column-to-workspace" null ["9"])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "0" "move-column-to-workspace" null ["10"])
- (mkSimpleCustomBind ["Mod" "Shift"] "J" "focus-monitor-left" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "semicolon" "focus-monitor-right" null [])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "J" "move-column-to-monitor-left" null [])
- (mkSimpleCustomBind ["Mod" "Ctrl"] "semicolon" "move-column-to-monitor-right" null [])
- (mkSimpleCustomBind ["Mod" "Shift"] "Slash" "show-hotkey-overlay" null [])
- {
- modKeys = ["Mod"];
- key = "W";
- command.niri = "toggle-overview";
- meta.niri = {
- desc = "Overview";
- repeat = false;
- };
- }
- {
- modKeys = ["Mod"];
- key = "Escape";
- command.niri = "toggle-keyboard-shortcuts-inhibit";
- meta.niri = {
- allowInhibit = false;
- };
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollUp";
- command.niri = "focus-workspace-up";
- meta.niri.cooldown = 150;
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollDown";
- command.niri = "focus-workspace-down";
- meta.niri.cooldown = 150;
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollRight";
- command.niri = "focus-column-right";
- meta.niri.cooldown = 150;
- }
- {
- modKeys = ["Mod"];
- key = "WheelScrollLeft";
- command.niri = "focus-column-left";
- meta.niri.cooldown = 150;
- }
-
- # Hyprland only keybinds
- (mkSimpleCustomBind ["Mod"] "C" null "togglesplit" [])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "1" null "movetoworkspacesilent" ["1"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "2" null "movetoworkspacesilent" ["2"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "3" null "movetoworkspacesilent" ["3"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "4" null "movetoworkspacesilent" ["4"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "5" null "movetoworkspacesilent" ["5"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "6" null "movetoworkspacesilent" ["6"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "7" null "movetoworkspacesilent" ["7"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "8" null "movetoworkspacesilent" ["8"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "9" null "movetoworkspacesilent" ["9"])
- (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "0" null "movetoworkspacesilent" ["10"])
- (mkRepeatCustomBind ["Mod"] "U" null "resizeactive" ["-20" "0"])
- (mkRepeatCustomBind ["Mod"] "P" null "resizeactive" ["20" "0"])
- (mkRepeatCustomBind ["Mod"] "O" null "resizeactive" ["0" "-20"])
- (mkRepeatCustomBind ["Mod"] "I" null "resizeactive" ["0" "20"])
- (mkSimpleCustomBind ["Mod" "ALT"] "J" null "layoutmsg" ["preselect" "l"])
- (mkSimpleCustomBind ["Mod" "ALT"] "K" null "layoutmsg" ["preselect" "d"])
- (mkSimpleCustomBind ["Mod" "ALT"] "L" null "layoutmsg" ["preselect" "u"])
- (mkSimpleCustomBind ["Mod" "ALT"] "semicolon" null "layoutmsg" ["preselect" "r"])
- (mkSimpleCustomBind ["Mod" "ALT"] "H" null "layoutmsg" ["preselect" "n"])
- (
- if config.mods.hypr.hyprland.hyprspaceEnable
- then {
- modKeys = ["Mod"];
- key = "W";
- command.hyprland = "overview:toggle";
- args = [];
- }
- else {}
- )
- ];
-}
diff --git a/modules/conf.nix b/modules/conf.nix
index 0e3a166..ed36389 100644
--- a/modules/conf.nix
+++ b/modules/conf.nix
@@ -1,6 +1,7 @@
{
lib,
config,
+ pkgs,
options,
...
}: {
@@ -19,40 +20,6 @@
'';
};
- 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;
@@ -61,6 +28,14 @@
'';
};
+ defualtDiskId = lib.mkOption {
+ default = "TODO";
+ example = "/dev/disk/by-id/nvme-Force_MP510_19498249000129196385";
+ description = ''
+ The id of the disk to format
+ '';
+ };
+
cpu = lib.mkOption {
# TODO: how to enable arm?
default = "amd";
@@ -75,7 +50,9 @@
};
additionalBootKernalParams = lib.mkOption {
- default = [];
+ default = [
+ "video=${config.conf.defaultMonitor}:${config.conf.defaultMonitorMode}"
+ ];
example = [];
type = with lib.types; listOf str;
description = ''
@@ -83,6 +60,49 @@
'';
};
+ defaultMonitor = lib.mkOption {
+ default = "";
+ example = "eDP-1";
+ type = lib.types.str;
+ description = ''
+ main monitor
+ '';
+ };
+
+ defaultMonitorMode = lib.mkOption {
+ default = "";
+ example = "3440x1440@180";
+ type = lib.types.str;
+ description = ''
+ main monitor mode: width x height @ refreshrate
+ '';
+ };
+
+ defaultMonitorScale = lib.mkOption {
+ default = "1";
+ example = "1.5";
+ type = lib.types.str;
+ description = ''
+ main monitor scaling
+ '';
+ };
+
+ ironbar = {
+ modules = lib.mkOption {
+ default = [];
+ example = [
+ {
+ type = "upower";
+ class = "memory-usage";
+ }
+ ];
+ type = with lib.types; listOf attrs;
+ description = ''
+ Adds modules to ironbar. See https://github.com/JakeStanger/ironbar/wiki/ for more information.
+ '';
+ };
+ };
+
bootParams = lib.mkOption {
default = [];
example = ["resume=something"];
@@ -92,6 +112,17 @@
'';
};
+ streamdeck = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ type = lib.types.bool;
+ description = ''
+ Install streamdeck configuration program.
+ '';
+ };
+ };
+
kernelOverride = lib.mkOption {
default = null;
type = with lib.types; nullOr package;
@@ -103,7 +134,7 @@
};
username = lib.mkOption {
- default = "DashNix";
+ default = "dashie";
example = "pingpang";
type = lib.types.str;
description = ''
diff --git a/modules/programs/anyrun.nix b/modules/programs/anyrun.nix
deleted file mode 100644
index b1b7922..0000000
--- a/modules/programs/anyrun.nix
+++ /dev/null
@@ -1,145 +0,0 @@
-{
- mkDashDefault,
- lib,
- config,
- pkgs,
- options,
- inputs,
- ...
-}: {
- options.mods.anyrun = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables anyrun";
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured anyrun config.
- '';
- };
- customConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom anyrun configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- useDefaultCss = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured anyrun css.
- '';
- };
- customCss = lib.mkOption {
- default = '''';
- example = ''
- #window {
- border-radius: none;
- }
- '';
- type = lib.types.lines;
- description = ''
- Custom anyrun css.
- Will be merged with default css if enabled.
- '';
- };
- };
-
- config = lib.mkIf config.mods.anyrun.enable (
- lib.optionalAttrs (options ? home.packages) {
- programs.anyrun = lib.mkForce {
- package = pkgs.anyrun;
- enable = true;
- config =
- if config.mods.anyrun.useDefaultConfig
- then
- lib.mkMerge
- [
- {
- plugins = [
- inputs.anyrun.packages.${pkgs.system}.applications
- inputs.anyrun.packages.${pkgs.system}.rink
- inputs.anyrun.packages.${pkgs.system}.translate
- inputs.anyrun.packages.${pkgs.system}.websearch
- ];
- hideIcons = mkDashDefault false;
- width = {
- fraction = mkDashDefault 0.3;
- };
- y = {
- fraction = mkDashDefault 0.5;
- };
- layer = mkDashDefault "overlay";
- hidePluginInfo = mkDashDefault true;
- closeOnClick = mkDashDefault true;
- }
- config.mods.anyrun.customConfig
- ]
- else config.mods.anyrun.customConfig;
-
- extraCss =
- if config.mods.anyrun.useDefaultCss
- then
- ''
- #window {
- border-radius: 10px;
- background-color: transparent;
- }
-
- box#main {
- border-radius: 10px;
- }
-
- list#main {
- border-radius: 10px;
- margin: 0px 10px 10px 10px;
- }
-
- list#plugin {
- border-radius: 10px;
- }
-
- list#match {
- border-radius: 10px;
- }
-
- entry#entry {
- border: 0;
- border-radius: 10px;
- margin: 10px 10px 0px 10px;
- }
-
- label#match-desc {
- font-size: 12px;
- border-radius: 10px;
- }
-
- label#match-title {
- font-size: 12px;
- border-radius: 10px;
- }
-
- label#plugin {
- font-size: 16px;
- border-radius: 10px;
- }
-
- * {
- border-radius: 10px;
- }
- ''
- + config.mods.anyrun.customCss
- else config.mods.anyrun.customCss;
- };
- }
- );
-}
diff --git a/modules/programs/basePackages.nix b/modules/programs/basePackages.nix
index 1d1b2b9..635a2a7 100644
--- a/modules/programs/basePackages.nix
+++ b/modules/programs/basePackages.nix
@@ -1,11 +1,8 @@
{
- mkDashDefault,
config,
lib,
options,
pkgs,
- inputs,
- system,
...
}: {
options.mods = {
@@ -52,7 +49,6 @@
then
with pkgs;
[
- inputs.statix.packages.${system}.default
adwaita-icon-theme
dbus
dconf
@@ -68,6 +64,7 @@
icon-library
kdePackages.breeze-icons
kdePackages.breeze
+ libsForQt5.breeze-qt5
kdePackages.qtstyleplugin-kvantum
libsForQt5.qtstyleplugin-kvantum
libadwaita
@@ -77,24 +74,23 @@
seahorse
upower
xorg.xkbutils
- sbctl
]
++ config.mods.basePackages.additionalPackages
else config.mods.basePackages.additionalPackages;
- gtk.iconCache.enable = mkDashDefault false;
+ gtk.iconCache.enable = false;
services =
if config.mods.basePackages.enable
then
{
- upower.enable = mkDashDefault true;
+ upower.enable = true;
dbus = {
- enable = mkDashDefault true;
+ enable = true;
};
avahi = {
- enable = mkDashDefault true;
- nssmdns4 = mkDashDefault true;
- openFirewall = mkDashDefault true;
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
};
}
// config.mods.basePackages.specialServices
@@ -103,30 +99,27 @@
programs =
if config.mods.basePackages.enable
then
- lib.mkMerge
- [
- {
- nix-ld = {
- enable = mkDashDefault true;
- libraries = with pkgs; [
- jdk
- zlib
- ];
+ {
+ nix-ld = {
+ enable = true;
+ libraries = with pkgs; [
+ jdk
+ zlib
+ ];
+ };
+ direnv = {
+ package = pkgs.direnv;
+ silent = false;
+ loadInNixShell = true;
+ direnvrcExtra = "";
+ nix-direnv = {
+ enable = true;
+ package = pkgs.nix-direnv;
};
- 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
- ]
+ };
+ gnupg.agent.enable = true;
+ }
+ // config.mods.basePackages.specialPrograms
else config.mods.basePackages.specialPrograms;
};
}
diff --git a/modules/programs/bluetooth.nix b/modules/programs/bluetooth.nix
index f0e2ef1..e09b382 100644
--- a/modules/programs/bluetooth.nix
+++ b/modules/programs/bluetooth.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
lib,
config,
options,
@@ -19,8 +18,8 @@
config = lib.mkIf config.mods.bluetooth.enable (
lib.optionalAttrs (options ? hardware.bluetooth) {
hardware.bluetooth = {
- enable = mkDashDefault true;
- powerOnBoot = mkDashDefault true;
+ enable = true;
+ powerOnBoot = true;
};
}
);
diff --git a/modules/programs/browser/brave.nix b/modules/programs/browser/brave.nix
index 404fddd..9a09e7e 100644
--- a/modules/programs/browser/brave.nix
+++ b/modules/programs/browser/brave.nix
@@ -14,7 +14,7 @@
};
# TODO configure brave
};
- config = lib.mkIf (config.mods.browser.brave.enable || config.mods.homePackages.browser == "brave") (
+ config = lib.mkIf config.mods.browser.brave.enable (
lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [brave];
}
diff --git a/modules/programs/browser/chromium.nix b/modules/programs/browser/chromium.nix
index 5d48046..7ed237a 100644
--- a/modules/programs/browser/chromium.nix
+++ b/modules/programs/browser/chromium.nix
@@ -14,7 +14,7 @@
};
# TODO configure chromium
};
- config = lib.mkIf (config.mods.browser.chromium.enable || config.mods.homePackages.browser == "chromium") (
+ config = lib.mkIf config.mods.browser.chromium.enable (
lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [chromium];
}
diff --git a/modules/programs/browser/default.nix b/modules/programs/browser/default.nix
index ade4ecf..a7436d9 100644
--- a/modules/programs/browser/default.nix
+++ b/modules/programs/browser/default.nix
@@ -1,9 +1,8 @@
{
imports = [
- ./brave.nix
- ./chromium.nix
./firefox.nix
- ./librewolf.nix
./zen.nix
+ ./chromium.nix
+ ./brave.nix
];
}
diff --git a/modules/programs/browser/firefox.nix b/modules/programs/browser/firefox.nix
index d93ac58..048263d 100644
--- a/modules/programs/browser/firefox.nix
+++ b/modules/programs/browser/firefox.nix
@@ -1,18 +1,11 @@
{
lib,
- dashNixAdditionalProps,
config,
options,
pkgs,
...
-}: let
- name = "firefox";
-in {
- imports = [
- (import ../../../lib/foxextensions.nix
- {inherit lib dashNixAdditionalProps pkgs name;})
- ];
- options.mods.browser.${name} = {
+}: {
+ options.mods.browser.firefox = {
enable = lib.mkOption {
default = false;
example = true;
@@ -77,7 +70,7 @@ in {
value = {
isDefault = true;
id = 0;
- extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
+ extensions.packages = [ pkgs.nur.repos.rycee.firefox-addons.darkreader ];
};
}
];
@@ -85,39 +78,11 @@ in {
description = "Firefox profiles";
};
};
- config = lib.mkIf (config.mods.browser.firefox.enable || config.mods.homePackages.browser == "firefox") (
+ config = lib.mkIf config.mods.browser.firefox.enable (
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 []
- ));
- };
- };
+ policies = config.mods.browser.firefox.configuration;
profiles = builtins.listToAttrs config.mods.browser.firefox.profiles;
};
}
diff --git a/modules/programs/browser/librewolf.nix b/modules/programs/browser/librewolf.nix
deleted file mode 100644
index fc74bf3..0000000
--- a/modules/programs/browser/librewolf.nix
+++ /dev/null
@@ -1,119 +0,0 @@
-{
- lib,
- dashNixAdditionalProps,
- config,
- options,
- pkgs,
- ...
-}: let
- name = "librewolf";
-in {
- imports = [
- (import ../../../lib/foxextensions.nix
- {inherit lib dashNixAdditionalProps pkgs name;})
- ];
- options.mods.browser.${name} = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the librwolf browser";
- };
- configuration = lib.mkOption {
- default = {
- EnableTrackingProtection = {
- Value = true;
- Locked = true;
- Cryptomining = true;
- Fingerprinting = true;
- };
- DisablePocket = true;
- DisplayBookmarksToolbar = "never";
- DisplayMenuBar = "default-off";
- CaptivePortal = false;
- DisableFirefoxStudies = true;
- DisableTelemetry = true;
- DisableFirefoxAccounts = false;
- NoDefaultBookmarks = true;
- OfferToSaveLogins = false;
- OfferToSaveLoginsDefault = false;
- PasswordManagerEnabled = false;
- FirefoxHome = {
- Search = true;
- Pocket = false;
- Snippets = false;
- TopSites = true;
- Highlights = false;
- };
- UserMessaging = {
- ExtensionRecommendations = false;
- SkipOnboarding = true;
- };
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "Librewolf policy configuration. See https://mozilla.github.io/policy-templates/ for more information.";
- };
- profiles = lib.mkOption {
- default = [
- {
- name = "${config.conf.username}";
- value = {
- isDefault = true;
- id = 0;
- };
- }
- {
- name = "special";
- value = {
- isDefault = false;
- id = 1;
- };
- }
- ];
- example = [
- {
- name = "custom";
- value = {
- isDefault = true;
- id = 0;
- extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
- };
- }
- ];
- type = with lib.types; listOf (attrsOf anything);
- description = "Librewolf profiles";
- };
- };
- config = lib.mkIf (config.mods.browser.librewolf.enable || config.mods.homePackages.browser == "librewolf") (
- lib.optionalAttrs (options ? home.packages) {
- programs.librewolf-dashnix = {
- enable = true;
- package =
- pkgs.wrapFirefox
- pkgs.librewolf-unwrapped
- {
- pname = "librewolf";
- extraPolicies =
- config.mods.browser.librewolf.configuration
- // {
- ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.librewolf.extensions
- ++ (
- if config.mods.browser.firefox.darkreader
- then [
- {
- "addon@darkreader.org" = {
- install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
- installation_mode = "normal_installed";
- };
- }
- ]
- else []
- ));
- };
- };
- profiles = builtins.listToAttrs config.mods.browser.librewolf.profiles;
- };
- }
- );
-}
diff --git a/modules/programs/browser/zen.nix b/modules/programs/browser/zen.nix
index db32900..96ef32c 100644
--- a/modules/programs/browser/zen.nix
+++ b/modules/programs/browser/zen.nix
@@ -1,157 +1,23 @@
-# 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,
+ 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;
- name = "zen";
-in {
- imports = [
- (import ../../../lib/foxextensions.nix
- {inherit lib dashNixAdditionalProps pkgs name;})
- ];
- options.mods.browser.${name} = {
+}: {
+ options.mods.browser.zen = {
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";
- };
+ # TODO configure zen
};
- 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;
- })
+ config = lib.mkIf config.mods.browser.zen.enable (
+ lib.optionalAttrs (options ? home.packages) {
+ home.packages = [inputs.zen-browser.packages."${system}".default];
+ }
);
}
diff --git a/modules/programs/clam.nix b/modules/programs/clam.nix
deleted file mode 100644
index e212529..0000000
--- a/modules/programs/clam.nix
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- lib,
- config,
- options,
- pkgs,
- ...
-}: {
- options.mods.clam = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables the clamav program and its daemon";
- };
- scanner = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables the clamav scanner";
- };
- interval = lib.mkOption {
- type = lib.types.str;
- default = "*-*-* 04:00:00";
- description = ''
- How often clamdscan is invoked.
- By default this runs using 10 cores at most, be sure to run it at a time of low traffic.
- '';
- };
- scanDirectories = lib.mkOption {
- type = with lib.types; listOf str;
- default = [
- "/home"
- "/var/lib"
- "/tmp"
- "/etc"
- "/var/tmp"
- ];
- description = ''List of directories to scan'';
- };
- };
- };
- config = lib.mkIf config.mods.clam.enable (
- lib.optionalAttrs (options ? services.clamav) {
- services.clamav = {
- daemon.enable = true;
- updater.enable = true;
- scanner = {
- inherit (config.mods.clam.scanner) enable;
- inherit (config.mods.clam.scanner) interval;
- inherit (config.mods.clam.scanner) scanDirectories;
- };
- };
- environment.systemPackages = [
- pkgs.clamav
- ];
- }
- // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [clamtk];}
- );
-}
diff --git a/modules/programs/coding.nix b/modules/programs/coding.nix
index 5a22205..c26d365 100644
--- a/modules/programs/coding.nix
+++ b/modules/programs/coding.nix
@@ -1,15 +1,10 @@
{
- mkDashDefault,
lib,
config,
pkgs,
options,
- inputs,
- system,
...
-}: let
- font_family = "${config.mods.stylix.fonts.monospace.name}";
-in {
+}: {
options.mods = {
coding = {
enable = lib.mkOption {
@@ -52,86 +47,6 @@ in {
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;
@@ -180,6 +95,7 @@ in {
default = with pkgs; [
typst
tinymist
+ ltex-ls
];
example = [];
type = with lib.types; listOf package;
@@ -307,15 +223,13 @@ in {
packages = lib.mkOption {
default = with pkgs; [
#.!
- (with dotnetCorePackages;
- combinePackages [
- sdk_8_0
- sdk_9_0
- ])
+ dotnet-sdk
+ omnisharp-roslyn
csharpier
netcoredbg
+ #fsharp
fsharp
- fsautocomplete
+ #fsautocomplete
];
example = [];
type = with lib.types; listOf package;
@@ -335,8 +249,8 @@ in {
};
packages = lib.mkOption {
default = with pkgs; [
- bear
- gdb
+ # broke
+ #bear
gcc
clang-tools
];
@@ -513,45 +427,47 @@ in {
d-spy
tmux
tmate
- inputs.compose.packages.${system}.default
];
+ font_family = "${config.mods.stylix.fonts.monospace.name}";
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;
+ colorscheme = config.mods.stylix.colorscheme;
};
programs.vscode = lib.mkIf config.mods.coding.vscodium.enable {
enable = true;
- package = mkDashDefault pkgs.vscodium;
+ package = 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;
+ xdg.configFile."neovide/config.toml" = lib.mkIf config.mods.coding.dashvim {
+ source = (pkgs.formats.toml {}).generate "neovide" {
+ 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";
+ };
+ };
};
};
-
home.packages = with pkgs;
[
- (lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) neovide)
+ (lib.mkIf config.mods.coding.dashvim 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)
diff --git a/modules/programs/containers.nix b/modules/programs/containers.nix
index b62ee25..aacf6f4 100644
--- a/modules/programs/containers.nix
+++ b/modules/programs/containers.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
lib,
config,
options,
@@ -43,37 +42,39 @@
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 {};
- };
+ 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 = true;
+ defaultNetwork.settings.dns_enabled = 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
index 08a4a2d..3248690 100644
--- a/modules/programs/default.nix
+++ b/modules/programs/default.nix
@@ -1,16 +1,12 @@
{
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
@@ -21,8 +17,7 @@
./gpu.nix
./greetd.nix
./homePackages.nix
- ./hypr
- ./ironbar.nix
+ ./hyprland
./kde.nix
./kdeConnect.nix
./keepassxc.nix
@@ -31,8 +26,6 @@
./mime.nix
./ncspot.nix
./nextcloud.nix
- ./niri.nix
- ./onedrive.nix
./oxi
./piper.nix
./plymouth.nix
@@ -41,14 +34,11 @@
./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
index a631802..8e463d2 100644
--- a/modules/programs/drives.nix
+++ b/modules/programs/drives.nix
@@ -4,309 +4,135 @@
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;
+ options.mods = {
+ drives = {
+ useSwap = {
+ enable = lib.mkOption {
+ default = true;
+ example = false;
+ type = lib.types.bool;
+ description = ''
+ Use default drive config
+ '';
+ };
+ };
+ defaultDrives = {
+ enable = lib.mkOption {
+ default = true;
+ example = false;
+ type = lib.types.bool;
+ description = ''
+ Use default drive config
+ '';
+ };
+ };
+ extraDrives = lib.mkOption {
+ default = [
+ ];
+ example = [
+ {
+ name = "drive2";
+ drive = {
+ device = "/dev/disk/by-label/DRIVE2";
+ fsType = "ext4";
+ options = [
+ "noatime"
+ "nodiratime"
+ "discard"
+ ];
+ };
+ }
+ ];
+ # TODO: how to make this work
+ # type = with lib.types; listOf (attrsOf driveModule);
+ type = with lib.types; listOf (attrsOf anything);
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.
+ Extra drives to add.
'';
};
};
- 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"
- ];
+ };
+
+ config = (
+ lib.optionalAttrs (options ? fileSystems) {
+ disko.devices = {
+ disk =
+ {
+ main = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
+ device = "${config.conf.defaultDiskId}";
+ type = "disk";
+ content = {
+ type = "gpt";
+ partitions = {
+ root = {
+ start = "33G";
+ end = "30%";
+ content = {
+ type = "filesystem";
+ format = "btrfs";
+ 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 = "30%";
+ end = "100%";
+ content = {
+ type = "filesystem";
+ format = "btrfs";
+ mountpoint = "/home";
+ 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
- );
- };
- };
+ // builtins.listToAttrs (
+ map (
+ {
+ name,
+ drive,
+ }: {
+ name = "/" + name;
+ value = drive;
+ }
+ )
+ config.mods.drives.extraDrives
+ );
+ };
+ }
+ );
}
diff --git a/modules/programs/fancontrol.nix b/modules/programs/fancontrol.nix
deleted file mode 100644
index 8abf24d..0000000
--- a/modules/programs/fancontrol.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- lib,
- pkgs,
- config,
- options,
- ...
-}: {
- options.mods.fancontrol = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables fancontrol-gui with needed drivers";
- };
- forceId = lib.mkOption {
- default = null;
- example = "force_id=0x8628";
- type = with lib.types; nullOr str;
- description = "Modprobe options for the it87 driver. Information at: https://wiki.archlinux.org/title/Lm_sensors#Gigabyte_B250/Z370/B450M/B560M/B660M/Z690/B550_motherboards";
- };
- };
- config = lib.mkIf config.mods.fancontrol.enable (
- lib.optionalAttrs (options ? home.packages) {
- home.packages = [pkgs.fancontrol-gui];
- }
- // (lib.optionalAttrs (options ? boot.kernelModules) {
- boot = {
- kernelParams = ["acpi_enforce_resources=lax"];
- extraModulePackages = with config.boot.kernelPackages; [liquidtux it87];
- kernelModules = ["v4l2loopback" "it87"];
- extraModprobeConfig = lib.mkIf (config.mods.fancontrol.forceId != null) ''
- options it87 ${config.mods.fancontrol.forceId}
- '';
- };
- })
- );
-}
diff --git a/modules/programs/fastfetch.nix b/modules/programs/fastfetch.nix
deleted file mode 100644
index 9953d84..0000000
--- a/modules/programs/fastfetch.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- pkgs,
- lib,
- options,
- config,
- ...
-}: {
- options.mods.dashfetch = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "A custom configuration for fastfetch";
- };
- modules = lib.mkOption {
- default = [
- "title"
- "separator"
- {
- type = "os";
- key = "OS";
- format = "DashNix ({name} {version})";
- }
- "host"
- "kernel"
- "uptime"
- "packages"
- "shell"
- "display"
- "de"
- "wm"
- "wmtheme"
- "theme"
- "icons"
- "font"
- "cursor"
- "terminal"
- "terminalfont"
- "cpu"
- "gpu"
- "memory"
- "swap"
- "disk"
- "localip"
- "battery"
- "poweradapter"
- "locale"
- "break"
- "colors"
- ];
- example = [];
- type = with lib.types; listOf anything;
- description = "modules for fastfetch";
- };
- };
-
- config = lib.optionalAttrs (options ? home.packages) {
- xdg.configFile."fastfetch/config.jsonc" = lib.mkIf config.mods.dashfetch.enable {
- source =
- (pkgs.formats.json {}).generate "config.jsonc"
- {
- "$schema" = "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json";
- logo = {
- type = "kitty";
- source = ../../assets/logo2.png;
- width = 35;
- padding = {
- top = 1;
- };
- };
- modules = config.mods.dashfetch.modules;
- };
- };
- };
-}
diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix
index 1d8c8c8..fc89e95 100644
--- a/modules/programs/fish.nix
+++ b/modules/programs/fish.nix
@@ -52,11 +52,9 @@ in {
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"
@@ -70,7 +68,7 @@ in {
abbr --add cat 'bat'
abbr --add find 'fd'
abbr --add rm 'rip'
- abbr --add cp 'cpz'
+ abbr --add cp 'fcp'
abbr --add cd 'z'
abbr --add y 'yazi'
diff --git a/modules/programs/flatpak.nix b/modules/programs/flatpak.nix
index 68ec2da..7c13e9b 100644
--- a/modules/programs/flatpak.nix
+++ b/modules/programs/flatpak.nix
@@ -7,15 +7,37 @@
}: {
options.mods.flatpak = {
enable = lib.mkOption {
- default = false;
- example = true;
+ default = true;
+ example = false;
type = lib.types.bool;
description = "Enables the flatpak package manager";
};
+ additional_packages = lib.mkOption {
+ default = [];
+ example = [];
+ type = with lib.types; listOf str;
+ description = "Flatpak packages";
+ };
};
config = lib.mkIf config.mods.flatpak.enable (
- lib.optionalAttrs (options ? environment.systemPackages) {
+ lib.optionalAttrs (options ? services.flatpak.remote) {
environment.systemPackages = [pkgs.flatpak];
+ services.flatpak.remotes = lib.mkOptionDefault [
+ {
+ name = "flathub-stable";
+ location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
+ }
+ ];
+ services.flatpak.uninstallUnmanaged = true;
+ }
+ // lib.optionalAttrs (options ? services.flatpak.packages) {
+ services.flatpak.packages =
+ [
+ # fallback if necessary, but generally avoided as nix is superior :)
+ # default flatseal installation since flatpak permissions are totally not a broken idea
+ "com.github.tchx84.Flatseal"
+ ]
+ ++ config.mods.flatpak.additional_packages;
}
);
}
diff --git a/modules/programs/gaming.nix b/modules/programs/gaming.nix
index 6c3eb0a..8d1fdd3 100644
--- a/modules/programs/gaming.nix
+++ b/modules/programs/gaming.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
lib,
config,
options,
@@ -15,33 +14,24 @@
};
tools = lib.mkOption {
default = with pkgs; [
- protonplus
- gamescope
gamemode
steam
- # TODO broken
- # lutris
+ lutris
wineWowPackages.stable
adwsteamgtk
- heroic
+ # TODO broken
+ #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;
+ default = true;
+ example = false;
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.)
- '';
+ description = "Whether to use the CachyOS kernel";
};
steam = lib.mkOption {
default = true;
@@ -55,18 +45,6 @@
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;
@@ -79,67 +57,30 @@
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;
- };
+ boot.kernelPackages = lib.mkForce pkgs.linuxPackages_cachyos;
programs = {
- steam.enable = mkDashDefault config.mods.gaming.steam;
+ steam.enable = config.mods.gaming.steam;
gamemode.enable = true;
gamemode = {
+ enableRenice = true;
settings = {
general = {
- desiredgov = mkDashDefault "performance";
- };
- cpu = {
- pin_cores = mkDashDefault config.mods.gaming.pinCores;
- park_cores = mkDashDefault config.mods.gaming.parkCores;
+ desiredgov = "performance";
};
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;
+ apply_gpu_optimisations = "accept-responsibility";
+ gpu_device = config.mods.gaming.gpuDevice;
+ amd_performance_level = "high";
+ nv_powermizer_mode = 1;
};
custom = {
- start = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations activated'";
- end = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations deactivated'";
+ start = "notify-send -a 'Gamemode' 'Optimizations activated'";
+ end = "notify-send -a 'Gamemode' 'Optimizations deactivated'";
};
};
};
diff --git a/modules/programs/git.nix b/modules/programs/git.nix
index 57c1623..dec2aa5 100644
--- a/modules/programs/git.nix
+++ b/modules/programs/git.nix
@@ -6,13 +6,13 @@
}: {
options.mods.git = {
username = lib.mkOption {
- default = "";
+ default = "DashieTM";
example = "globi";
type = lib.types.str;
description = "Git user name";
};
email = lib.mkOption {
- default = "";
+ default = "fabio.lenherr@gmail.com";
example = "globi@globus.glob";
type = lib.types.str;
description = "Git email";
@@ -34,31 +34,40 @@
description = "Additional git config";
};
sshConfig = lib.mkOption {
- default = "";
- example = ''
+ default = ''
Host github.com
${
if (config ? sops.secrets && config.sops.secrets ? hub.path)
then "IdentityFile ${config.sops.secrets.hub.path}"
else ""
}
+ Host gitlab.com
+ ${
+ if (config ? sops.secrets && config.sops.secrets ? lab.path)
+ then "IdentityFile ${config.sops.secrets.lab.path}"
+ else ""
+ }
+ Host dashie.org
+ ${
+ if (config ? sops.secrets && config.sops.secrets ? dashie.path)
+ then "IdentityFile ${config.sops.secrets.dashie.path}"
+ else ""
+ }
'';
+ example = "";
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;
- };
+ config = (
+ lib.optionalAttrs (options ? programs.git && options ? home.file) {
+ programs.git = {
+ enable = true;
+ userName = config.mods.git.username;
+ userEmail = config.mods.git.email;
+ extraConfig = config.mods.git.additionalConfig;
+ };
+ home.file.".ssh/config".text = config.mods.git.sshConfig;
+ }
+ );
}
diff --git a/modules/programs/gnomeServices.nix b/modules/programs/gnomeServices.nix
index 29bdea8..01ab872 100644
--- a/modules/programs/gnomeServices.nix
+++ b/modules/programs/gnomeServices.nix
@@ -71,7 +71,6 @@
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
index 023b462..56083db 100644
--- a/modules/programs/gpu.nix
+++ b/modules/programs/gpu.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
lib,
config,
options,
@@ -67,16 +66,16 @@
environment.variables =
if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable)
then {
- RUSTICL_ENABLE = mkDashDefault "radeonsi";
+ RUSTICL_ENABLE = "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;
+ modesetting.enable = true;
+ open = true;
+ nvidiaSettings = true;
+ package = config.boot.kernelPackages.nvidiaPackages.beta;
};
graphics = let
amdPackages = [
@@ -87,8 +86,8 @@
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)
+ (lib.mkIf config.mods.gpu.vapi.enable pkgs.vaapiVdpau)
+ (lib.mkIf (config.mods.gpu.intelgpu.enable || config.mods.gpu.amdgpu.enable) pkgs.mesa.drivers)
];
rocmPackages = [
pkgs.rocmPackages.clr.icd
@@ -101,7 +100,7 @@
];
in {
enable = true;
- enable32Bit = mkDashDefault true;
+ enable32Bit = lib.mkDefault 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
index fe3e455..01c13a3 100644
--- a/modules/programs/greetd.nix
+++ b/modules/programs/greetd.nix
@@ -1,11 +1,9 @@
{
- mkDashDefault,
config,
lib,
inputs,
pkgs,
options,
- system,
...
}: {
options.mods = {
@@ -19,10 +17,7 @@
'';
};
monitor = lib.mkOption {
- default =
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else "";
+ default = "${config.conf.defaultMonitor}";
example = "eDP-1";
type = lib.types.str;
description = ''
@@ -31,10 +26,7 @@
'';
};
scale = lib.mkOption {
- default =
- if config.mods.wm.monitors != []
- then builtins.toString (builtins.elemAt config.mods.wm.monitors 0).scale
- else "";
+ default = "${config.conf.defaultMonitorScale}";
example = "1.5";
type = lib.types.str;
description = ''
@@ -44,23 +36,16 @@
};
greeterCommand = lib.mkOption {
default = "${
- lib.getExe inputs.hyprland.packages.${system}.hyprland
+ lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland
} --config /etc/greetd/hyprgreet.conf";
example = "${
lib.getExe pkgs.cage
- } -s -- ${lib.getExe pkgs.regreet}";
+ } -s -- ${lib.getExe pkgs.greetd.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 "";
+ default = "${config.conf.defaultMonitorMode}";
example = "3440x1440@180";
type = lib.types.str;
description = ''
@@ -69,13 +54,12 @@
};
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)
+ inputs.hyprland.packages.${config.conf.system}.hyprland
];
# no idea if these are written correctly
example = [
pkgs.niri
- pkgs.river-classic
+ pkgs.river
pkgs.swayfx
];
type = with lib.types; listOf package;
@@ -97,21 +81,21 @@
};
config = let
- inherit (config.conf) username;
+ username = config.conf.username;
in
lib.mkIf config.mods.greetd.enable (
lib.optionalAttrs (options ? environment) {
# greetd display manager
- programs.hyprland.enable = mkDashDefault true;
+ programs.hyprland.enable = true;
services = {
displayManager.sessionPackages = config.mods.greetd.environments;
greetd = {
enable = true;
settings = {
- terminal.vt = mkDashDefault 1;
+ terminal.vt = 1;
default_session = {
- command = mkDashDefault config.mods.greetd.greeterCommand;
- user = mkDashDefault username;
+ command = config.mods.greetd.greeterCommand;
+ user = username;
};
};
};
@@ -131,8 +115,6 @@
misc {
disable_splash_rendering = false
disable_hyprland_logo = true
- disable_xdg_env_checks = true
- disable_scale_notification = true
}
env=STATE_DIR,var/cache/regreet
@@ -147,13 +129,9 @@
'';
# unlock GPG keyring on login
- security.pam = {
- services.greetd = {
- enableGnomeKeyring = mkDashDefault true;
- sshAgentAuth = mkDashDefault true;
- };
- sshAgentAuth.enable = mkDashDefault true;
- };
+ security.pam.services.greetd.enableGnomeKeyring = true;
+ security.pam.services.greetd.sshAgentAuth = true;
+ security.pam.sshAgentAuth.enable = true;
}
// lib.optionalAttrs (options ? home) {
xdg.configFile."regreet/regreet.toml".source =
diff --git a/modules/programs/homePackages.nix b/modules/programs/homePackages.nix
index 6a995f0..223283d 100644
--- a/modules/programs/homePackages.nix
+++ b/modules/programs/homePackages.nix
@@ -3,9 +3,12 @@
options,
config,
pkgs,
+ inputs,
...
-}
-: {
+}: let
+ # TODO remove when chromium works again
+ fixedVesktop = pkgs.vesktop.override {electron = pkgs.electron_33;};
+in {
options.mods.homePackages = {
useDefaultPackages = lib.mkOption {
default = true;
@@ -56,12 +59,6 @@
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;
@@ -75,23 +72,18 @@
description = "The email client";
};
browser = lib.mkOption {
- default = "zen";
+ default = inputs.zen-browser.packages.${pkgs.system}.default;
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
@@ -99,14 +91,13 @@
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.vesktop fixedVesktop)
(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 (!isNull config.mods.homePackages.matrixClient) config.mods.homePackages.matrixClient)
+ (lib.mkIf (!isNull config.mods.homePackages.mailClient) 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
+ builtins.isAttrs config.mods.homePackages.browser && !isNull config.mods.homePackages.browser
)
config.mods.homePackages.browser)
adw-gtk3
@@ -119,7 +110,7 @@
flake-checker
gnome-keyring
gnutar
- regreet
+ greetd.regreet
killall
kitty
libnotify
@@ -128,11 +119,11 @@
nh
nix-index
playerctl
- poppler-utils
+ poppler_utils
pulseaudio
libsForQt5.qt5ct
- qt6Packages.qt6ct
- fuc
+ qt6ct
+ fcp
ripgrep
rm-improved
system-config-printer
@@ -148,7 +139,22 @@
warn_timeout = "-1s";
};
};
- programs = config.mods.homePackages.specialPrograms;
- services = config.mods.homePackages.specialServices;
+ programs =
+ config.mods.homePackages.specialPrograms
+ // (
+ if config.mods.homePackages.browser == "firefox"
+ then {
+ firefox = {
+ enable = true;
+ policies = config.mods.browser.firefox.configuration;
+ profiles = builtins.listToAttrs config.mods.browser.firefox.profiles;
+ };
+ }
+ else {}
+ );
+ services =
+ if config.mods.homePackages.useDefaultPackages
+ then config.mods.homePackages.specialServices
+ else config.mods.homePackages.specialServices;
};
}
diff --git a/modules/programs/hypr/hyprland.nix b/modules/programs/hypr/hyprland.nix
deleted file mode 100644
index 442b964..0000000
--- a/modules/programs/hypr/hyprland.nix
+++ /dev/null
@@ -1,357 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- options,
- pkgs,
- ...
-}: let
- defaultWmConf = import ../../../lib/wm.nix;
-in {
- options.mods.hypr.hyprland = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enable Hyprland
- '';
- };
- noAtomic = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Use tearing (Warning, can be buggy)
- '';
- };
- useIronbar = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Whether to use ironbar in hyprland.
- '';
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured Hyprland config.
- '';
- };
- customConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom Hyprland configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- plugins = lib.mkOption {
- default = [];
- example = [];
- type = with lib.types; listOf package;
- description = ''
- Plugins to be added to Hyprland.
- '';
- };
- pluginConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Plugin configuration to be added to Hyprland.
- '';
- };
- hyprspaceEnable = lib.mkOption {
- default = false;
- type = lib.types.bool;
- example = true;
- description = ''
- Enables Hyprspace plugin for hyprland.
- Please note, plugins tend to break VERY often.
- '';
- };
- };
-
- config = lib.mkIf config.mods.hypr.hyprland.enable (
- lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
- # install Hyprland related packages
- home.packages = with pkgs; [
- xorg.xprop
- grim
- slurp
- satty
- xdg-desktop-portal-gtk
- xdg-desktop-portal-gnome
- kdePackages.xdg-desktop-portal-kde
- xdg-desktop-portal-shana
- copyq
- wl-clipboard
- hyprcursor
- hyprpicker
- ];
-
- wayland.windowManager.hyprland = let
- mkWorkspace = workspaces:
- builtins.map (workspace: let
- default =
- if workspace.default
- then ",default:true"
- else "";
- in "${workspace.name},monitor:${workspace.monitor}${default}")
- workspaces;
- mkTransform = transform:
- if transform == "0"
- then 0
- else if transform == "90"
- then 1
- else if transform == "180"
- then 2
- else if transform == "270"
- then 3
- else 4;
- mkVrr = vrr:
- if vrr
- then "1"
- else "0";
- mkMonitors = monitors:
- builtins.map (
- monitor: "${monitor.name},${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate},${builtins.toString monitor.positionX}x${builtins.toString monitor.positionY},${builtins.toString monitor.scale}, transform,${builtins.toString (mkTransform monitor.transform)}, vrr,${mkVrr monitor.vrr}"
- )
- monitors;
-
- mkMods = bind: let
- mods = bind.modKeys or [];
- in
- builtins.map (mod:
- if mod == "Mod"
- then (lib.strings.toUpper config.mods.wm.modKey) + " "
- else lib.strings.toUpper mod)
- mods
- |> lib.strings.concatStringsSep "";
- mkArgs = args:
- if args != []
- then (lib.strings.concatStringsSep " " args)
- else "";
- shouldRepeat = bind: bind ? meta && bind.meta ? hyprland && bind.meta.hyprland ? repeat && bind.meta.hyprland.repeat == true;
-
- defaultBinds = cfg:
- if cfg.mods.wm.useDefaultBinds
- then defaultWmConf.defaultBinds cfg
- else [];
-
- mkEBinds = cfg: let
- binds = cfg.mods.wm.binds ++ defaultBinds cfg;
- in
- binds
- |> builtins.filter (bind: bind ? command && shouldRepeat bind && !(hasInvalidCustomCommand bind))
- |> builtins.map (
- bind: "${mkMods bind},${bind.key},${mkCommand bind}"
- );
- mkBinds = cfg: let
- binds = cfg.mods.wm.binds ++ defaultBinds cfg;
- in
- binds
- |> builtins.filter (bind: bind ? command && !(shouldRepeat bind) && !(hasInvalidCustomCommand bind))
- |> builtins.map (
- bind: "${mkMods bind},${bind.key},${mkCommand bind}"
- );
- mkCommand = bind: let
- args = bind.args or [];
- in
- if bind.command == "quit"
- then "exit"
- else if bind.command == "killActive"
- then "killactive"
- else if bind.command == "moveWindowRight"
- then "movewindow,r"
- else if bind.command == "moveWindowDown"
- then "movewindow,d"
- else if bind.command == "moveWindowLeft"
- then "movewindow,l"
- else if bind.command == "moveWindowUp"
- then "movewindow,u"
- else if bind.command == "moveFocusUp"
- then "movefocus,u"
- else if bind.command == "moveFocusRight"
- then "movefocus,r"
- else if bind.command == "moveFocusDown"
- then "movefocus,d"
- else if bind.command == "moveFocusLeft"
- then "movefocus,l"
- else if bind.command == "toggleFloating"
- then "togglefloating"
- else if bind.command == "toggleFullscreen"
- then "fullscreen"
- else if bind.command == "focusWorkspace"
- then "workspace" + "," + mkArgs args
- else if bind.command == "moveToWorkspace"
- then "movetoworkspace" + "," + mkArgs args
- else if bind.command == "spawn"
- then "exec" + "," + mkArgs args
- else if bind.command == "spawn-sh"
- then "exec" + "," + mkArgs args
- else bind.command.hyprland + "," + mkArgs args;
- hasInvalidCustomCommand = bind: !(builtins.isString bind.command) && bind.command.hyprland or null == null;
-
- mkEnv = config: let
- defaultEnv =
- if config.mods.wm.useDefaultEnv
- then defaultWmConf.defaultEnv config
- else {
- all = {};
- hyprland = {};
- };
- userEnv =
- if config.mods.wm.env ? all
- then config.mods.wm.env.all // config.mods.wm.env.hyprland
- else config.mods.wm.env;
- env = userEnv // defaultEnv.all // defaultEnv.hyprland;
- in
- lib.attrsets.mapAttrsToList (
- name: value: "${name},${value}"
- )
- env;
- mkAutoStart = config: let
- defaultStartup =
- if config.mods.wm.useDefaultStartup
- then defaultWmConf.defaultStartup config
- else {
- all = [];
- hyprland = [];
- };
- userStartup =
- if config.mods.wm.startup ? all
- then config.mods.wm.startup.all ++ config.mods.wm.startup.hyprland
- else config.mods.wm.startup;
- autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.hyprland;
- in
- autoStart;
- mkWindowRule = config: let
- defaultWindowRules =
- if config.mods.wm.useDefaultWindowRules
- then defaultWmConf.defaultWindowRules.hyprland
- else [];
- in
- # defaultWindowRules ++ config.mods.wm.windowRules.hyprland;
- defaultWindowRules;
- in {
- enable = true;
- plugins =
- [
- (lib.mkIf config.mods.hypr.hyprland.hyprspaceEnable pkgs.hyprlandPlugins.hyprspace)
- ]
- ++ config.mods.hypr.hyprland.plugins;
- settings =
- if config.mods.hypr.hyprland.useDefaultConfig
- then
- lib.mkMerge
- [
- {
- "$mod" = mkDashDefault config.mods.wm.modKey;
-
- bindm = [
- "$mod, mouse:272, movewindow"
- "$mod, mouse:273, resizeactive"
- ];
-
- general = {
- gaps_out = mkDashDefault "3,5,5,5";
- border_size = mkDashDefault 3;
- "col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
- allow_tearing = lib.mkIf config.mods.hypr.hyprland.noAtomic true;
- };
-
- decoration = {
- rounding = mkDashDefault 4;
- };
-
- render = {
- direct_scanout = mkDashDefault config.mods.gaming.enable;
- };
-
- animations = {
- bezier = mkDashDefault "overshot, 0.05, 0.9, 0.1, 1.2";
- animation = [
- "windowsMove,1,4,default"
- "windows,1,3,overshot,slide bottom"
- "windowsOut,1,7,default,popin 70%"
- "border,1,4,default"
- "fade,1,7,default"
- "workspaces,1,4,default"
- "layers,1,2,default,slide"
- ];
- };
-
- dwindle = {
- preserve_split = mkDashDefault true;
- pseudotile = mkDashDefault 0;
- permanent_direction_override = mkDashDefault false;
- };
-
- input = {
- kb_layout = mkDashDefault "${config.mods.xkb.layout}";
- kb_variant = mkDashDefault "${config.mods.xkb.variant}";
- repeat_delay = mkDashDefault 200;
- force_no_accel = mkDashDefault true;
- touchpad = {
- natural_scroll = mkDashDefault true;
- tap-to-click = mkDashDefault true;
- tap-and-drag = mkDashDefault true;
- };
- };
-
- misc = {
- animate_manual_resizes = mkDashDefault 1;
- enable_swallow = mkDashDefault true;
- disable_splash_rendering = mkDashDefault true;
- disable_hyprland_logo = mkDashDefault true;
- disable_xdg_env_checks = mkDashDefault true;
- disable_scale_notification = mkDashDefault true;
- swallow_regex = mkDashDefault "^(.*)(kitty)(.*)$";
- initial_workspace_tracking = mkDashDefault 1;
- # just doesn't work
- enable_anr_dialog = false;
- };
-
- cursor = {
- enable_hyprcursor = mkDashDefault true;
- no_hardware_cursors = mkDashDefault (
- if config.mods.gpu.nvidia.enable
- then 2
- else 0
- );
- # done with nix, this would break the current setup otherwise
- sync_gsettings_theme = mkDashDefault false;
- };
-
- gesture = [
- "3, horizontal, workspace"
- ];
-
- layerrule = [
- # layer rules
- # mainly to disable animations within slurp and grim
- "match:namespace selection, no_anim on"
- ];
-
- workspace = mkWorkspace config.mods.wm.workspaces;
- monitor = mkMonitors config.mods.wm.monitors;
- env = mkEnv config;
- bind = mkBinds config;
- binde = mkEBinds config;
- windowrule = mkWindowRule config;
- exec-once = mkAutoStart config;
- plugin = config.mods.hypr.hyprland.pluginConfig;
- }
- config.mods.hypr.hyprland.customConfig
- ]
- else lib.mkForce config.mods.hypr.hyprland.customConfig;
- };
- }
- );
-}
diff --git a/modules/programs/hypr/hyprlock.nix b/modules/programs/hypr/hyprlock.nix
deleted file mode 100644
index c152b22..0000000
--- a/modules/programs/hypr/hyprlock.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- config,
- lib,
- options,
- pkgs,
- ...
-}: {
- options.mods.hypr.hyprlock = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables Hyprlock";
- };
- config = lib.mkOption {
- default = {
- background = [
- {
- monitor = "";
- path = "";
- color = "rgba(26, 27, 38, 1.0)";
- }
- ];
-
- input-field = [
- {
- monitor = "${
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else ""
- }";
- placeholder_text = "password or something";
- }
- ];
-
- label = [
- {
- monitor = "${
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else ""
- }";
- text = "$TIME";
- font_size = 50;
- position = "0, 200";
- valign = "center";
- halign = "center";
- }
- ];
- };
- example = {};
- type = with lib.types; attrsOf anything;
- description = "config";
- };
- };
-
- config = lib.mkIf config.mods.hypr.hyprlock.enable (
- lib.optionalAttrs (options ? xdg.configFile) {
- stylix.targets.hyprlock = {
- enable = false;
- };
- home.packages = with pkgs; [hyprlock];
- programs.hyprlock = lib.mkIf config.mods.hypr.hyprlock.enable {
- enable = true;
- settings = config.mods.hypr.hyprlock.config;
- };
- }
- );
-}
diff --git a/modules/programs/hypr/hyprpaper.nix b/modules/programs/hypr/hyprpaper.nix
deleted file mode 100644
index b392b54..0000000
--- a/modules/programs/hypr/hyprpaper.nix
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- config,
- lib,
- options,
- pkgs,
- ...
-}: {
- options.mods.hypr.hyprpaper = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables Hyprpaper";
- };
- config = lib.mkOption {
- default = "";
- example = ''
- preload = path/to/wallpaper
- wallpaper = YOURMONITOR,path/to/wallpaper
- '';
- type = lib.types.lines;
- description = ''
- Hyprpaper config
- '';
- };
- };
-
- config = lib.mkIf config.mods.hypr.hyprpaper.enable (
- lib.optionalAttrs (options ? xdg.configFile) {
- home.packages = with pkgs; [hyprpaper];
- xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hypr.hyprpaper.enable {
- text = config.mods.hypr.hyprpaper.config;
- };
- }
- );
-}
diff --git a/modules/programs/hyprland/anyrun.nix b/modules/programs/hyprland/anyrun.nix
new file mode 100644
index 0000000..832a0be
--- /dev/null
+++ b/modules/programs/hyprland/anyrun.nix
@@ -0,0 +1,145 @@
+{
+ lib,
+ config,
+ pkgs,
+ options,
+ inputs,
+ ...
+}: {
+ options.mods = {
+ hyprland = {
+ anyrun = {
+ enable = lib.mkOption {
+ default = true;
+ example = false;
+ 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.hyprland.anyrun.enable (
+ lib.optionalAttrs (options ? programs.anyrun) {
+ programs.anyrun = {
+ enable = true;
+ config =
+ if config.mods.hyprland.anyrun.useDefaultConfig
+ then
+ {
+ 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;
+ }
+ // config.mods.hyprland.anyrun.customConfig
+ else config.mods.hyprland.anyrun.customConfig;
+
+ extraCss =
+ if config.mods.hyprland.anyrun.useDefaultCss
+ then
+ ''
+ #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;
+ }
+ ''
+ + config.mods.hyprland.anyrun.customCss
+ else config.mods.hyprland.anyrun.customCss;
+ };
+ }
+ );
+}
diff --git a/modules/programs/hypr/default.nix b/modules/programs/hyprland/default.nix
similarity index 69%
rename from modules/programs/hypr/default.nix
rename to modules/programs/hyprland/default.nix
index 68b88ea..a181f64 100644
--- a/modules/programs/hypr/default.nix
+++ b/modules/programs/hyprland/default.nix
@@ -1,6 +1,8 @@
{
imports = [
./hyprland.nix
+ ./anyrun.nix
+ ./ironbar.nix
./hyprlock.nix
./hyprpaper.nix
];
diff --git a/modules/programs/hyprland/hyprland.nix b/modules/programs/hyprland/hyprland.nix
new file mode 100644
index 0000000..503c992
--- /dev/null
+++ b/modules/programs/hyprland/hyprland.nix
@@ -0,0 +1,401 @@
+{
+ config,
+ lib,
+ options,
+ pkgs,
+ inputs,
+ ...
+}: 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 = {
+ hyprland = {
+ enable = lib.mkOption {
+ default = true;
+ example = false;
+ type = lib.types.bool;
+ description = ''
+ Enable Hyprland
+ '';
+ };
+ monitor = lib.mkOption {
+ default = [
+ # main monitor
+ "${config.conf.defaultMonitor},${config.conf.defaultMonitorMode},0x0,${config.conf.defaultMonitorScale}"
+ # all others
+ ",highrr,auto,1"
+ ];
+ example = ["DP-1,3440x1440@180,2560x0,1,vrr,0"];
+ type = with lib.types; listOf str;
+ description = ''
+ The monitor configuration for hyprland.
+ '';
+ };
+ workspace = lib.mkOption {
+ default = [];
+ example = ["2,monitor:DP-1, default:true"];
+ type = with lib.types; listOf str;
+ description = ''
+ The workspace configuration for hyprland.
+ '';
+ };
+ noAtomic = lib.mkOption {
+ default = false;
+ example = true;
+ type = lib.types.bool;
+ description = ''
+ Use tearing
+ '';
+ };
+ extraAutostart = lib.mkOption {
+ default = [];
+ example = ["your application"];
+ type = lib.types.listOf lib.types.str;
+ description = ''
+ Extra exec_once.
+ '';
+ };
+ 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.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-hyprland
+ copyq
+ wl-clipboard
+ hyprcursor
+ hyprpicker
+ ];
+
+ wayland.windowManager.hyprland = {
+ enable = true;
+ settings =
+ if config.mods.hyprland.useDefaultConfig
+ then
+ {
+ "$mod" = "SUPER";
+
+ bindm = [
+ "$mod, mouse:272, movewindow"
+ "$mod, mouse:273, resizeactive"
+ ];
+
+ bind = [
+ # screenshots
+ ''$mod SUPER,S,exec,grim -g "$(slurp)" - | wl-copy''
+ ''$mod SUPERSHIFT,S,exec,grim -g "$(slurp)" - | satty -f -''
+ ''$mod SUPERSHIFTALT,S,exec,grim -c -g "2560,0 3440x1440" - | wl-copy''
+
+ # regular programs
+ "$mod SUPER,F,exec,${browserName}"
+ (lib.mkIf (
+ browserName == "firefox" || browserName == "zen"
+ ) "$mod SUPERSHIFT,F,exec,${browserName} -p special")
+ "$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-iced"
+ "$mod SUPERSHIFT,P,exec,hyprdock --gui"
+ "$mod SUPERSHIFT,L,exec, playerctl -a pause & hyprlock & systemctl suspend"
+ "$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate"
+
+ # media keys
+ (lib.mkIf config.mods.scripts.audioControl ",XF86AudioMute,exec, audioControl mute")
+ (lib.mkIf config.mods.scripts.audioControl ",XF86AudioLowerVolume,exec, audioControl sink -5%")
+ (lib.mkIf config.mods.scripts.audioControl ",XF86AudioRaiseVolume,exec, audioControl sink +5%")
+ ",XF86AudioPlay,exec, playerctl play-pause"
+ ",XF86AudioNext,exec, playerctl next"
+ ",XF86AudioPrev,exec, playerctl previous"
+ (lib.mkIf config.mods.scripts.changeBrightness ",XF86MonBrightnessDown,exec, change-brightness brightness 10%-")
+ (lib.mkIf config.mods.scripts.changeBrightness ",XF86MonBrightnessUp,exec, change-brightness brightness +10%")
+
+ # hyprland keybinds
+ # misc
+ "$mod SUPER,V,togglefloating,"
+ "$mod SUPER,B,fullscreen,"
+ "$mod SUPER,C,togglesplit"
+ "$mod SUPER,Q,killactive,"
+ "$mod SUPERSHIFTALT,M,exit,"
+ "$mod SUPERSHIFT,W,togglespecialworkspace"
+
+ # move
+ "$mod SUPER,left,movewindow,l"
+ "$mod SUPER,right,movewindow,r"
+ "$mod SUPER,up,movewindow,u"
+ "$mod SUPER,down,movewindow,d"
+
+ # workspaces
+ "$mod SUPER,1,workspace,1"
+ "$mod SUPER,2,workspace,2"
+ "$mod SUPER,3,workspace,3"
+ "$mod SUPER,4,workspace,4"
+ "$mod SUPER,5,workspace,5"
+ "$mod SUPER,6,workspace,6"
+ "$mod SUPER,7,workspace,7"
+ "$mod SUPER,8,workspace,8"
+ "$mod SUPER,9,workspace,9"
+ "$mod SUPER,0,workspace,10"
+
+ # move to workspace
+ "$mod SUPERSHIFT,1,movetoworkspace,1"
+ "$mod SUPERSHIFT,2,movetoworkspace,2"
+ "$mod SUPERSHIFT,3,movetoworkspace,3"
+ "$mod SUPERSHIFT,4,movetoworkspace,4"
+ "$mod SUPERSHIFT,5,movetoworkspace,5"
+ "$mod SUPERSHIFT,6,movetoworkspace,6"
+ "$mod SUPERSHIFT,7,movetoworkspace,7"
+ "$mod SUPERSHIFT,8,movetoworkspace,8"
+ "$mod SUPERSHIFT,9,movetoworkspace,9"
+ "$mod SUPERSHIFT,0,movetoworkspace,10"
+
+ # move to workspace silent
+ "$mod SUPERSHIFTALT,1,movetoworkspacesilent,1"
+ "$mod SUPERSHIFTALT,2,movetoworkspacesilent,2"
+ "$mod SUPERSHIFTALT,3,movetoworkspacesilent,3"
+ "$mod SUPERSHIFTALT,4,movetoworkspacesilent,4"
+ "$mod SUPERSHIFTALT,5,movetoworkspacesilent,5"
+ "$mod SUPERSHIFTALT,6,movetoworkspacesilent,6"
+ "$mod SUPERSHIFTALT,7,movetoworkspacesilent,7"
+ "$mod SUPERSHIFTALT,8,movetoworkspacesilent,8"
+ "$mod SUPERSHIFTALT,9,movetoworkspacesilent,9"
+ "$mod SUPERSHIFTALT,0,movetoworkspacesilent,10"
+
+ # preselection
+ "$mod SUPERALT,j,layoutmsg,preselect l"
+ "$mod SUPERALT,k,layoutmsg,preselect d"
+ "$mod SUPERALT,l,layoutmsg,preselect u"
+ "$mod SUPERALT,semicolon,layoutmsg,preselect r"
+ "$mod SUPERALT,h,layoutmsg,preselect n"
+ ];
+
+ binde = [
+ # hyprland keybinds
+ # focus
+ "$mod SUPER,J,movefocus,l"
+ "$mod SUPER,semicolon,movefocus,r"
+ "$mod SUPER,L,movefocus,u"
+ "$mod SUPER,K,movefocus,d"
+
+ # resize
+ "$mod SUPER,U,resizeactive,-20 0"
+ "$mod SUPER,P,resizeactive,20 0"
+ "$mod SUPER,O,resizeactive,0 -20"
+ "$mod SUPER,I,resizeactive,0 20"
+ ];
+
+ general = {
+ gaps_out = "3,5,5,5";
+ border_size = 3;
+ "col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
+ # "col.inactive_border" = "0x66333333";
+ allow_tearing = lib.mkIf config.mods.hyprland.noAtomic 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 = "${config.mods.xkb.layout}";
+ kb_variant = "${config.mods.xkb.variant}";
+ repeat_delay = 200;
+ force_no_accel = true;
+ touchpad = {
+ natural_scroll = true;
+ tap-to-click = true;
+ tap-and-drag = true;
+ };
+ };
+
+ misc = {
+ animate_manual_resizes = 1;
+ enable_swallow = true;
+ disable_splash_rendering = true;
+ disable_hyprland_logo = true;
+ swallow_regex = "^(.*)(kitty)(.*)$";
+ initial_workspace_tracking = 1;
+ };
+
+ cursor = {
+ enable_hyprcursor = true;
+ no_hardware_cursors = lib.mkIf config.mods.gpu.nvidia.enable true;
+ # done with nix, this would break the current setup otherwise
+ sync_gsettings_theme = false;
+ };
+
+ gestures = {
+ workspace_swipe = true;
+ };
+
+ monitor = config.mods.hyprland.monitor;
+ workspace = config.mods.hyprland.workspace;
+
+ env = [
+ "GTK_CSD,0"
+ ''TERM,"kitty /bin/fish"''
+ "XDG_CURRENT_DESKTOP=Hyprland"
+ "XDG_SESSION_TYPE=wayland"
+ "XDG_SESSION_DESKTOP=Hyprland"
+ "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"''
+ (lib.mkIf config.mods.hyprland.noAtomic "WLR_DRM_NO_ATOMIC,1")
+ "GTK_USE_PORTAL, 1"
+
+ (lib.mkIf config.mods.gpu.nvidia.enable "LIBVA_DRIVER_NAME,nvidia")
+ (lib.mkIf config.mods.gpu.nvidia.enable "XDG_SESSION_TYPE,wayland")
+ (lib.mkIf config.mods.gpu.nvidia.enable "GBM_BACKEND,nvidia-drm")
+ (lib.mkIf config.mods.gpu.nvidia.enable "__GLX_VENDOR_LIBRARY_NAME,nvidia")
+ ];
+
+ layerrule = [
+ # layer rules
+ # mainly to disable animations within slurp and grim
+ "noanim, selection"
+ ];
+
+ windowrule = [
+ # window rules
+ "tile,^(.*)(Spotify)(.*)$"
+ "float,^(.*)(OxiCalc)(.*)$"
+ "float,^(.*)(winecfg.exe)(.*)$"
+ "float,^(.*)(speed.exe)(.*)$"
+ "float,^(.*)(copyq)(.*)$"
+ "center,^(.*)(swappy)(.*)$"
+ "float,title:^(.*)(Spirit)(.*)$"
+ "float,title:^(.*)(reset)(.*)$"
+ "workspace 10 silent,^(.*)(steam)(.*)$"
+ "workspace 9 silent,^(.*)(dota)(.*)$"
+ "workspace 9 silent,^(.*)(battlebits)(.*)$"
+ "workspace 9 silent,^(.*)(aoe)(.*)$"
+ "suppressevent fullscreen maximize,^(.*)(neovide)(.*)$"
+ ];
+
+ windowrulev2 = [
+ "immediate,class:^(.*)(Pal)$"
+ "immediate,class:^(.*)(dota2)$"
+ "immediate,class:^(.*)(needforspeedheat.exe)$"
+ ];
+
+ exec-once =
+ [
+ # environment
+ "systemctl --user import-environment"
+ "dbus-update-activation-environment --systemd --all"
+ "hyprctl setcursor Bibata-Modern-Classic 24"
+
+ # other programs
+ "hyprpaper"
+ "ironbar"
+ "${browserName}"
+ "oxipaste_daemon"
+ "oxinoti"
+ ]
+ ++ config.mods.hyprland.extraAutostart;
+
+ plugin =
+ {
+ hyprspace = lib.mkIf config.mods.hyprland.hyprspaceEnable {
+ bind = [
+ "SUPER, W, overview:toggle, toggle"
+ ];
+ };
+ }
+ // config.mods.hyprland.pluginConfig;
+ }
+ // config.mods.hyprland.customConfig
+ else lib.mkForce config.mods.hyprland.customConfig;
+ plugins =
+ [
+ (lib.mkIf config.mods.hyprland.hyprspaceEnable inputs.Hyprspace.packages.${pkgs.system}.Hyprspace)
+ ]
+ ++ config.mods.hyprland.plugins;
+ };
+ }
+ );
+}
diff --git a/modules/programs/hyprland/hyprlock.nix b/modules/programs/hyprland/hyprlock.nix
new file mode 100644
index 0000000..0a807ea
--- /dev/null
+++ b/modules/programs/hyprland/hyprlock.nix
@@ -0,0 +1,58 @@
+{
+ config,
+ lib,
+ options,
+ pkgs,
+ ...
+}: {
+ options.mods = {
+ hyprland.hyprlock = {
+ enable = lib.mkOption {
+ default = true;
+ example = false;
+ type = lib.types.bool;
+ description = "Enables Hyprlock";
+ };
+ };
+ };
+
+ config = lib.mkIf config.mods.hyprland.hyprlock.enable (
+ lib.optionalAttrs (options ? xdg.configFile) {
+ stylix.targets.hyprlock = {
+ enable = false;
+ };
+ home.packages = with pkgs; [hyprlock];
+ programs.hyprlock = lib.mkIf config.mods.hyprland.hyprlock.enable {
+ enable = true;
+ settings = {
+ background = [
+ {
+ monitor = "";
+ path = "";
+ color = "rgba(26, 27, 38, 1.0)";
+ }
+ ];
+
+ input-field = [
+ {
+ monitor = "${config.conf.defaultMonitor}";
+
+ placeholder_text = "password or something";
+ }
+ ];
+
+ label = [
+ {
+ monitor = "${config.conf.defaultMonitor}";
+ text = "$TIME";
+ font_size = 50;
+ position = "0, 200";
+ valign = "center";
+ halign = "center";
+ }
+ ];
+ };
+ };
+ }
+ );
+}
diff --git a/modules/programs/hyprland/hyprpaper.nix b/modules/programs/hyprland/hyprpaper.nix
new file mode 100644
index 0000000..31c4d05
--- /dev/null
+++ b/modules/programs/hyprland/hyprpaper.nix
@@ -0,0 +1,38 @@
+{
+ config,
+ lib,
+ options,
+ pkgs,
+ ...
+}: {
+ options.mods = {
+ hyprland.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.hyprland.hyprpaper.enable (
+ lib.optionalAttrs (options ? xdg.configFile) {
+ home.packages = with pkgs; [hyprpaper];
+ xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hyprland.hyprpaper.enable {
+ text = config.mods.hyprland.hyprpaper.config;
+ };
+ }
+ );
+}
diff --git a/modules/programs/hyprland/ironbar.nix b/modules/programs/hyprland/ironbar.nix
new file mode 100644
index 0000000..cb16289
--- /dev/null
+++ b/modules/programs/hyprland/ironbar.nix
@@ -0,0 +1,326 @@
+{
+ lib,
+ config,
+ options,
+ ...
+}: let
+ username = config.conf.username;
+in {
+ options.mods = {
+ hyprland.ironbar = {
+ enable = lib.mkOption {
+ default = true;
+ example = false;
+ type = lib.types.bool;
+ description = "Enables ironbar";
+ };
+ useDefaultConfig = lib.mkOption {
+ default = true;
+ example = false;
+ type = lib.types.bool;
+ description = ''
+ Use preconfigured ironbar config.
+ '';
+ };
+ 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.hyprland.ironbar.enable (
+ lib.optionalAttrs (options ? programs.ironbar) {
+ programs.ironbar = {
+ enable = true;
+ style =
+ if config.mods.hyprland.ironbar.useDefaultCss
+ then
+ ''
+ @import url("/home/${username}/.config/gtk-3.0/gtk.css");
+
+ * {
+ color: #71bbe6;
+ padding: 0px;
+ margin: 0px;
+ }
+
+ .background {
+ background-color: rgba(0, 0, 0, 0);
+ }
+
+ .workspaces {
+ margin: 2px 0px 0px 5px;
+ border-radius: 10px;
+ /* background-color: #2b2c3b; */
+ background-color: #1E1E2E;
+ padding: 2px 5px 2px 5px;
+ }
+
+ .workspaces .item {
+ margin: 0px 3px 0px 3px;
+ font-size: 13px;
+ border-radius: 100%;
+ padding: 0px 2px 0px 3px;
+ background-color: rgba(0, 0, 0, 0);
+ }
+
+ .workspaces .item:hover {
+ background-color: #3e4152;
+ }
+
+ .workspaces .item.focused {
+ background-color: #3e4152;
+ }
+
+ .audio-box {
+ padding: 2em;
+ background-color: #1E1E2E;
+ border-radius: 5px;
+ }
+
+ .audio-slider {
+ padding: 5px;
+ margin: 5px;
+ }
+
+ .audio-button {
+ padding: 5px 10px 5px 10px;
+ margin: 0px 1em 20px 1em;
+ border-radius: 100%;
+ font-size: 17px;
+ }
+
+ .audio-button-box {
+ padding: 0px 2.5em 0px 2.5em;
+ }
+
+ .focused {
+ /* margin: 2px 0px 0px 0px; */
+ padding: 0px 5px 0px 5px;
+ /* background-color: 1a1b26; */
+ background-color: #1E1E2E;
+ font-size: 17px;
+ border-radius: 10px;
+ }
+
+ #bar #end {
+ margin: 0px 5px 0px 0px;
+ padding: 0px 5px 0px 5px;
+ background-color: #1E1E2E;
+ border-radius: 10px;
+ }
+
+ .popup-button {
+ padding: 0px 5px 0px 3px;
+ margin: 0em 3px;
+ border-radius: 100%;
+ font-size: 13px;
+ background-color: #1E1E2E;
+ }
+
+ .popup-button-box {
+ padding: 2px 0px 2px 0px;
+ }
+
+ .clock {
+ padding: 0px 5px 0px 5px;
+ font-size: 17px;
+ background-color: #1E1E2E;
+ }
+
+ .clock:hover {
+ background-color: #3e4152;
+ }
+
+ .custom button {
+ background-color: #1E1E2E;
+ }
+
+ .custom button:hover {
+ background-color: #3e4152;
+ }
+
+ .memory-usage {
+ font-size: 15px;
+ margin: 0px 5px 0px 0px;
+ }
+
+ .memory-usage:hover {
+ background-color: #3e4152;
+ }
+
+ .popup-clock {
+ background-color: #1E1E2E;
+ border-radius: 5px;
+ padding: 2px 8px 10px 8px;
+ }
+
+ .popup-clock .calendar-clock {
+ font-size: 2.5em;
+ padding-bottom: 0.1em;
+ }
+
+ .popup-clock .calendar {
+ border-radius: 5px;
+ font-size: 1.05em;
+ }
+
+ .popup-clock .calendar:selected {
+ background-color: #3e4152;
+ }
+ ''
+ + config.mods.hyprland.ironbar.customCss
+ else config.mods.hyprland.ironbar.customCss;
+ features = [
+ #"another_feature"
+ ];
+ config = {
+ monitors."${config.conf.defaultMonitor}" =
+ if config.mods.hyprland.ironbar.useDefaultConfig
+ then
+ {
+ end =
+ config.conf.ironbar.modules
+ ++ [
+ {
+ type = "sys_info";
+ format = [" {memory_percent}"];
+ interval.memory = 30;
+ class = "memory-usage";
+ }
+ {
+ type = "custom";
+ bar = [
+ {
+ type = "button";
+ class = "popup-button";
+ label = "";
+ on_click = "popup:toggle";
+ }
+ ];
+ class = "popup-button-box";
+ popup = [
+ {
+ type = "box";
+ orientation = "vertical";
+ class = "audio-box";
+ widgets = [
+ {
+ type = "box";
+ orientation = "horizontal";
+ widgets = [
+ {
+ type = "button";
+ class = "audio-button";
+ label = "";
+ on_click = lib.mkIf config.mods.scripts.audioControl "!audioControl bluetooth";
+ }
+ {
+ type = "button";
+ class = "audio-button";
+ label = "";
+ on_click = lib.mkIf config.mods.scripts.audioControl "!audioControl internal";
+ }
+ ];
+ class = "audio-button-box";
+ }
+ {
+ type = "label";
+ label = "Output";
+ }
+ {
+ type = "slider";
+ class = "audio-slider";
+ step = 1.0;
+ length = 200;
+ value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
+ on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
+ }
+ {
+ type = "label";
+ label = "Input";
+ }
+ {
+ type = "slider";
+ class = "audio-slider";
+ step = 1.0;
+ length = 200;
+ value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
+ on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
+ }
+ ];
+ }
+ ];
+ }
+ {
+ type = "custom";
+ bar = [
+ {
+ type = "button";
+ class = "popup-button";
+ label = "";
+ on_click = "!oxidash --css /home/${username}/gits/oxidash/style.css";
+ }
+ ];
+ class = "popup-button-box";
+ }
+ {
+ type = "clock";
+ format = "%I:%M";
+ format_popup = "%I:%M:%S";
+ locale = "en_US";
+ }
+ {type = "tray";}
+ ];
+ position = "top";
+ height = 10;
+ anchor_to_edges = true;
+ start = [
+ {
+ type = "workspaces";
+ all_monitors = true;
+ }
+ ];
+ center = [
+ {
+ type = "focused";
+ show_icon = true;
+ show_title = true;
+ icon_size = 20;
+ truncate = "end";
+ }
+ ];
+ }
+ // config.mods.hyprland.ironbar.customConfig
+ else config.mods.hyprland.ironbar.customConfig;
+ };
+ };
+ }
+ );
+}
diff --git a/modules/programs/ironbar.nix b/modules/programs/ironbar.nix
deleted file mode 100644
index b955d51..0000000
--- a/modules/programs/ironbar.nix
+++ /dev/null
@@ -1,552 +0,0 @@
-{
- lib,
- config,
- pkgs,
- inputs,
- options,
- mkDashDefault,
- ...
-}: let
- inherit (config.conf) username;
- base16 = pkgs.callPackage inputs.base16.lib {};
- scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
- ironbarDefaultConfig = useBatteryModule: {
- end = [
- (lib.mkIf useBatteryModule
- {
- type = "battery";
- class = "battery";
- icon_size = 0;
- format = "{percentage}%";
- thresholds = {
- warning = 20;
- critical = 5;
- };
- })
- {
- class = "music";
- type = "music";
- format = "";
- truncate = {
- mode = "end";
- max_length = 0;
- };
- icons = {
- play = "";
- pause = "";
- };
- truncate_popup_title = {
- mode = "end";
- max_length = 15;
- };
- truncate_popup_album = {
- mode = "end";
- max_length = 15;
- };
- truncate_popup_artist = {
- mode = "end";
- max_length = 15;
- };
- }
- {
- bar = [
- {
- class = "popup-button";
- label = "";
- on_click = "popup:toggle";
- type = "button";
- }
- ];
- class = "popup-button-box";
- popup = [
- {
- class = "audio-box";
- orientation = "vertical";
- type = "box";
- widgets = [
- {
- class = "audio-button-box";
- orientation = "horizontal";
- type = "box";
- widgets = [
- {
- class = "audio-button";
- label = "";
- on_click = "!audioControl bluetooth";
- type = "button";
- }
- {
- class = "audio-button";
- label = "";
- on_click = "!audioControl internal";
- type = "button";
- }
- ];
- }
- {
- class = "audio-label";
- label = "Output";
- type = "label";
- }
- {
- class = "audio-slider";
- length = 200;
- on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
- step = 1.0;
- type = "slider";
- value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
- label = "{{pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }'}}";
- }
- {
- class = "audio-label";
- label = "Input";
- type = "label";
- }
- {
- class = "audio-slider";
- length = 200;
- on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
- step = 1.0;
- type = "slider";
- value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
- }
- ];
- }
- ];
- type = "custom";
- }
- {
- bar = [
- {
- class = "popup-button";
- label = "";
- on_click = "!oxidash";
- type = "button";
- }
- ];
- class = "popup-button-box";
- type = "custom";
- }
- {
- bar = [
- {
- class = "popup-button";
- label = "";
- on_click = "popup:toggle";
- type = "button";
- }
- ];
- type = "custom";
- class = "popup-button-box";
- popup = [
- {
- class = "system-box";
- type = "box";
- widgets = [
- {
- class = "memory-usage";
- format = [
- " {cpu_percent}%"
- " {memory_used} / {memory_total} GB ({memory_percent}%)"
- " {swap_used} / {swap_total} GB ({swap_free} | {swap_percent}%)"
- " {uptime}"
- ];
- direction = "vertical";
- interval = {
- memory = 30;
- cpu = 5;
- temps = 5;
- disks = 5;
- network = 5;
- };
- type = "sys_info";
- }
- ];
- }
- ];
- }
- {
- type = "tray";
- }
- ];
- position = "top";
- height = 10;
- anchor_to_edges = true;
- start = [
- {
- type = "workspaces";
- all_monitors = true;
- }
- ];
- center = [
- {
- format = "%I:%M";
- format_popup = "%a %d:%m/%I:%M %p";
- locale = "en_US";
- type = "clock";
- }
- ];
- };
- monitorConfig = useBatteryModule:
- if config.mods.ironbar.ironbarSingleMonitor
- then {
- monitors.${
- if config.mods.wm.monitors != []
- then (builtins.elemAt config.mods.wm.monitors 0).name
- else ""
- } =
- ironbarDefaultConfig useBatteryModule;
- }
- else ironbarDefaultConfig useBatteryModule;
-in {
- options.mods = {
- ironbar = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enables ironbar";
- };
- ironbarSingleMonitor = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Whether to use ironbar on a single monitor.
- '';
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured ironbar config.
- '';
- };
- useBatteryModule = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Whether to use the preconfigured battery module.";
- };
- customConfig = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''
- Custom ironbar configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- useDefaultCss = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured ironbar css.
- '';
- };
- customCss = lib.mkOption {
- default = '''';
- example = ''
- #window {
- border-radius: none;
- }
- '';
- type = lib.types.lines;
- description = ''
- Custom ironbar css.
- Will be merged with default css if enabled.
- '';
- };
- };
- };
- config = lib.mkIf (config.mods.ironbar.enable || config.mods.hypr.hyprland.useIronbar) (
- lib.optionalAttrs (options ? programs.ironbar) {
- programs.ironbar = {
- package = mkDashDefault pkgs.ironbar;
- enable = true;
- style =
- if config.mods.ironbar.useDefaultCss
- then
- /*
- css
- */
- ''
- @import url("/home/${username}/.config/gtk-3.0/gtk.css");
-
- @define-color primary #${scheme.base0D};
- @define-color warning #${scheme.base0F};
- @define-color muted-text #${scheme.base05};
- @define-color background #${scheme.base00};
- @define-color secondary-background #${scheme.base02};
-
- * slider {
- background-color: @muted-text;
- }
-
- * {
- transition:
- background-color 0.15s ease-in-out,
- color 0.15s ease-in-out,
- border-color 0.15s ease-in-out;
- }
-
- .background {
- background-color: rgba(0, 0, 0, 0);
- padding: 0px;
- margin: 0px;
- }
-
- .focused {
- padding: 0px 5px;
- background-color: @background;
- font-size: 17px;
- border-radius: 10px;
- }
-
- #bar #end {
- margin: 0px 5px;
- padding: 0px 5px;
- background-color: @background;
- border-radius: 10px;
- }
-
- .popup-button {
- padding: 0px 5px 0px 2px;
- border-radius: 100%;
- font-size: 13px;
- background-color: @background;
- }
-
- .popup-button-box {
- padding: 2px 0px;
- margin-right: 4px;
- }
-
- .custom button {
- background-color: @background;
- color: @primary;
- }
-
- .custom button:hover {
- background-color: @secondary-background;
- }
-
- /* audio */
- .audio-box * {
- color: @primary;
- }
-
- .audio-box {
- padding: 2em;
- background-color: @background;
- border-radius: 5px;
- border: 1px solid @primary;
- }
-
- .audio-slider {
- padding: 5px;
- margin: 5px 5px 15px;
- }
-
- .audio-label {
- font-size: 19px;
- }
-
- .audio-button {
- padding: 10px 10px 10px 8px;
- min-height: 35px;
- min-width: 35px;
- margin: 0px 1em;
- border-radius: 50%;
- font-size: 25px;
- }
-
- .audio-button-box {
- padding: 0px 2.5em 0px 2.5em;
- margin: 0em 0em 1.5em;
- }
-
- /* clock */
- .clock {
- padding: 0px 5px;
- font-size: 20px;
- border-radius: 5px;
- background-color: @background;
- color: @primary;
- }
-
- .clock:hover {
- background-color: @secondary-background;
- }
-
- .popup-clock {
- font-size: 2.5em;
- background-color: @background;
- border: 1px solid @primary;
- padding: 0.5em;
- border-radius: 8px;
- color: @primary;
- }
-
- .popup-clock .calendar-clock {
- margin: 0.25em 0em 0.75em;
- color: @primary;
- }
-
- .popup-clock .calendar {
- font-size: 24px;
- color: @primary;
- }
-
- .popup-clock .calendar:selected {
- background-color: @secondary-background;
- }
-
- /* workspaces */
- .workspaces {
- margin: 0px 0px 0px 5px;
- border-radius: 10px;
- background-color: @background;
- padding: 2px 5px;
- }
-
- .workspaces .item {
- margin: 0px 3px;
- font-size: 13px;
- border-radius: 100%;
- padding: 0px 3px 0px 3px;
- background-color: rgba(0, 0, 0, 0);
- color: @primary;
- }
-
- .workspaces .item:hover {
- background-color: @secondary-background;
- color: @primary;
- }
-
- .workspaces .item:not(.visible) {
- color: @warning;
- }
-
- .workspaces .item.focused {
- background-color: @primary;
- color: @background;
- }
-
- /* battery */
- .battery {
- font-size: 13px;
- padding: 0px 4px 0px 0px;
- margin: 2px 0px 2px 0px;
- background-color: @background;
- color: @primary;
- }
-
- .battery .icon {
- opacity: 0.0;
- }
-
- .battery .label {
- margin: 2px 0px 0px -8px;
- color: @primary;
- }
-
- .battery:hover {
- background-color: @secondary-background;
- border-radius: 5px;
- }
-
- .popup-battery {
- background-color: @background;
- color: @primary;
- border-radius: 8px;
- border: 1px solid @primary;
- padding: 16px;
- font-size: 20px;
- }
-
- /* music */
- .music {
- font-size: 13px;
- padding: 0px 4px 0px 3px;
- margin: 2px 0px 2px 0px;
- background-color: @background;
- color: @primary;
- }
-
- .music:hover {
- background-color: @secondary-background;
- border-radius: 100%;
- }
-
- .music .contents .icon {
- margin: 0px 0px 0px 5px;
- }
-
- .popup-music {
- background-color: @background;
- color: @primary;
- border-radius: 8px;
- border: 1px solid @primary;
- padding: 16px;
- font-size: 20px;
- }
-
- .popup-music .controls .btn-prev {
- color: @primary;
- margin-right: 16px;
- }
-
- .popup-music .controls .btn-next {
- color: @primary;
- margin-right: 16px;
- }
-
- .popup-music .controls .btn-play {
- color: @primary;
- margin-right: 16px;
- }
-
- .popup-music .controls .btn-pause {
- color: @primary;
- margin-right: 16px;
- }
-
- /* system */
- .system-box {
- padding: 16px;
- color: @primary;
- border: 1px solid @primary;
- background-color: @background;
- border-radius: 8px;
- }
-
- .memory-usage {
- font-size: 15px;
- color: @primary;
- }
-
- .memory-usage:hover {
- background-color: @secondary-background;
- }
- ''
- + config.mods.ironbar.customCss
- else config.mods.ironbar.customCss;
- features = [
- #"another_feature"
- ];
- config =
- if config.mods.ironbar.useDefaultConfig
- then
- lib.mkMerge
- [
- (monitorConfig config.mods.ironbar.useBatteryModule)
- config.mods.ironbar.customConfig
- ]
- else config.mods.ironbar.customConfig;
- };
- }
- );
-}
diff --git a/modules/programs/keepassxc.nix b/modules/programs/keepassxc.nix
index d8c0c6a..93c9142 100644
--- a/modules/programs/keepassxc.nix
+++ b/modules/programs/keepassxc.nix
@@ -12,50 +12,21 @@
type = lib.types.bool;
description = "Enables the piper program and its daemon";
};
- useConfig = lib.mkOption {
+ use_cache_config = 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 = ''
+ cache_config = lib.mkOption {
+ default = ''
[General]
- LastDatabases=/path/to/database
+ LastDatabases=/home/${config.conf.username}/pws/Passwords.kdbx
+ LastActiveDatabase=/home/${config.conf.username}/pws/Passwords.kdbx
+ LastOpenedDatabases=/home/${config.conf.username}/pws/Passwords.kdbx
+ LastKeyFiles=@Variant(\0\0\0\x1c\0\0\0\x1\0\0\0>\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0p\0w\0s\0/\0P\0\x61\0s\0s\0w\0o\0r\0\x64\0s\0.\0k\0\x64\0\x62\0x\0\0\0\n\0\0\0>\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0p\0w\0s\0/\0l\0o\0g\0i\0n\0_\0k\0\x65\0y\0.\0k\0\x65\0y\0x)
'';
+ example = "";
type = lib.types.lines;
description = "Cache config to be used.";
};
@@ -63,12 +34,32 @@
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;
+ xdg.configFile."keepassxc/keepassxc.ini" = {
+ text = ''
+ [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
+ '';
};
- home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useCacheConfig {
- text = config.mods.keepassxc.cacheConfig;
+ home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.use_cache_config {
+ text = config.mods.keepassxc.cache_config;
};
}
);
diff --git a/modules/programs/kitty.nix b/modules/programs/kitty.nix
index ab2ae5a..eb41e44 100644
--- a/modules/programs/kitty.nix
+++ b/modules/programs/kitty.nix
@@ -41,12 +41,6 @@ in {
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 = {
@@ -54,7 +48,7 @@ in {
enable_audio_bell = "yes";
};
type = with lib.types; attrsOf anything;
- description = "Additional kitty configuration. Will be the only configuration if useDefaultConfig is disabled.";
+ description = "Additional kitty configuration";
};
};
config = lib.mkIf config.mods.kitty.enable (
@@ -65,64 +59,80 @@ in {
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";
+ {
+ 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";
+ 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;
+ 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;
+ 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;
+ 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;
+ color8 = "#" + scheme.base04;
+ color9 = "#" + scheme.base08;
+ color10 = "#" + scheme.base0B;
+ color11 = "#" + scheme.base0A;
+ color12 = "#" + scheme.base0D;
+ color13 = "#" + scheme.base06;
+ color14 = "#" + scheme.base0C;
+ color15 = "#" + scheme.base0B;
+
+ # color0 = base;
+ # color1 = "#" + scheme.base08;
+ # color2 = "#" + scheme.base0B;
+ # color3 = "#" + scheme.base0A;
+ # color4 = "#" + scheme.base0D;
+ # color5 = "#" + scheme.base0E;
+ # color6 = "#" + scheme.base0C;
+ # color7 = "#" + scheme.base05;
+ #
+ # color8 = "#" + scheme.base03;
+ # color9 = "#" + scheme.base08;
+ # color10 = "#" + scheme.base0B;
+ # color11 = "#" + scheme.base0A;
+ # color12 = "#" + scheme.base0D;
+ # color13 = "#" + scheme.base0E;
+ # color14 = "#" + scheme.base0C;
+ # color15 = "#" + scheme.base07;
+
+ shell = lib.mkIf config.mods.fish.enable "fish";
+ }
+ // config.mods.kitty.additionalConfig;
};
}
);
diff --git a/modules/programs/media.nix b/modules/programs/media.nix
index c37d62b..62080f3 100644
--- a/modules/programs/media.nix
+++ b/modules/programs/media.nix
@@ -4,7 +4,8 @@
config,
pkgs,
...
-}: {
+}:
+{
options.mods.media = {
useBasePackages = lib.mkOption {
default = true;
@@ -13,111 +14,77 @@
description = "Default media packages (If disabled, only the additional packages will be installed)";
};
additionalPackages = lib.mkOption {
- default = [];
- example = [pkgs.flatpak];
+ default = [ ];
+ example = [ pkgs.flatpak ];
type = with lib.types; listOf package;
description = ''
Additional media packages.
'';
};
specialPrograms = lib.mkOption {
- default = {};
- example = {};
+ 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 = {};
+ 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
+ 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;
+ [
+ # base audio
+ pipewire
+ wireplumber
+ # audio control
+ playerctl
+ # images
+ imv
+ # videos
+ mpv
+ # pdf
+ zathura
+ evince
+ libreoffice-fresh
+ onlyoffice-bin
+ 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
+ if config.mods.media.useBasePackages then
{
obs-studio.enable = true;
- obs-studio.plugins = with pkgs; [obs-studio-plugins.obs-vaapi];
+ obs-studio.plugins = with pkgs; [ obs-studio-plugins.obs-vaapi ];
}
// config.mods.media.specialPrograms
- else config.mods.media.specialPrograms;
- services = config.mods.media.specialServices;
+ else
+ config.mods.media.specialPrograms;
+ services =
+ if config.mods.media.useBasePackages then
+ config.mods.media.specialServices
+ else
+ config.mods.media.specialServices;
};
}
diff --git a/modules/programs/mime.nix b/modules/programs/mime.nix
index 4da7aff..1f193d2 100644
--- a/modules/programs/mime.nix
+++ b/modules/programs/mime.nix
@@ -1,7 +1,6 @@
# 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,
@@ -85,7 +84,7 @@ in {
description = "Applications used for handling browser mime types";
};
imageApplications = lib.mkOption {
- default = ["eog"];
+ default = ["imv"];
example = [];
type = with lib.types; listOf str;
description = "Applications used for handling image mime types";
@@ -149,11 +148,11 @@ in {
};
userDirs = {
- enable = mkDashDefault true;
- createDirectories = mkDashDefault true;
+ enable = true;
+ createDirectories = true;
extraConfig = {
- XDG_SCREENSHOTS_DIR = mkDashDefault "${config.xdg.userDirs.pictures}/Screenshots";
- pws = mkDashDefault "${config.home.homeDirectory}/pws";
+ XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
+ pws = "${config.home.homeDirectory}/pws";
};
};
};
diff --git a/modules/programs/ncspot.nix b/modules/programs/ncspot.nix
index b998942..8e9064d 100644
--- a/modules/programs/ncspot.nix
+++ b/modules/programs/ncspot.nix
@@ -12,8 +12,11 @@
type = lib.types.bool;
description = "Enables ncspot with a config";
};
- config = lib.mkOption {
- default = {
+ };
+ config = lib.mkIf config.mods.ncspot.enable (
+ lib.optionalAttrs (options ? home.packages) {
+ home.packages = with pkgs; [ncspot];
+ xdg.configFile."ncspot/config.toml".source = (pkgs.formats.toml {}).generate "ncspot" {
notify = true;
shuffle = true;
cover_max_scale = 2;
@@ -49,16 +52,6 @@
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
index 31216ee..16b2d29 100644
--- a/modules/programs/nextcloud.nix
+++ b/modules/programs/nextcloud.nix
@@ -8,13 +8,13 @@
description = "Enable nextcloud";
};
username = lib.mkOption {
- default = "";
+ default = "DashieTM";
example = "globi";
type = lib.types.str;
description = "Your username";
};
url = lib.mkOption {
- default = "";
+ default = "cloud.dashie.org";
example = "cloud.globi.org";
type = lib.types.str;
description = "Your url";
diff --git a/modules/programs/niri.nix b/modules/programs/niri.nix
deleted file mode 100644
index 0531829..0000000
--- a/modules/programs/niri.nix
+++ /dev/null
@@ -1,392 +0,0 @@
-{
- mkDashDefault,
- config,
- lib,
- options,
- pkgs,
- ...
-}: let
- defaultWmConf = import ../../lib/wm.nix;
-in {
- options.mods.niri = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Enable Niri
- '';
- };
- useDefaultConfig = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = ''
- Use preconfigured Niri config.
- '';
- };
- customConfig = lib.mkOption {
- default = '''';
- example = '''';
- type = lib.types.lines;
- description = ''
- Custom Niri configuration.
- Will be merged with default configuration if enabled.
- '';
- };
- };
-
- config = lib.mkIf config.mods.niri.enable (
- lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
- # TODO deduplicate and abstract away base window management config
- # install Niri related packages
- home.packages = with pkgs; [
- xorg.xprop
- grim
- slurp
- satty
- xdg-desktop-portal-gtk
- xdg-desktop-portal-gnome
- kdePackages.xdg-desktop-portal-kde
- xdg-desktop-portal-shana
- copyq
- wl-clipboard
-
- niri
- xwayland-satellite
- ];
-
- xdg.configFile."niri/config.kdl" = let
- mkNiriMod = mods:
- builtins.map (mod:
- if mod == "Mod"
- then config.mods.wm.modKey + "+"
- else "${mod}" + "+")
- mods
- |> lib.strings.concatStringsSep "";
- mkNiriArg = args:
- if args != []
- then let
- concatCommand = lib.strings.concatStringsSep " " args;
- validCommand = builtins.replaceStrings [''"''] [''\"''] concatCommand;
- in "\"${validCommand}\""
- else "";
- mkNiriCommand = bind: let
- args = bind.args or [];
- in
- if bind.command == "quit"
- then "quit;"
- else if bind.command == "killActive"
- then "close-window;"
- else if bind.command == "moveFocusTop"
- then "focus-window-up;"
- else if bind.command == "focusWorkspace"
- then "focus-workspace" + " " + mkNiriArg args + ";"
- else if bind.command == "moveWindowRight"
- then "move-column-right-or-to-monitor-right;"
- else if bind.command == "moveWindowDown"
- then "move-window-down;"
- else if bind.command == "moveWindowLeft"
- then "move-column-left-or-to-monitor-left;"
- else if bind.command == "moveWindowUp"
- then "move-window-up;"
- else if bind.command == "moveFocusUp"
- then "focus-window-up;"
- else if bind.command == "moveFocusRight"
- then "focus-column-or-monitor-right;"
- else if bind.command == "moveFocusDown"
- then "focus-window-down;"
- else if bind.command == "moveFocusLeft"
- then "focus-column-or-monitor-left;"
- else if bind.command == "toggleFloating"
- then "toggle-window-floating;"
- else if bind.command == "toggleFullscreen"
- then "fullscreen-window;"
- else if bind.command == "moveToWorkspace"
- then "move-window-to-workspace" + " " + mkNiriArg args + ";"
- else if bind.command == "spawn"
- then "spawn" + " " + mkNiriArg args + ";"
- else if bind.command == "spawn-sh"
- then "spawn-sh" + " " + mkNiriArg args + ";"
- else if bind.command.niri != null
- then bind.command.niri + " " + mkNiriArg args + ";"
- else "";
-
- mkNiriBinds = cfg:
- '' binds {
- ''
- + (
- (
- builtins.map (
- bind:
- /*
- kdl
- */
- if bind ? key && bind ? command
- then ''
- ${mkNiriMod (bind.modKeys or [])}${bind.key} ${
- if
- bind ? meta
- && bind.meta ? niri
- then
- (
- if
- bind.meta.niri ? desc
- && bind.meta.niri.desc != ""
- then "hotkey-overlay-title=\"" + bind.meta.niri.desc + "\""
- else ""
- )
- + " "
- + (
- if
- bind.meta.niri ? repeat
- && bind.meta.niri.repeat
- then "repeat=true"
- else "repeat=false"
- )
- + " "
- + (
- if
- bind.meta.niri ? allowWhileLocked
- && bind.meta.niri.allowWhileLocked
- then "allow-when-locked=true"
- else ""
- )
- + " "
- + (
- if
- bind.meta.niri ? allowInhibit
- && bind.meta.niri.allowInhibit
- then "allow-inhibiting=true"
- else "allow-inhibiting=false"
- )
- else ""
- } { ${
- mkNiriCommand bind
- } }
- ''
- else ''''
- )
- ((
- cfg.mods.wm.binds
- ++ (
- if cfg.mods.wm.useDefaultBinds
- then defaultWmConf.defaultBinds cfg
- else []
- )
- )
- |> builtins.filter (bind: !(hasInvalidCustomCommand bind)))
- )
- |> lib.strings.concatLines
- )
- + ''
- }
- '';
- mkVrr = vrr:
- if vrr
- then "true"
- else "false";
- mkNiriMonitors = cfg:
- (builtins.map (
- monitor:
- # TODO vrr
- /*
- kdl
- */
- ''
- output "${monitor.name}" {
- variable-refresh-rate on-demand=${mkVrr monitor.vrr}
- mode "${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate}"
- scale ${builtins.toString monitor.scale}
- transform "${
- if (monitor.transform == "0")
- then "normal"
- else monitor.transform
- }"
- position x=${builtins.toString monitor.positionX} y=${builtins.toString monitor.positionY}
- }
- ''
- )
- cfg.mods.wm.monitors)
- |> lib.strings.concatLines;
- mkNiriWorkspaces = cfg:
- (builtins.map (
- workspace:
- /*
- kdl
- */
- ''
- workspace "${workspace.name}" {
- open-on-output "${workspace.monitor}"
- }
- ''
- )
- cfg.mods.wm.workspaces)
- |> lib.strings.concatLines;
- mkNiriWindowRules = cfg: (
- (
- builtins.map (
- rule:
- /*
- kdl
- */
- ''
- window-rule {
- ${rule}
- }
- ''
- )
- (
- cfg.mods.wm.windowRules.niri
- ++ (
- if cfg.mods.wm.useDefaultWindowRules
- then defaultWmConf.defaultWindowRules.niri
- else []
- )
- )
- )
- |> lib.strings.concatLines
- );
- hasInvalidCustomCommand = bind: !(bind ? command) || (!(builtins.isString bind.command) && bind.command.niri or null == null);
- mkNiriEnv = config: let
- defaultEnv =
- if config.mods.wm.useDefaultEnv
- then defaultWmConf.defaultEnv config
- else {
- all = {};
- niri = {};
- };
- userEnv =
- if config.mods.wm.env ? all
- then config.mods.wm.env.all // config.mods.wm.env.niri
- else config.mods.wm.env;
- env =
- userEnv
- // defaultEnv.all
- // defaultEnv.niri;
- in
- ''
- environment {
- ''
- + (
- lib.attrsets.mapAttrsToList (
- name: value: "${name} \"${value}\""
- )
- env
- |> lib.strings.concatLines
- )
- + ''
- }
- '';
- mkNiriAutoStart = config: let
- defaultStartup =
- if config.mods.wm.useDefaultStartup
- then defaultWmConf.defaultStartup config
- else {
- all = {};
- niri = {};
- };
- userStartup =
- if config.mods.wm.startup ? all
- then config.mods.wm.startup.all ++ config.mods.wm.startup.niri
- else config.mods.wm.startup;
- autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.niri;
- in
- (builtins.map (value: "spawn-at-startup \"${value}\"")
- autoStart)
- |> lib.strings.concatLines;
- defaultConfig =
- /*
- kdl
- */
- ''
- input {
- keyboard {
- xkb {
- layout "enIntUmlaut"
- }
- repeat-delay 200
- repeat-rate 25
- numlock
- }
-
- touchpad {
- tap
- natural-scroll
- }
-
- mouse {
- accel-speed 0.2
- accel-profile "flat"
- }
-
- focus-follows-mouse max-scroll-amount="25%"
- }
-
- layout {
- // Set gaps around windows in logical pixels.
- gaps 10
- center-focused-column "never"
- always-center-single-column
-
- preset-column-widths {
- proportion 0.33333
- proportion 0.5
- proportion 1.0
- }
-
- default-column-width { proportion 0.5; }
- focus-ring {
- width 3
- inactive-color "#505050"
- active-gradient from="#ff0000" to="#00ff00" angle=45
- }
-
- border {
- off
- }
-
- // You can enable drop shadows for windows.
- shadow {
- on
- softness 30
- spread 5
- offset x=0 y=5
- color "#0007"
- }
- }
-
- ${
- if config.mods.gpu.nvidia.enable
- then ''
- debug {
- wait-for-frame-completion-before-queueing
- }
- ''
- else ''''
- }
-
- // Autostart
-
- hotkey-overlay {
- skip-at-startup
- }
-
- prefer-no-csd
- ''
- + mkNiriMonitors config
- + mkNiriBinds config
- + mkNiriWorkspaces config
- + mkNiriWindowRules config
- + mkNiriEnv config
- + mkNiriAutoStart config;
- in
- mkDashDefault {
- text =
- if config.mods.niri.useDefaultConfig
- then defaultConfig + config.mods.niri.customConfig
- else config.mods.niri.customConfig;
- };
- }
- );
-}
diff --git a/modules/programs/onedrive.nix b/modules/programs/onedrive.nix
deleted file mode 100644
index 56bd79d..0000000
--- a/modules/programs/onedrive.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- config,
- lib,
- options,
- pkgs,
- ...
-}: {
- options.mods = {
- onedrive = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = "Enable onedrive program and service";
- };
- };
- };
- config = lib.mkIf config.mods.onedrive.enable (
- lib.optionalAttrs (options ? environment) {
- services.onedrive.enable = true;
- environment.systemPackages = [pkgs.onedrive];
- }
- );
-}
diff --git a/modules/programs/oxi/default.nix b/modules/programs/oxi/default.nix
index 83c4f23..ad31d84 100644
--- a/modules/programs/oxi/default.nix
+++ b/modules/programs/oxi/default.nix
@@ -8,9 +8,8 @@
imports = [
./oxidash.nix
./oxinoti.nix
- ./oxipaste.nix
- ./oxirun.nix
./oxishut.nix
+ ./oxipaste.nix
];
options.mods.oxi = {
enable = lib.mkOption {
@@ -34,12 +33,6 @@
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 {
@@ -53,10 +46,7 @@
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;
- };
+ hyprdock.enable = lib.mkIf config.mods.oxi.hyprdock.enable true;
oxicalc.enable = lib.mkIf config.mods.oxi.oxicalc.enable true;
ReSet = lib.mkIf config.mods.oxi.ReSet.enable {
enable = true;
@@ -74,8 +64,5 @@
};
};
}
- // 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
index 9ea519e..476eb60 100644
--- a/modules/programs/oxi/oxidash.nix
+++ b/modules/programs/oxi/oxidash.nix
@@ -2,15 +2,8 @@
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;
@@ -24,54 +17,52 @@ in {
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;
+ border: solid 2px #327cd5;
}
- #DoNotDisturbButton {}
+ #DoNotDisturbButton {
+ }
- #ExitButton {}
+ #ExitButton {
+ }
- #ClearNotificationsButton {}
+ #ClearNotificationsButton {
+ }
- #NotificationsWindow {}
+ #NotificationsWindow {
+ }
.debugimage {
- border: solid 3px @primary;
+ border: solid 3px blue;
}
.Notification {
padding: 10px;
margin: 5px 0px 5px 0px;
- border: solid 1px @primary;
+ border: solid 2px #327cd5;
border-radius: 5px;
}
.CloseNotificationButton {
margin: 0px 5px 0px 10px;
}
-
- .PictureButtonBox {}
-
- .BaseBox {}
+ .PictureButtonBox {
}
+ .BaseBox {
+ }
+ }
'';
};
}
diff --git a/modules/programs/oxi/oxinoti.nix b/modules/programs/oxi/oxinoti.nix
index d265af3..b3ecafc 100644
--- a/modules/programs/oxi/oxinoti.nix
+++ b/modules/programs/oxi/oxinoti.nix
@@ -2,15 +2,8 @@
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;
@@ -26,13 +19,7 @@ in {
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};
+ @import url("/home/${config.conf.username}/.config/gtk-3.0/gtk.css");
#MainWindow {
background-color: transparent;
@@ -47,37 +34,31 @@ in {
}
.NotificationBox {
- background-color: @bg;
+ background-color: #353747;
border-radius: 5px;
border: solid 1px;
margin: 0px;
- }
-
- .NotificationBox button {
- background-color: @bg;
- }
-
- .NotificationBox button:hover {
- background-color: @bghover;
+ padding: 5px;
}
.NotificationLow {
- border-color: @green;
+ border-color: green;
}
.NotificationNormal {
- border-color: @primary;
+ border-color: purple;
}
.NotificationUrgent {
- border-color: @red;
+ border-color: red;
}
.miscbox {
margin: 0px 10px 0px 0px;
}
- .bodybox {}
+ .bodybox {
+ }
.imagebox {
margin: 0px 0px 0px 10px;
@@ -103,7 +84,8 @@ in {
font-size: 2rem;
}
- .image {}
+ .image {
+ }
.bold {
font-weight: bold;
diff --git a/modules/programs/oxi/oxirun.nix b/modules/programs/oxi/oxirun.nix
deleted file mode 100644
index 55f4d75..0000000
--- a/modules/programs/oxi/oxirun.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods.oxi.oxirun = {
- enable = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Enables OxiRun";
- };
- };
- config = lib.mkIf (config.mods.oxi.oxirun.enable && config.mods.oxi.enable) (
- lib.optionalAttrs (options ? xdg.configFile) {
- programs.oxirun.enable = true;
- }
- );
-}
diff --git a/modules/programs/printing.nix b/modules/programs/printing.nix
index 98bbe4f..848ffef 100644
--- a/modules/programs/printing.nix
+++ b/modules/programs/printing.nix
@@ -16,10 +16,6 @@
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;
diff --git a/modules/programs/scripts.nix b/modules/programs/scripts.nix
index 98eb26b..e17a96b 100644
--- a/modules/programs/scripts.nix
+++ b/modules/programs/scripts.nix
@@ -24,100 +24,108 @@
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}%"
- }
+ config = (
+ lib.optionalAttrs (options ? home.packages) {
+ home.packages =
+ [
+ (lib.mkIf config.mods.scripts.changeBrightness (
+ pkgs.writeShellScriptBin "changeBrightness" ''
+ set_brightness() {
+ brightnessctl set "$1"
+ CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}')
+ dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ''${CURRENT}%"
+ }
- 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}%"
- }
+ if [ "$1" == "brightness" ]; then
+ set_brightness "$2"
+ fi
+ ''
+ ))
+ (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}%"
+ }
- 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
- }
+ 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}%"
+ }
- 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}%"
- }
+ 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_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}%"
- }
+ 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}%"
+ }
- 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
- }
+ 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}%"
+ }
- 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"
- }
+ 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
+ }
- 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;
- };
+ 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/starship.nix b/modules/programs/starship.nix
index de86504..25fc53b 100644
--- a/modules/programs/starship.nix
+++ b/modules/programs/starship.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
lib,
config,
options,
@@ -46,7 +45,7 @@
code_format = "[](bg:prev_bg fg:#5256c3)[ $symbol ($version)](bg:#5256c3)";
in {
enable = true;
- interactiveOnly = mkDashDefault true;
+ interactiveOnly = true;
presets = lib.mkIf config.mods.starship.useDefaultPrompt ["pastel-powerline"];
settings =
lib.mkIf config.mods.starship.useDefaultPrompt {
diff --git a/modules/programs/streamcontroller.nix b/modules/programs/streamcontroller.nix
deleted file mode 100644
index 544367f..0000000
--- a/modules/programs/streamcontroller.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- lib,
- config,
- options,
- ...
-}: {
- options.mods = {
- streamcontroller = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''
- Enables streamcontroller
- '';
- };
- configFilePath = lib.mkOption {
- default = null;
- type = with lib.types; nullOr path;
- description = ''
- Path to the config json for the streamcontroller.
- -> ./something.json
- '';
- };
- };
- };
-
- config = lib.mkIf config.mods.streamcontroller.enable (
- lib.optionalAttrs (options ? environment.systemPackages) {
- programs.streamcontroller.enable = true;
- }
- // (lib.optionalAttrs (options ? home.file) {
- home.file.".var/app/com.core447.StreamController/data/pages/defaultpage.json" =
- lib.mkIf
- (!isNull config.mods.streamcontroller.configFilePath)
- {source = config.mods.streamcontroller.configFilePath;};
- })
- );
-}
diff --git a/modules/programs/stylix.nix b/modules/programs/stylix.nix
index dd11e8c..cd00501 100644
--- a/modules/programs/stylix.nix
+++ b/modules/programs/stylix.nix
@@ -1,37 +1,18 @@
{
- 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 = "16161E";
+ # base01 = "15161e";
base01 = "191a25";
base02 = "2F3549";
base03 = "444B6A";
@@ -44,6 +25,10 @@ in {
base0A = "0DB9D7";
base0B = "9ECE6A";
base0C = "B4F9F8";
+ # base0D = "2AC3DE";
+ # base0D = "A9B1D6";
+ # base0D = "62A0EA";
+ # base0D = "779EF1";
base0D = "366fea";
base0E = "BB9AF7";
base0F = "F7768E";
@@ -59,8 +44,6 @@ in {
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 {
@@ -76,22 +59,22 @@ in {
fonts = lib.mkOption {
default = {
serif = {
- package = unstable.adwaita-fonts;
+ package = pkgs.adwaita-fonts;
name = "Adwaita Sans";
};
sansSerif = {
- package = unstable.adwaita-fonts;
+ package = pkgs.adwaita-fonts;
name = "Adwaita Sans";
};
monospace = {
- package = unstable.nerd-fonts.jetbrains-mono;
+ package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrainsMono Nerd Font Mono";
};
emoji = {
- package = pkgs.noto-fonts-color-emoji;
+ package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
};
@@ -100,24 +83,23 @@ in {
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
+ config =
(lib.optionalAttrs (options ? stylix) {
stylix = {
enable = true;
- image = mkDashDefault (mkWallpaper scheme);
- polarity = mkDashDefault "dark";
+ image = ../../base/black.jpg;
+ polarity = "dark";
targets = {
- nixvim.enable = mkDashDefault false;
- fish.enable = mkDashDefault false;
+ nixvim.enable = false;
+ fish.enable = false;
};
fonts = config.mods.stylix.fonts;
cursor = config.mods.stylix.cursor;
- base16Scheme = scheme;
+ base16Scheme = (
+ if builtins.isAttrs config.mods.stylix.colorscheme
+ then config.mods.stylix.colorscheme
+ else "${pkgs.base16-schemes}/share/themes/${config.mods.stylix.colorscheme}.yaml"
+ );
};
})
// lib.optionalAttrs (options ? environment.systemPackages) {
diff --git a/modules/programs/superfreq.nix b/modules/programs/superfreq.nix
deleted file mode 100644
index f031e2f..0000000
--- a/modules/programs/superfreq.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- lib,
- options,
- config,
- ...
-}: {
- options.mods.superfreq = {
- enable = lib.mkOption {
- default = false;
- example = true;
- type = lib.types.bool;
- description = ''Enables superfreq'';
- };
- settings = lib.mkOption {
- default = {};
- example = {};
- type = with lib.types; attrsOf anything;
- description = ''Superfreq config'';
- };
- };
-
- config = lib.optionalAttrs (options ? services.superfreq) {
- services.superfreq = {
- enable = config.mods.superfreq.enable;
- settings = config.mods.superfreq.settings;
- };
- };
-}
diff --git a/modules/programs/teams.nix b/modules/programs/teams.nix
index e9d843a..28e45f6 100644
--- a/modules/programs/teams.nix
+++ b/modules/programs/teams.nix
@@ -3,6 +3,7 @@
config,
options,
pkgs,
+ alternativePkgs,
...
}: let
callPackage = lib.callPackageWith pkgs;
@@ -23,7 +24,7 @@ in {
};
config = lib.mkIf config.mods.teams.enable (
lib.optionalAttrs (options ? home.packages) {
- home.packages = [(callPackage ../../override/teams.nix {inherit (pkgs) chromium;})];
+ home.packages = [(callPackage ../../override/teams.nix {chromium = alternativePkgs.chromium;})];
}
// (lib.optionalAttrs (options ? boot.kernelModules) {
boot = {
diff --git a/modules/programs/virtmanager.nix b/modules/programs/virtmanager.nix
index de38848..84c7c0a 100644
--- a/modules/programs/virtmanager.nix
+++ b/modules/programs/virtmanager.nix
@@ -1,5 +1,4 @@
{
- mkDashDefault,
lib,
config,
options,
@@ -42,13 +41,15 @@ in {
libvirtd = {
enable = true;
qemu = {
- package = mkDashDefault pkgs.qemu_kvm;
- swtpm.enable = mkDashDefault true;
+ package = pkgs.qemu_kvm;
+ swtpm.enable = true;
+ ovmf.enable = true;
+ ovmf.packages = [pkgs.OVMFFull.fd];
};
};
- spiceUSBRedirection.enable = mkDashDefault true;
+ spiceUSBRedirection.enable = true;
};
- services.spice-vdagentd.enable = mkDashDefault true;
+ services.spice-vdagentd.enable = true;
users.users.${config.conf.username}.extraGroups = [
"libvirtd"
diff --git a/modules/programs/wm.nix b/modules/programs/wm.nix
deleted file mode 100644
index 0f794d3..0000000
--- a/modules/programs/wm.nix
+++ /dev/null
@@ -1,403 +0,0 @@
-{lib, ...}: let
- wmWorkspace = with lib.types; {
- options = {
- name = lib.mkOption {
- default = "";
- example = "1";
- type = str;
- description = "Name of the workspace";
- };
- default = lib.mkOption {
- default = false;
- example = true;
- type = bool;
- description = "Whether the workspace is the default workspace. (Currently doesn't do anything on niri)";
- };
- monitor = lib.mkOption {
- default = "";
- example = "DP-1";
- type = str;
- description = "Name of the monitor to bind the workspace to";
- };
- };
- };
-
- wmOptions = with lib.types; {
- options = {
- name = lib.mkOption {
- default = "DP-1";
- example = "DP-1";
- type = str;
- description = "Name of the monitor";
- };
- resolutionX = lib.mkOption {
- default = 1920;
- example = 2560;
- type = number;
- description = "ResolutionX of the monitor";
- };
- resolutionY = lib.mkOption {
- default = 1080;
- example = 1440;
- type = number;
- description = "ResolutionY of the monitor";
- };
- refreshrate = lib.mkOption {
- default = 60;
- example = 144;
- type = number;
- description = "Refreshrate of the monitor";
- };
- positionX = lib.mkOption {
- default = 0;
- example = 1920;
- type = number;
- description = "PositionX of the monitor";
- };
- positionY = lib.mkOption {
- default = 0;
- example = 1080;
- type = number;
- description = "PositionY of the monitor";
- };
- scale = lib.mkOption {
- default = 1;
- example = 2;
- type = number;
- description = "Scale of the monitor";
- };
- transform = lib.mkOption {
- default = "0";
- example = "90";
- type = enum ["0" "90" "180" "270" "360"];
- description = "Transform of the monitor";
- };
- vrr = lib.mkOption {
- default = false;
- example = true;
- type = bool;
- description = "VRR status of the monitor";
- };
- };
- };
-
- modKeys = lib.types.enum ["Mod" "Super" "Alt" "Shift" "Ctrl"];
-
- customCommand = with lib.types; {
- options = {
- niri = lib.mkOption {
- default = null;
- example = "kitty";
- type = either null str;
- description = "Command to use in niri";
- };
- hyprland = lib.mkOption {
- default = null;
- example = "kitty";
- type = either null str;
- description = "Command to use in hyprland";
- };
- };
- };
-
- envOptions = with lib.types; {
- options = {
- all = lib.mkOption {
- default = {};
- example = {};
- type = attrsOf str;
- description = "General Env";
- };
- niri = lib.mkOption {
- default = {};
- example = {};
- type = attrsOf str;
- description = "Niri Env";
- };
- hyprland = lib.mkOption {
- default = {};
- example = {};
- type = attrsOf str;
- description = "Hyprland Env";
- };
- };
- };
-
- startupOptions = with lib.types; {
- options = {
- all = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "General Startup commands";
- };
- niri = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Niri Startup commands";
- };
- hyprland = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Hyprland Startup commands";
- };
- };
- };
-
- windowRuleOptions = with lib.types; {
- options = {
- niri = lib.mkOption {
- default = [];
- example = [];
- type = listOf lines;
- description = "Niri window rules";
- };
- hyprland = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Hyprland window rules";
- };
- };
- };
-
- bindOptions = with lib.types; {
- options = {
- modKeys = lib.mkOption {
- default = [];
- example = ["Mod"];
- type = listOf modKeys;
- description = "List of modifier keys";
- };
- key = lib.mkOption {
- default = "";
- example = "Q";
- type = str;
- description = "Key to bind";
- };
- command = lib.mkOption {
- default = "";
- example = "killActive";
- type = either (submodule customCommand) (enum [
- "spawn"
- "spawn-sh"
- "quit"
- "killActive"
- "moveFocusUp"
- "moveFocusRight"
- "moveFocusDown"
- "moveFocusLeft"
- "moveWindowUp"
- "moveWindowRight"
- "moveWindowDown"
- "moveWindowLeft"
- "focusWorkspace"
- "moveToWorkspace"
- "toggleFloating"
- "toggleFullscreen"
- ]);
- description = "Command to execute";
- };
- args = lib.mkOption {
- default = [];
- example = [];
- type = listOf str;
- description = "Additional arguments for the command";
- };
- meta = lib.mkOption {
- default = {};
- example = {};
- type = submodule {
- options = {
- niri = lib.mkOption {
- default = {};
- type = submodule {
- options = {
- desc = lib.mkOption {
- default = "";
- type = str;
- description = "Description for Hotkey overview";
- };
- repeat = lib.mkOption {
- type = bool;
- default = true;
- description = "Whether to repeat the keybind on hold";
- };
- allowInhibit = lib.mkOption {
- type = bool;
- default = true;
- description = "Whether to allow inhibiting";
- };
- allowWhileLocked = lib.mkOption {
- type = bool;
- default = false;
- description = "Whether to allow while locked";
- };
- cooldown = lib.mkOption {
- type = number;
- default = 0;
- description = "Cooldown on bind";
- };
- };
- };
- description = "Niri meta for keybinds";
- };
- hyprland = lib.mkOption {
- default = {};
- type = submodule {
- options = {
- repeat = lib.mkOption {
- type = bool;
- default = true;
- description = "Whether to repeat the keybind on hold";
- };
- };
- };
- description = "Niri meta for keybinds";
- };
- };
- };
- description = "Custom metadata per bind. Note, only supported environments are taken into account.";
- };
- };
- };
-in {
- options.mods.wm = {
- modKey = lib.mkOption {
- default = "Super";
- example = "Alt";
- type = modKeys;
- description = "Mod key";
- };
-
- env = lib.mkOption {
- default = {};
- example = {
- all = {
- EDITOR = "Neovim";
- };
- niri = {
- EDITOR = "Emacs";
- };
- };
- type = with lib.types; either (submodule envOptions) (attrsOf str);
- description = "Environment configuration";
- };
-
- useDefaultEnv = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default env variables";
- };
-
- startup = lib.mkOption {
- default = [];
- example = {
- all = ["oxinoti"];
- niri = ["someniricommand"];
- hyprland = ["somehyprlandcommand"];
- };
- type = with lib.types; either (submodule startupOptions) (listOf str);
- description = "Start commands";
- };
-
- useDefaultStartup = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default autostart commands";
- };
-
- useDefaultWindowRules = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default window rules";
- };
-
- windowRules = lib.mkOption {
- default = {};
- example = {
- niri = [
- ''
- match app-id=r#"^org\.keepassxc\.KeePassXC$"#
- match app-id=r#"^org\.gnome\.World\.Secrets$"#
-
- block-out-from "screen-capture"
- ''
- ''
- match app-id=r#"^steam$"#
- open-on-workspace "0"
- ''
- ];
- };
- type = lib.types.submodule windowRuleOptions;
- description = "Window rules";
- };
-
- workspaces = lib.mkOption {
- default = [];
- example = [
- {
- name = "chat";
- monitor = "DP-1";
- }
- ];
- type =
- lib.types.listOf (lib.types.submodule wmWorkspace);
- description = "Workspace configuration";
- };
-
- monitors = lib.mkOption {
- default = [];
- example = [
- {
- name = "DP-1";
- resolutionX = 1920;
- resolutionY = 1080;
- refreshrate = 144;
- positionX = 0;
- positionY = 0;
- scale = 1;
- transform = "0";
- vrr = false;
- }
- ];
- type =
- lib.types.listOf (lib.types.submodule wmOptions);
- description = "Monitor configuration";
- };
-
- useDefaultBinds = lib.mkOption {
- default = true;
- example = false;
- type = lib.types.bool;
- description = "Whether to use default keybinds";
- };
-
- binds = lib.mkOption {
- default = [];
- example = [
- {
- modKeys = ["Mod"];
- key = "Q";
- command = "killActive";
- args = [];
- meta = {
- niri = {
- desc = "Kill the active window";
- repeat = false;
- };
- hyprland = {};
- };
- }
- ];
- type =
- lib.types.listOf (lib.types.submodule bindOptions);
- description = "Bind configuration";
- };
- };
-}
diff --git a/modules/programs/xkb.nix b/modules/programs/xkb.nix
index ebb1bda..7ae8414 100644
--- a/modules/programs/xkb.nix
+++ b/modules/programs/xkb.nix
@@ -6,7 +6,7 @@
}: {
options.mods.xkb = {
layout = lib.mkOption {
- default = "enIntUmlaut";
+ default = "dashie";
example = "us";
type = lib.types.str;
description = "Your layout";
@@ -18,11 +18,13 @@
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}";
- };
- };
+ 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
index 84ecd48..36d92f0 100644
--- a/modules/programs/xone.nix
+++ b/modules/programs/xone.nix
@@ -15,5 +15,5 @@
};
};
- config = lib.optionalAttrs (options ? hardware) {hardware.xone.enable = config.mods.xone.enable;};
+ config = lib.optionalAttrs (options ? hardware) {hardware.xone.enable = true;};
}
diff --git a/modules/programs/yazi/default.nix b/modules/programs/yazi/default.nix
index d890a81..4e7fb59 100644
--- a/modules/programs/yazi/default.nix
+++ b/modules/programs/yazi/default.nix
@@ -1,5 +1,4 @@
{
- pkgs,
lib,
config,
options,
@@ -36,26 +35,16 @@
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;
+ enable = 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
index 22e3169..233ab22 100644
--- a/modules/programs/yazi/yazi.nix
+++ b/modules/programs/yazi/yazi.nix
@@ -31,7 +31,7 @@
];
image = [
{
- run = ''eog "$@"'';
+ run = ''imv "$@"'';
orphan = true;
display_name = "Open";
}
@@ -85,28 +85,19 @@
};
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"'';
+ run = "glow";
}
{
mime = "text/csv";
- run = ''piper -- bat -p --color=always "$1"'';
+ run = "miller";
}
];
};
};
keymap = {
- mgr.keymap = [
- {
- on = "";
- run = "backspace";
- desc = "Delete the character before the cursor";
- }
+ manager.keymap = [
{
on = [""];
run = "escape";
@@ -377,13 +368,13 @@
desc = "Cancel the ongoing search";
}
{
- on = ["Z"];
- run = "plugin zoxide";
+ on = ["z"];
+ run = "jump zoxide";
desc = "Jump to a directory using zoxide";
}
{
- on = ["z"];
- run = "plugin fzf";
+ on = ["Z"];
+ run = "jump fzf";
desc = "Jump to a directory or reveal a file using fzf";
}
@@ -768,11 +759,6 @@
];
input.keymap = [
- {
- on = "";
- run = "backspace";
- desc = "Delete the character before the cursor";
- }
{
on = [""];
run = "close";
diff --git a/patches/darkeader.patch b/patches/darkeader.patch
deleted file mode 100644
index f1663df..0000000
--- a/patches/darkeader.patch
+++ /dev/null
@@ -1,456 +0,0 @@
-diff --git a/src/background/user-storage.ts b/src/background/user-storage.ts
-index 54612fb3b1f6..298e5032fc94 100644
---- a/src/background/user-storage.ts
-+++ b/src/background/user-storage.ts
-@@ -5,7 +5,7 @@ import {PromiseBarrier} from '../utils/promise-barrier';
- import {isURLMatched} from '../utils/url';
- import {validateSettings} from '../utils/validation';
-
--import {readSyncStorage, readLocalStorage, writeSyncStorage, writeLocalStorage, removeSyncStorage, removeLocalStorage} from './utils/extension-api';
-+import {readManagedStorage, readSyncStorage, readLocalStorage, writeSyncStorage, writeLocalStorage, removeSyncStorage, removeLocalStorage} from './utils/extension-api';
- import {logWarn} from './utils/log';
-
-
-@@ -78,12 +78,7 @@ export default class UserStorage {
- return settings;
- }
-
-- private static async loadSettingsFromStorage(): Promise {
-- if (UserStorage.loadBarrier) {
-- return await UserStorage.loadBarrier.entry();
-- }
-- UserStorage.loadBarrier = new PromiseBarrier();
--
-+ private static async loadSettingsFromStorageWithoutManaged(): Promise {
- let local = await readLocalStorage(DEFAULT_SETTINGS);
-
- if (local.schemeVersion < 2) {
-@@ -113,10 +108,8 @@ export default class UserStorage {
- if (local.syncSettings == null) {
- local.syncSettings = DEFAULT_SETTINGS.syncSettings;
- }
-+
- if (!local.syncSettings) {
-- UserStorage.migrateAutomationSettings(local);
-- UserStorage.fillDefaults(local);
-- UserStorage.loadBarrier.resolve(local);
- return local;
- }
-
-@@ -126,18 +119,34 @@ export default class UserStorage {
- local.syncSettings = false;
- UserStorage.set({syncSettings: false});
- UserStorage.saveSyncSetting(false);
-- UserStorage.loadBarrier.resolve(local);
- return local;
- }
-
- const {errors: syncCfgErrors} = validateSettings($sync);
- syncCfgErrors.forEach((err) => logWarn(err));
-+ return $sync;
-+ }
-+
-+ private static async loadSettingsFromStorage(): Promise {
-+ if (UserStorage.loadBarrier) {
-+ return await UserStorage.loadBarrier.entry();
-+ }
-+ UserStorage.loadBarrier = new PromiseBarrier();
-
-- UserStorage.migrateAutomationSettings($sync);
-- UserStorage.fillDefaults($sync);
-+ let settings = await UserStorage.loadSettingsFromStorageWithoutManaged();
-
-- UserStorage.loadBarrier.resolve($sync);
-- return $sync;
-+ const managed = await readManagedStorage(settings);
-+ const {errors: managedCfgErrors} = validateSettings(managed);
-+ if (managedCfgErrors.length === 0) {
-+ settings = managed;
-+ } else {
-+ managedCfgErrors.forEach((err) => logWarn(err));
-+ }
-+
-+ UserStorage.migrateAutomationSettings(settings);
-+ UserStorage.fillDefaults(settings);
-+ UserStorage.loadBarrier.resolve(settings);
-+ return settings;
- }
-
- static async saveSettings(): Promise {
-diff --git a/src/background/utils/extension-api.ts b/src/background/utils/extension-api.ts
-index 6d18fc0919df..6812ac2e4224 100644
---- a/src/background/utils/extension-api.ts
-+++ b/src/background/utils/extension-api.ts
-@@ -97,6 +97,19 @@ export async function readLocalStorage(defaults:
- });
- }
-
-+export async function readManagedStorage(defaults: T): Promise {
-+ return new Promise((resolve) => {
-+ chrome.storage.managed.get(defaults, (managed: T) => {
-+ if (chrome.runtime.lastError) {
-+ console.error(chrome.runtime.lastError.message);
-+ resolve(defaults);
-+ return;
-+ }
-+ resolve(managed);
-+ });
-+ });
-+}
-+
- function prepareSyncStorage(values: T): {[key: string]: any} {
- for (const key in values) {
- const value = values[key];
-diff --git a/src/managed-storage.json b/src/managed-storage.json
-new file mode 100644
-index 000000000000..e394d0f1ff60
---- /dev/null
-+++ b/src/managed-storage.json
-@@ -0,0 +1,304 @@
-+{
-+
-+ "$schema": "http://json-schema.org/draft-07/schema#",
-+ "type": "object",
-+ "properties": {
-+ "schemeVersion": {
-+ "type": "integer"
-+ },
-+ "enabled": {
-+ "type": "boolean"
-+ },
-+ "fetchNews": {
-+ "type": "boolean"
-+ },
-+ "theme": {
-+ "$ref": "Theme"
-+ },
-+ "presets": {
-+ "type": "array",
-+ "items": {
-+ "$ref": "ThemePreset"
-+ }
-+ },
-+ "customThemes": {
-+ "type": "array",
-+ "items": {
-+ "$ref": "CustomSiteConfig"
-+ }
-+ },
-+ "enabledByDefault": {
-+ "type": "boolean"
-+ },
-+ "enabledFor": {
-+ "type": "array",
-+ "items": {
-+ "type": "string",
-+ "minLength": 1
-+ }
-+ },
-+ "disabledFor": {
-+ "type": "array",
-+ "items": {
-+ "type": "string",
-+ "minLength": 1
-+ }
-+ },
-+ "changeBrowserTheme": {
-+ "type": "boolean"
-+ },
-+ "syncSettings": {
-+ "type": "boolean"
-+ },
-+ "syncSitesFixes": {
-+ "type": "boolean"
-+ },
-+ "automation": {
-+ "$ref": "Automation"
-+ },
-+ "time": {
-+ "$ref": "TimeSettings"
-+ },
-+ "location": {
-+ "$ref": "LocationSettings"
-+ },
-+ "previewNewDesign": {
-+ "type": "boolean"
-+ },
-+ "previewNewestDesign": {
-+ "type": "boolean"
-+ },
-+ "enableForPDF": {
-+ "type": "boolean"
-+ },
-+ "enableForProtectedPages": {
-+ "type": "boolean"
-+ },
-+ "enableContextMenus": {
-+ "type": "boolean"
-+ },
-+ "detectDarkTheme": {
-+ "type": "boolean"
-+ },
-+ // Chrome's JSON schema format is weird and doesn't support `definitions` property and thus `#/definitions` references
-+ // https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-03
-+ // This "property" mimics it
-+ "definitions": {
-+ "type": "object",
-+ "properties": {
-+ "Theme": {
-+ "id": "Theme",
-+ "type": "object",
-+ "properties": {
-+ "mode": {
-+ "$ref": "FilterMode"
-+ },
-+ "brightness": {
-+ "type": "integer",
-+ "minimum": 0,
-+ "maximum": 200
-+ },
-+ "contrast": {
-+ "type": "integer",
-+ "minimum": 0,
-+ "maximum": 200
-+ },
-+ "grayscale": {
-+ "type": "integer",
-+ "minimum": 0,
-+ "maximum": 100
-+ },
-+ "sepia": {
-+ "type": "integer",
-+ "minimum": 0,
-+ "maximum": 100
-+ },
-+ "useFont": {
-+ "type": "boolean"
-+ },
-+ "fontFamily": {
-+ "type": "string",
-+ "minLength": 1
-+ },
-+ "textStroke": {
-+ "type": "number"
-+ },
-+ "engine": {
-+ "type": "string",
-+ "enum": [
-+ "cssFilter",
-+ "svgFilter",
-+ "staticTheme",
-+ "dynamicTheme"
-+ ]
-+ },
-+ "stylesheet": {
-+ "type": "string"
-+ },
-+ "darkSchemeBackgroundColor": {
-+ "$ref": "HexColor"
-+ },
-+ "darkSchemeTextColor": {
-+ "$ref": "HexColor"
-+ },
-+ "lightSchemeBackgroundColor": {
-+ "$ref": "HexColor"
-+ },
-+ "lightSchemeTextColor": {
-+ "$ref": "HexColor"
-+ },
-+ "scrollbarColor": {
-+ "$ref": "HexColorOrAuto"
-+ },
-+ "selectionColor": {
-+ "$ref": "HexColorOrAuto"
-+ },
-+ "styleSystemControls": {
-+ "type": "boolean"
-+ },
-+ "lightColorScheme": {
-+ "type": "string",
-+ "minLength": 1
-+ },
-+ "darkColorScheme": {
-+ "type": "string",
-+ "minLength": 1
-+ },
-+ "immediateModify": {
-+ "type": "boolean"
-+ }
-+ }
-+ },
-+ "HexColor": {
-+ "id": "HexColor",
-+ "type": "string",
-+ "pattern": "^[0-9a-f]{6}$"
-+ },
-+ "HexColorOrAuto": {
-+ "id": "HexColorOrAuto",
-+ "type": "string",
-+ "pattern": "^([0-9a-f]{6}|auto)$"
-+ },
-+ "FilterMode": {
-+ "id": "FilterMode",
-+ "type": "integer",
-+ "enum": [
-+ 0,
-+ 1
-+ ]
-+ },
-+ "ThemePreset": {
-+ "id": "ThemePreset",
-+ "type": "object",
-+ "properties": {
-+ "id": {
-+ "type": "string",
-+ "minLength": 1
-+ },
-+ "name": {
-+ "type": "string",
-+ "minLength": 1
-+ },
-+ "urls": {
-+ "type": "array",
-+ "items": {
-+ "type": "string",
-+ "minLength": 1
-+ }
-+ },
-+ "theme": {
-+ "$ref": "Theme"
-+ }
-+ },
-+ "required": [
-+ "id",
-+ "name",
-+ "urls",
-+ "theme"
-+ ]
-+ },
-+ "CustomSiteConfig": {
-+ "id": "CustomSiteConfig",
-+ "type": "object",
-+ "properties": {
-+ "url": {
-+ "type": "array",
-+ "items": {
-+ "type": "string",
-+ "minLength": 1
-+ }
-+ },
-+ "theme": {
-+ "$ref": "Theme"
-+ },
-+ "builtin": {
-+ "type": "boolean"
-+ }
-+ },
-+ "required": [
-+ "url",
-+ "theme"
-+ ]
-+ },
-+ "Automation": {
-+ "id": "Automation",
-+ "type": "object",
-+ "properties": {
-+ "enabled": {
-+ "type": "boolean"
-+ },
-+ "mode": {
-+ "$ref": "AutomationMode"
-+ },
-+ "behavior": {
-+ "type": "string",
-+ "enum": [
-+ "OnOff",
-+ "Scheme"
-+ ]
-+ }
-+ }
-+ },
-+ "AutomationMode": {
-+ "id": "AutomationMode",
-+ "type": "string",
-+ "enum": [
-+ "",
-+ "time",
-+ "system",
-+ "location"
-+ ]
-+ },
-+ "TimeSettings": {
-+ "id": "TimeSettings",
-+ "type": "object",
-+ "properties": {
-+ "activation": {
-+ "$ref": "Time"
-+ },
-+ "deactivation": {
-+ "$ref": "Time"
-+ }
-+ }
-+ },
-+ "Time": {
-+ "id": "Time",
-+ "type": "string",
-+ "pattern": "^((0?[0-9])|(1[0-9])|(2[0-3])):([0-5][0-9])$"
-+ },
-+ "LocationSettings": {
-+ "id": "LocationSettings",
-+ "type": "object",
-+ "properties": {
-+ "latitude": {
-+ "type": "number"
-+ },
-+ "longitude": {
-+ "type": "number"
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
-diff --git a/tasks/bundle-manifest.js b/tasks/bundle-manifest.js
-index ae29531e67b7..f4058a129f52 100644
---- a/tasks/bundle-manifest.js
-+++ b/tasks/bundle-manifest.js
-@@ -4,6 +4,7 @@ import {PLATFORM} from './platform.js';
- import * as reload from './reload.js';
- import {createTask} from './task.js';
- import {readJSON, writeJSON} from './utils.js';
-+import {copyFile} from 'node:fs/promises';
-
- async function patchManifest(platform, debug, watch, test) {
- const manifest = await readJSON(absolutePath('src/manifest.json'));
-@@ -16,6 +17,11 @@ async function patchManifest(platform, debug, watch, test) {
- if (platform === PLATFORM.CHROMIUM_MV3) {
- patched.browser_action = undefined;
- }
-+ if (platform === PLATFORM.CHROMIUM_MV2 || platform === PLATFORM.CHROMIUM_MV3) {
-+ patched.storage = {
-+ managed_schema: 'managed-storage.json',
-+ };
-+ }
- if (debug) {
- patched.version = '1';
- patched.description = `Debug build, platform: ${platform}, watch: ${watch ? 'yes' : 'no'}.`;
-@@ -42,6 +48,9 @@ async function manifests({platforms, debug, watch, test}) {
- const manifest = await patchManifest(platform, debug, watch, test);
- const destDir = getDestDir({debug, platform});
- await writeJSON(`${destDir}/manifest.json`, manifest);
-+ if (platform === PLATFORM.CHROMIUM_MV2 || platform === PLATFORM.CHROMIUM_MV3) {
-+ await copyFile(absolutePath('src/managed-storage.json'), `${destDir}/managed-storage.json`);
-+ }
- }
- }
-
-@@ -49,7 +58,7 @@ const bundleManifestTask = createTask(
- 'bundle-manifest',
- manifests,
- ).addWatcher(
-- ['src/manifest*.json'],
-+ ['src/manifest*.json', 'src/managed-storage.json'],
- async (changedFiles, _, buildPlatforms) => {
- const chrome = changedFiles.some((file) => file.endsWith('manifest.json'));
- const platforms = {};
diff --git a/patches/darkreader.nix b/patches/darkreader.nix
deleted file mode 100644
index ef2c19f..0000000
--- a/patches/darkreader.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix
-{
- lib,
- dashNixAdditionalProps,
- ...
-}: let
- stable = dashNixAdditionalProps.pkgsDarkreader;
-in
- stable.buildNpmPackage rec {
- version = "4.9.99";
- pname = "dark-reader";
- npmDepsHash = "sha256-m41HkwgbeRRmxJALQFJl/grYjjIqFOc47ltaesob1FA=";
- env.ESBUILD_BINARY_PATH = lib.getExe stable.esbuild;
- patches = [./darkeader.patch];
- src = stable.fetchFromGitHub {
- hash = "sha256-K375/4qOyE1Tp/T5V5uCGcNd1IVVbT1Pjdnq/8oRHj0=";
- owner = "darkreader";
- repo = "darkreader";
- rev = "v${version}";
- };
- installPhase = ''
- mkdir -p $out
- cp build/release/darkreader-firefox.xpi $out/latest.xpi
- '';
- }