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 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - 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 @@ +
![Logo of DashNix](logo.svg)
-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 - ''; - }