Add mime type module and refactor options
This commit is contained in:
parent
3a2266d44f
commit
69fb898087
25 changed files with 641 additions and 478 deletions
|
|
@ -1,8 +1,12 @@
|
|||
# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
|
||||
{ pkgs, build_systems, lib, ... }:
|
||||
{
|
||||
pkgs,
|
||||
build_systems,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
makeOptionsDoc = configuration:
|
||||
pkgs.nixosOptionsDoc { options = configuration; };
|
||||
makeOptionsDoc = configuration: pkgs.nixosOptionsDoc { options = configuration; };
|
||||
generateDocs = obj: ''
|
||||
touch src/${obj.fst}.md
|
||||
sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md
|
||||
|
|
@ -11,18 +15,17 @@ let
|
|||
echo "- [${name}](${name}.md)" >> src/SUMMARY.md
|
||||
'';
|
||||
system = (build_systems ../example/.)."example".options;
|
||||
makeOptionsDocPrograms = name:
|
||||
pkgs.nixosOptionsDoc { options = system.mods.${name}; };
|
||||
makeOptionsDocPrograms = name: pkgs.nixosOptionsDoc { options = system.mods.${name}; };
|
||||
conf = makeOptionsDoc system.conf;
|
||||
paths = builtins.readDir ../modules/programs;
|
||||
names = lib.lists.remove "default"
|
||||
(map (name: lib.strings.removeSuffix ".nix" name)
|
||||
(lib.attrsets.mapAttrsToList (name: _: name) paths));
|
||||
names = lib.lists.remove "default" (
|
||||
map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
|
||||
);
|
||||
mods = map makeOptionsDocPrograms names;
|
||||
docs =
|
||||
lib.strings.concatLines (map generateDocs (lib.lists.zipLists names mods));
|
||||
docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists names mods));
|
||||
summary = lib.strings.concatStringsSep " " (map summaryAppend names);
|
||||
in pkgs.stdenvNoCC.mkDerivation {
|
||||
in
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "dashNix-book";
|
||||
src = ./.;
|
||||
|
||||
|
|
|
|||
|
|
@ -198,4 +198,6 @@ For package lists, please check the individual modules, as the lists can be long
|
|||
- fish: Enables and configures fish shell
|
||||
- kitty: Enables and configures kitty terminal
|
||||
- oxi: My own programs, can be selectively disabled, or as a whole
|
||||
- mime: Mime type configuration
|
||||
- xkb: Keyboard layout configuration
|
||||
- scripts: Various preconfigured scripts with the ability to add more
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
inputs = {
|
||||
dashvim.url = "github:DashieTM/DashVim";
|
||||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||
ironbar.url =
|
||||
"github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||
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";
|
||||
|
|
@ -22,9 +21,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
outputs = { ... }@inputs: {
|
||||
nixosConfigurations = inputs.dashNix.dashNixLib.build_systems ./.;
|
||||
};
|
||||
outputs =
|
||||
{ ... }@inputs:
|
||||
{
|
||||
nixosConfigurations = inputs.dashNix.dashNixLib.build_systems ./.;
|
||||
};
|
||||
|
||||
nixConfig = {
|
||||
builders-use-substitutes = true;
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
# ];
|
||||
# or amd, whatever you have
|
||||
gpu.nvidia.enable = true;
|
||||
kde_connect.enable = true;
|
||||
kdeConnect.enable = true;
|
||||
# login manager:
|
||||
# default is greetd
|
||||
# greetd = { };
|
||||
|
|
|
|||
17
flake.nix
17
flake.nix
|
|
@ -5,7 +5,9 @@
|
|||
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
||||
|
||||
nix-flatpak = { url = "github:gmodena/nix-flatpak"; };
|
||||
nix-flatpak = {
|
||||
url = "github:gmodena/nix-flatpak";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
|
|
@ -23,8 +25,7 @@
|
|||
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||
|
||||
ironbar = {
|
||||
url =
|
||||
"github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||
url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
|
||||
};
|
||||
|
||||
stylix.url = "github:danth/stylix";
|
||||
|
|
@ -47,11 +48,14 @@
|
|||
};
|
||||
};
|
||||
|
||||
outputs = { self, ... }@inputs:
|
||||
outputs =
|
||||
{ self, ... }@inputs:
|
||||
let
|
||||
stable = import inputs.stable {
|
||||
system = "x86_64-linux";
|
||||
config = { allowUnfree = true; };
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
pkgs = import inputs.nixpkgs {
|
||||
system = "x86_64-linux";
|
||||
|
|
@ -61,7 +65,8 @@
|
|||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
in rec {
|
||||
in
|
||||
rec {
|
||||
dashNixLib = import ./lib {
|
||||
inherit self inputs pkgs;
|
||||
lib = inputs.nixpkgs.lib;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
imports =
|
||||
[
|
||||
./common.nix
|
||||
./xdg.nix
|
||||
./themes
|
||||
./sync.nix
|
||||
]
|
||||
|
|
|
|||
86
home/xdg.nix
86
home/xdg.nix
|
|
@ -1,86 +0,0 @@
|
|||
# Copyright (c) 2020-2021 Mihai Fufezan
|
||||
# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix
|
||||
{ config, ... }:
|
||||
let
|
||||
browser = [ "firefox" ];
|
||||
imageViewer = [ "imv" ];
|
||||
videoPlayer = [ "mpv" ];
|
||||
audioPlayer = [ "io.bassi.Amberol" ];
|
||||
|
||||
xdgAssociations =
|
||||
type: program: list:
|
||||
builtins.listToAttrs (
|
||||
map (e: {
|
||||
name = "${type}/${e}";
|
||||
value = program;
|
||||
}) list
|
||||
);
|
||||
|
||||
image = xdgAssociations "image" imageViewer [
|
||||
"png"
|
||||
"svg"
|
||||
"jpeg"
|
||||
"gif"
|
||||
];
|
||||
video = xdgAssociations "video" videoPlayer [
|
||||
"mp4"
|
||||
"avi"
|
||||
"mkv"
|
||||
];
|
||||
audio = xdgAssociations "audio" audioPlayer [
|
||||
"mp3"
|
||||
"flac"
|
||||
"wav"
|
||||
"aac"
|
||||
];
|
||||
browserTypes =
|
||||
(xdgAssociations "application" browser [
|
||||
"json"
|
||||
"x-extension-htm"
|
||||
"x-extension-html"
|
||||
"x-extension-shtml"
|
||||
"x-extension-xht"
|
||||
"x-extension-xhtml"
|
||||
])
|
||||
// (xdgAssociations "x-scheme-handler" browser [
|
||||
"about"
|
||||
"ftp"
|
||||
"http"
|
||||
"https"
|
||||
"unknown"
|
||||
]);
|
||||
|
||||
# XDG MIME types
|
||||
associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) (
|
||||
{
|
||||
"application/pdf" = [ "org.pwmt.zathura-pdf-mupdf" ];
|
||||
"text/html" = browser;
|
||||
"text/plain" = [ "neovide" ];
|
||||
"x-scheme-handler/chrome" = [ "com.brave.browser" ];
|
||||
"inode/directory" = [ "yazi" ];
|
||||
}
|
||||
// image
|
||||
// video
|
||||
// audio
|
||||
// browserTypes
|
||||
);
|
||||
in
|
||||
{
|
||||
xdg = {
|
||||
enable = true;
|
||||
cacheHome = config.home.homeDirectory + "/.local/cache";
|
||||
|
||||
mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = associations;
|
||||
};
|
||||
|
||||
userDirs = {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
extraConfig = {
|
||||
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
162
lib/default.nix
162
lib/default.nix
|
|
@ -1,51 +1,61 @@
|
|||
{ inputs, pkgs, self, lib, additionalMods ? {
|
||||
nixos = [ ];
|
||||
home = [ ];
|
||||
}, mods ? {
|
||||
nixos = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
inputs.stylix.nixosModules.stylix
|
||||
../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
|
||||
];
|
||||
}, ... }: {
|
||||
/* *
|
||||
# build_systems
|
||||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
self,
|
||||
lib,
|
||||
additionalMods ? {
|
||||
nixos = [ ];
|
||||
home = [ ];
|
||||
},
|
||||
mods ? {
|
||||
nixos = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
inputs.stylix.nixosModules.stylix
|
||||
../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
|
||||
];
|
||||
},
|
||||
...
|
||||
}:
|
||||
{
|
||||
/*
|
||||
*
|
||||
# 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.
|
||||
Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well.
|
||||
|
||||
A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
|
||||
A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
|
||||
|
||||
The second parameter is the root of your configuration, which should be ./. in most cases.
|
||||
The second parameter is the root of your configuration, which should be ./. in most cases.
|
||||
|
||||
`root`
|
||||
`root`
|
||||
|
||||
: the root path of your configuration
|
||||
: the root path of your configuration
|
||||
|
||||
# Example usage
|
||||
:::{.example}
|
||||
```nix
|
||||
nixosConfigurations =
|
||||
(build_systems [ "nixos" ] ./.);
|
||||
```
|
||||
:::
|
||||
# Example usage
|
||||
:::{.example}
|
||||
```nix
|
||||
nixosConfigurations =
|
||||
(build_systems [ "nixos" ] ./.);
|
||||
```
|
||||
:::
|
||||
*/
|
||||
# let
|
||||
# paths = builtins.readDir ;
|
||||
|
|
@ -54,31 +64,53 @@
|
|||
# );
|
||||
|
||||
# in
|
||||
build_systems = root:
|
||||
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;
|
||||
in inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit self inputs pkgs mod additionalHomeConfig root;
|
||||
hostName = name;
|
||||
homeMods = mods.home;
|
||||
additionalHomeMods = additionalMods.home;
|
||||
};
|
||||
modules = [ 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)))));
|
||||
build_systems =
|
||||
root:
|
||||
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;
|
||||
in
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit
|
||||
self
|
||||
inputs
|
||||
pkgs
|
||||
mod
|
||||
additionalHomeConfig
|
||||
root
|
||||
;
|
||||
hostName = name;
|
||||
homeMods = mods.home;
|
||||
additionalHomeMods = additionalMods.home;
|
||||
};
|
||||
modules =
|
||||
[ 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)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
buildIso = inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = { inherit self inputs pkgs; };
|
||||
specialArgs = {
|
||||
inherit self inputs pkgs;
|
||||
};
|
||||
modules = [ ../iso/configuration.nix ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
}:
|
||||
{
|
||||
options.mods = {
|
||||
base_packages = {
|
||||
basePackages = {
|
||||
enable = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
Enables default system packages.
|
||||
'';
|
||||
};
|
||||
additional_packages = lib.mkOption {
|
||||
additionalPackages = lib.mkOption {
|
||||
default = [ ];
|
||||
example = [ pkgs.openssl ];
|
||||
type = with lib.types; listOf package;
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
Note that these are installed even if base packages is disabled, e.g. you can also use this as the only packages to install.
|
||||
'';
|
||||
};
|
||||
special_programs = lib.mkOption {
|
||||
specialPrograms = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
special program configuration to be added which require programs.something notation.
|
||||
'';
|
||||
};
|
||||
special_services = lib.mkOption {
|
||||
specialServices = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
config = lib.optionalAttrs (options ? environment.systemPackages) {
|
||||
environment.systemPackages =
|
||||
if config.mods.base_packages.enable then
|
||||
if config.mods.basePackages.enable then
|
||||
with pkgs;
|
||||
[
|
||||
adwaita-icon-theme
|
||||
|
|
@ -73,13 +73,13 @@
|
|||
upower
|
||||
xorg.xkbutils
|
||||
]
|
||||
++ config.mods.base_packages.additional_packages
|
||||
++ config.mods.basePackages.additionalPackages
|
||||
else
|
||||
config.mods.base_packages.additional_packages;
|
||||
config.mods.basePackages.additionalPackages;
|
||||
|
||||
gtk.iconCache.enable = false;
|
||||
services =
|
||||
if config.mods.base_packages.enable then
|
||||
if config.mods.basePackages.enable then
|
||||
{
|
||||
upower.enable = true;
|
||||
dbus = {
|
||||
|
|
@ -92,12 +92,12 @@
|
|||
openFirewall = true;
|
||||
};
|
||||
}
|
||||
// config.mods.base_packages.special_services
|
||||
// config.mods.basePackages.specialServices
|
||||
else
|
||||
config.mods.base_packages.special_services;
|
||||
config.mods.basePackages.specialServices;
|
||||
|
||||
programs =
|
||||
if config.mods.base_packages.enable then
|
||||
if config.mods.basePackages.enable then
|
||||
{
|
||||
nix-ld = {
|
||||
enable = true;
|
||||
|
|
@ -119,9 +119,9 @@
|
|||
ssh.startAgent = true;
|
||||
gnupg.agent.enable = true;
|
||||
}
|
||||
// config.mods.base_packages.special_programs
|
||||
// config.mods.basePackages.specialPrograms
|
||||
else
|
||||
config.mods.base_packages.special_programs;
|
||||
config.mods.basePackages.specialPrograms;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
imports = [
|
||||
./acpid.nix
|
||||
./base_packages.nix
|
||||
./basePackages.nix
|
||||
./bluetooth.nix
|
||||
./coding.nix
|
||||
./drives.nix
|
||||
|
|
@ -12,13 +12,13 @@
|
|||
./gdm.nix
|
||||
./git.nix
|
||||
./gnome.nix
|
||||
./gnome_services.nix
|
||||
./gnomeServices.nix
|
||||
./gpu.nix
|
||||
./greetd.nix
|
||||
./home_packages.nix
|
||||
./homePackages.nix
|
||||
./hyprland
|
||||
./kde.nix
|
||||
./kde_connect.nix
|
||||
./kdeConnect.nix
|
||||
./keepassxc.nix
|
||||
./kitty.nix
|
||||
./media.nix
|
||||
|
|
@ -35,6 +35,7 @@
|
|||
./stylix.nix
|
||||
./teams.nix
|
||||
./virtualbox.nix
|
||||
./mime.nix
|
||||
./xkb.nix
|
||||
./xone.nix
|
||||
./yazi
|
||||
|
|
|
|||
|
|
@ -130,7 +130,9 @@ in
|
|||
};
|
||||
};
|
||||
# TODO make this convert to choice of drives -> thanks to funny types this doesn't work...
|
||||
swapDevices = lib.mkIf config.mods.drives.useSwap.enable [ { device = "/dev/disk/by-label/SWAP"; } ];
|
||||
swapDevices = lib.mkIf config.mods.drives.useSwap.enable [
|
||||
{ device = "/dev/disk/by-label/SWAP"; }
|
||||
];
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
abbr --add gl 'git pull origin'
|
||||
abbr --add gm 'git commit -m'
|
||||
abbr --add ga "git add -A"
|
||||
abbr --add gc "git commit --amend --no-edit"
|
||||
abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20'
|
||||
abbr --add s "kitty +kitten ssh"
|
||||
abbr --add zl 'z "" '
|
||||
|
|
|
|||
|
|
@ -44,13 +44,13 @@
|
|||
type = lib.types.bool;
|
||||
description = "Whether to use gamemode";
|
||||
};
|
||||
gpu_optimization = lib.mkOption {
|
||||
gpuOptimization = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
description = "Whether to use GPU performance setting. NOTE: this is at your own risk!";
|
||||
};
|
||||
gpu_device = lib.mkOption {
|
||||
gpuDevice = lib.mkOption {
|
||||
default = 0;
|
||||
example = 1;
|
||||
type = lib.types.int;
|
||||
|
|
@ -71,9 +71,9 @@
|
|||
general = {
|
||||
governor = "performance";
|
||||
};
|
||||
gpu = lib.mkIf config.mods.gaming.gpu_optimization {
|
||||
gpu = lib.mkIf config.mods.gaming.gpuOptimization {
|
||||
apply_gpu_optimisations = "accept-responsibility";
|
||||
gpu_device = config.mods.gaming.gpu_device;
|
||||
gpu_device = config.mods.gaming.gpuDevice;
|
||||
amd_performance_level = "high";
|
||||
nv_powermizer_mode = 1;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
lib,
|
||||
config,
|
||||
options,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
|
|
@ -19,7 +18,7 @@
|
|||
type = lib.types.str;
|
||||
description = "Git email";
|
||||
};
|
||||
ssh_config = lib.mkOption {
|
||||
sshConfig = lib.mkOption {
|
||||
default = ''
|
||||
Host github.com
|
||||
${
|
||||
|
|
@ -63,7 +62,7 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
home.file.".ssh/config".text = config.mods.git.ssh_config;
|
||||
home.file.".ssh/config".text = config.mods.git.sshConfig;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
}:
|
||||
{
|
||||
options.mods = {
|
||||
gnome_services.enable = lib.mkOption {
|
||||
gnomeServices.enable = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.mods.gnome_services.enable (
|
||||
config = lib.mkIf config.mods.gnomeServices.enable (
|
||||
lib.optionalAttrs (options ? services.gnome.gnome-keyring) {
|
||||
programs.dconf.enable = true;
|
||||
services = {
|
||||
|
|
@ -6,14 +6,14 @@
|
|||
...
|
||||
}:
|
||||
{
|
||||
options.mods.home_packages = {
|
||||
options.mods.homePackages = {
|
||||
useDefaultPackages = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
description = "Use default packages (will use additional_packages only if disabled)";
|
||||
};
|
||||
additional_packages = lib.mkOption {
|
||||
additionalPackages = lib.mkOption {
|
||||
default = [ ];
|
||||
example = [ pkgs.flatpak ];
|
||||
type = with lib.types; listOf package;
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
Will be installed regardless of default home manager packages are installed.
|
||||
'';
|
||||
};
|
||||
special_programs = lib.mkOption {
|
||||
specialPrograms = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
special program configuration to be added which require programs.something notation.
|
||||
'';
|
||||
};
|
||||
special_services = lib.mkOption {
|
||||
specialServices = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -77,18 +77,18 @@
|
|||
};
|
||||
config = lib.optionalAttrs (options ? home.packages) {
|
||||
home.packages =
|
||||
if config.mods.home_packages.useDefaultPackages then
|
||||
if config.mods.homePackages.useDefaultPackages then
|
||||
with pkgs;
|
||||
[
|
||||
# TODO add fcp once fixed....
|
||||
(lib.mkIf config.mods.home_packages.ncspot ncspot)
|
||||
(lib.mkIf config.mods.home_packages.vesktop vesktop)
|
||||
(lib.mkIf config.mods.home_packages.nextcloudClient nextcloud-client)
|
||||
(lib.mkIf (!isNull config.mods.home_packages.matrixClient) config.mods.home_packages.matrixClient)
|
||||
(lib.mkIf (!isNull config.mods.home_packages.mailClient) config.mods.home_packages.mailClient)
|
||||
(lib.mkIf config.mods.homePackages.ncspot ncspot)
|
||||
(lib.mkIf config.mods.homePackages.vesktop vesktop)
|
||||
(lib.mkIf config.mods.homePackages.nextcloudClient nextcloud-client)
|
||||
(lib.mkIf (!isNull config.mods.homePackages.matrixClient) config.mods.homePackages.matrixClient)
|
||||
(lib.mkIf (!isNull config.mods.homePackages.mailClient) config.mods.homePackages.mailClient)
|
||||
(lib.mkIf (
|
||||
!isNull config.mods.home_packages.additionalBrowser
|
||||
) config.mods.home_packages.additionalBrowser)
|
||||
!isNull config.mods.homePackages.additionalBrowser
|
||||
) config.mods.homePackages.additionalBrowser)
|
||||
adw-gtk3
|
||||
bat
|
||||
brightnessctl
|
||||
|
|
@ -119,9 +119,9 @@
|
|||
zenith
|
||||
zoxide
|
||||
]
|
||||
++ config.mods.home_packages.additional_packages
|
||||
++ config.mods.homePackages.additionalPackages
|
||||
else
|
||||
config.mods.home_packages.additional_packages;
|
||||
config.mods.homePackages.additionalPackages;
|
||||
|
||||
xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml { }).generate "direnv" {
|
||||
global = {
|
||||
|
|
@ -129,14 +129,14 @@
|
|||
};
|
||||
};
|
||||
programs =
|
||||
if config.mods.home_packages.useDefaultPackages then
|
||||
config.mods.home_packages.special_programs
|
||||
if config.mods.homePackages.useDefaultPackages then
|
||||
config.mods.homePackages.specialPrograms
|
||||
else
|
||||
config.mods.home_packages.special_programs;
|
||||
config.mods.homePackages.specialPrograms;
|
||||
services =
|
||||
if config.mods.home_packages.useDefaultPackages then
|
||||
config.mods.home_packages.special_services
|
||||
if config.mods.homePackages.useDefaultPackages then
|
||||
config.mods.homePackages.specialServices
|
||||
else
|
||||
config.mods.home_packages.special_services;
|
||||
config.mods.homePackages.specialServices;
|
||||
};
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
type = lib.types.bool;
|
||||
description = "Enables anyrun";
|
||||
};
|
||||
use_default_config = lib.mkOption {
|
||||
useDefaultConfig = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
Use preconfigured anyrun config.
|
||||
'';
|
||||
};
|
||||
custom_config = lib.mkOption {
|
||||
customConfig = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
Will be merged with default configuration if enabled.
|
||||
'';
|
||||
};
|
||||
use_default_css = lib.mkOption {
|
||||
useDefaultCss = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
Use preconfigured anyrun css.
|
||||
'';
|
||||
};
|
||||
custom_css = lib.mkOption {
|
||||
customCss = lib.mkOption {
|
||||
default = '''';
|
||||
example = ''
|
||||
#window {
|
||||
|
|
@ -63,7 +63,7 @@
|
|||
programs.anyrun = {
|
||||
enable = true;
|
||||
config =
|
||||
if config.mods.hyprland.anyrun.use_default_config then
|
||||
if config.mods.hyprland.anyrun.useDefaultConfig then
|
||||
{
|
||||
plugins = [
|
||||
inputs.anyrun.packages.${pkgs.system}.applications
|
||||
|
|
@ -83,12 +83,12 @@
|
|||
hidePluginInfo = true;
|
||||
closeOnClick = true;
|
||||
}
|
||||
// config.mods.hyprland.anyrun.custom_config
|
||||
// config.mods.hyprland.anyrun.customConfig
|
||||
else
|
||||
config.mods.hyprland.anyrun.custom_config;
|
||||
config.mods.hyprland.anyrun.customConfig;
|
||||
|
||||
extraCss =
|
||||
if config.mods.hyprland.anyrun.use_default_css then
|
||||
if config.mods.hyprland.anyrun.useDefaultCss then
|
||||
''
|
||||
#window {
|
||||
border-radius: 10px;
|
||||
|
|
@ -137,9 +137,9 @@
|
|||
border-radius: 10px;
|
||||
}
|
||||
''
|
||||
+ config.mods.hyprland.anyrun.custom_css
|
||||
+ config.mods.hyprland.anyrun.customCss
|
||||
else
|
||||
config.mods.hyprland.anyrun.custom_css;
|
||||
config.mods.hyprland.anyrun.customCss;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
The workspace configuration for hyprland.
|
||||
'';
|
||||
};
|
||||
no_atomic = lib.mkOption {
|
||||
noAtomic = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -45,7 +45,7 @@
|
|||
Use tearing
|
||||
'';
|
||||
};
|
||||
extra_autostart = lib.mkOption {
|
||||
extraAutostart = lib.mkOption {
|
||||
default = [ ];
|
||||
example = [ "your application" ];
|
||||
type = lib.types.listOf lib.types.str;
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
Extra exec_once.
|
||||
'';
|
||||
};
|
||||
use_default_config = lib.mkOption {
|
||||
useDefaultConfig = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
Use preconfigured Hyprland config.
|
||||
'';
|
||||
};
|
||||
custom_config = lib.mkOption {
|
||||
customConfig = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
settings =
|
||||
if config.mods.hyprland.use_default_config then
|
||||
if config.mods.hyprland.useDefaultConfig then
|
||||
{
|
||||
"$mod" = "SUPER";
|
||||
|
||||
|
|
@ -131,14 +131,14 @@
|
|||
"$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate"
|
||||
|
||||
# media keys
|
||||
(lib.mkIf config.mods.scripts.audio-control ",XF86AudioMute,exec, audio-control mute")
|
||||
(lib.mkIf config.mods.scripts.audio-control ",XF86AudioLowerVolume,exec, audio-control sink -5%")
|
||||
(lib.mkIf config.mods.scripts.audio-control ",XF86AudioRaiseVolume,exec, audio-control sink +5%")
|
||||
(lib.mkIf config.mods.scripts.audioControl ",XF86AudioMute,exec, audio-control mute")
|
||||
(lib.mkIf config.mods.scripts.audioControl ",XF86AudioLowerVolume,exec, audio-control sink -5%")
|
||||
(lib.mkIf config.mods.scripts.audioControl ",XF86AudioRaiseVolume,exec, audio-control sink +5%")
|
||||
",XF86AudioPlay,exec, playerctl play-pause"
|
||||
",XF86AudioNext,exec, playerctl next"
|
||||
",XF86AudioPrev,exec, playerctl previous"
|
||||
(lib.mkIf config.mods.scripts.change-brightness ",XF86MonBrightnessDown,exec, change-brightness brightness 10%-")
|
||||
(lib.mkIf config.mods.scripts.change-brightness ",XF86MonBrightnessUp,exec, change-brightness brightness +10%")
|
||||
(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
|
||||
|
|
@ -219,7 +219,7 @@
|
|||
border_size = 3;
|
||||
"col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
|
||||
# "col.inactive_border" = "0x66333333";
|
||||
allow_tearing = lib.mkIf config.mods.hyprland.no_atomic true;
|
||||
allow_tearing = lib.mkIf config.mods.hyprland.noAtomic true;
|
||||
};
|
||||
|
||||
decoration = {
|
||||
|
|
@ -297,7 +297,7 @@
|
|||
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
|
||||
"QT_SCALE_FACTOR,1"
|
||||
''EDITOR,"neovide --novsync --nofork"''
|
||||
(lib.mkIf config.mods.hyprland.no_atomic "WLR_DRM_NO_ATOMIC,1")
|
||||
(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")
|
||||
|
|
@ -349,7 +349,7 @@
|
|||
# should be taken care of with the new systemd services
|
||||
# "nextcloud --background"
|
||||
"oxinoti"
|
||||
] ++ config.mods.hyprland.extra_autostart;
|
||||
] ++ config.mods.hyprland.extraAutostart;
|
||||
|
||||
# plugin = {
|
||||
# hyprspace = {
|
||||
|
|
@ -359,9 +359,9 @@
|
|||
# };
|
||||
# };
|
||||
}
|
||||
// config.mods.hyprland.custom_config
|
||||
// config.mods.hyprland.customConfig
|
||||
else
|
||||
lib.mkForce config.mods.hyprland.custom_config;
|
||||
lib.mkForce config.mods.hyprland.customConfig;
|
||||
plugins = config.mods.hyprland.plugins;
|
||||
#inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
options,
|
||||
...
|
||||
}:
|
||||
|
|
@ -17,262 +16,309 @@ in
|
|||
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 = ''
|
||||
@import url("/home/${username}/.config/gtk-3.0/gtk.css");
|
||||
style =
|
||||
if config.mods.hyprland.ironbar.useDefaultCss then
|
||||
''
|
||||
@import url("/home/${username}/.config/gtk-3.0/gtk.css");
|
||||
|
||||
* {
|
||||
color: #71bbe6;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
* {
|
||||
color: #71bbe6;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.background {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
.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 {
|
||||
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 {
|
||||
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:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
|
||||
.workspaces .item.focused {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
.workspaces .item.focused {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
|
||||
.audio-box {
|
||||
padding: 2em;
|
||||
background-color: #1E1E2E;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.audio-box {
|
||||
padding: 2em;
|
||||
background-color: #1E1E2E;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.audio-slider {
|
||||
padding: 5px;
|
||||
margin: 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 {
|
||||
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;
|
||||
}
|
||||
.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;
|
||||
}
|
||||
.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;
|
||||
}
|
||||
#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 {
|
||||
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;
|
||||
}
|
||||
.popup-button-box {
|
||||
padding: 2px 0px 2px 0px;
|
||||
}
|
||||
|
||||
.clock {
|
||||
padding: 0px 5px 0px 5px;
|
||||
font-size: 17px;
|
||||
background-color: #1E1E2E;
|
||||
}
|
||||
.clock {
|
||||
padding: 0px 5px 0px 5px;
|
||||
font-size: 17px;
|
||||
background-color: #1E1E2E;
|
||||
}
|
||||
|
||||
.clock:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
.clock:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
|
||||
.custom button {
|
||||
background-color: #1E1E2E;
|
||||
}
|
||||
.custom button {
|
||||
background-color: #1E1E2E;
|
||||
}
|
||||
|
||||
.custom button:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
.custom button:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
|
||||
.memory-usage {
|
||||
font-size: 15px;
|
||||
margin: 0px 5px 0px 0px;
|
||||
}
|
||||
.memory-usage {
|
||||
font-size: 15px;
|
||||
margin: 0px 5px 0px 0px;
|
||||
}
|
||||
|
||||
.memory-usage:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
.memory-usage:hover {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
|
||||
.popup-clock {
|
||||
background-color: #1E1E2E;
|
||||
border-radius: 5px;
|
||||
padding: 2px 8px 10px 8px;
|
||||
}
|
||||
.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-clock {
|
||||
font-size: 2.5em;
|
||||
padding-bottom: 0.1em;
|
||||
}
|
||||
|
||||
.popup-clock .calendar {
|
||||
border-radius: 5px;
|
||||
font-size: 1.05em;
|
||||
}
|
||||
.popup-clock .calendar {
|
||||
border-radius: 5px;
|
||||
font-size: 1.05em;
|
||||
}
|
||||
|
||||
.popup-clock .calendar:selected {
|
||||
background-color: #3e4152;
|
||||
}
|
||||
'';
|
||||
.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}" = {
|
||||
end = config.conf.ironbar.modules ++ [
|
||||
monitors."${config.conf.defaultMonitor}" =
|
||||
if config.mods.hyprland.ironbar.useDefaultConfig then
|
||||
{
|
||||
type = "sys_info";
|
||||
format = [ " {memory_percent}" ];
|
||||
interval.memory = 30;
|
||||
class = "memory-usage";
|
||||
}
|
||||
{
|
||||
type = "custom";
|
||||
bar = [
|
||||
end = config.conf.ironbar.modules ++ [
|
||||
{
|
||||
type = "button";
|
||||
class = "popup-button";
|
||||
label = "";
|
||||
on_click = "popup:toggle";
|
||||
type = "sys_info";
|
||||
format = [ " {memory_percent}" ];
|
||||
interval.memory = 30;
|
||||
class = "memory-usage";
|
||||
}
|
||||
];
|
||||
class = "popup-button-box";
|
||||
popup = [
|
||||
{
|
||||
type = "box";
|
||||
orientation = "vertical";
|
||||
class = "audio-box";
|
||||
widgets = [
|
||||
type = "custom";
|
||||
bar = [
|
||||
{
|
||||
type = "button";
|
||||
class = "popup-button";
|
||||
label = "";
|
||||
on_click = "popup:toggle";
|
||||
}
|
||||
];
|
||||
class = "popup-button-box";
|
||||
popup = [
|
||||
{
|
||||
type = "box";
|
||||
orientation = "horizontal";
|
||||
orientation = "vertical";
|
||||
class = "audio-box";
|
||||
widgets = [
|
||||
{
|
||||
type = "button";
|
||||
class = "audio-button";
|
||||
label = "";
|
||||
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth";
|
||||
type = "box";
|
||||
orientation = "horizontal";
|
||||
widgets = [
|
||||
{
|
||||
type = "button";
|
||||
class = "audio-button";
|
||||
label = "";
|
||||
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth";
|
||||
}
|
||||
{
|
||||
type = "button";
|
||||
class = "audio-button";
|
||||
label = "";
|
||||
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh internal";
|
||||
}
|
||||
];
|
||||
class = "audio-button-box";
|
||||
}
|
||||
{
|
||||
type = "button";
|
||||
class = "audio-button";
|
||||
label = "";
|
||||
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh internal";
|
||||
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%";
|
||||
}
|
||||
];
|
||||
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";
|
||||
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";
|
||||
}
|
||||
];
|
||||
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;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
{
|
||||
|
||||
options.mods = {
|
||||
kde_connect.enable = lib.mkOption {
|
||||
kdeConnect.enable = lib.mkOption {
|
||||
default = false;
|
||||
type = lib.types.bool;
|
||||
example = true;
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.mods.kde_connect.enable (
|
||||
config = lib.mkIf config.mods.kdeConnect.enable (
|
||||
lib.optionalAttrs (options ? networking.firewall) {
|
||||
networking.firewall = {
|
||||
allowedTCPPortRanges = [
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
Additional media packages.
|
||||
'';
|
||||
};
|
||||
special_programs = lib.mkOption {
|
||||
specialPrograms = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
special program configuration to be added which require programs.something notation.
|
||||
'';
|
||||
};
|
||||
special_services = lib.mkOption {
|
||||
specialServices = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -78,13 +78,13 @@
|
|||
obs-studio.enable = true;
|
||||
obs-studio.plugins = with pkgs; [ obs-studio-plugins.obs-vaapi ];
|
||||
}
|
||||
// config.mods.media.special_programs
|
||||
// config.mods.media.specialPrograms
|
||||
else
|
||||
config.mods.media.special_programs;
|
||||
config.mods.media.specialPrograms;
|
||||
services =
|
||||
if config.mods.media.useBasePackages then
|
||||
config.mods.media.special_services
|
||||
config.mods.media.specialServices
|
||||
else
|
||||
config.mods.media.special_services;
|
||||
config.mods.media.specialServices;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
154
modules/programs/mime.nix
Normal file
154
modules/programs/mime.nix
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
# Copyright (c) 2020-2021 Mihai Fufezan
|
||||
# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options.mods.mime = {
|
||||
enable = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
description = "Enables mime handling with nix";
|
||||
};
|
||||
imageTypes = lib.mkOption {
|
||||
default = [
|
||||
"png"
|
||||
"svg"
|
||||
"jpeg"
|
||||
"gif"
|
||||
];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Image mime handlers";
|
||||
};
|
||||
videoTypes = lib.mkOption {
|
||||
default = [
|
||||
"mp4"
|
||||
"avi"
|
||||
"mkv"
|
||||
];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Video mime handlers";
|
||||
};
|
||||
audioTypes = lib.mkOption {
|
||||
default = [
|
||||
"mp3"
|
||||
"flac"
|
||||
"wav"
|
||||
"aac"
|
||||
];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Audio mime handlers";
|
||||
};
|
||||
browserTypes = lib.mkOption {
|
||||
default = [
|
||||
"json"
|
||||
"x-extension-htm"
|
||||
"x-extension-html"
|
||||
"x-extension-shtml"
|
||||
"x-extension-xht"
|
||||
"x-extension-xhtml"
|
||||
];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Browser mime handlers";
|
||||
};
|
||||
browserXTypes = lib.mkOption {
|
||||
default = [
|
||||
"about"
|
||||
"ftp"
|
||||
"http"
|
||||
"https"
|
||||
"unknown"
|
||||
];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Browser X mime handlers";
|
||||
};
|
||||
browserApplications = lib.mkOption {
|
||||
default = [ "firefox" ];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Applications used for handling browser mime types";
|
||||
};
|
||||
imageApplications = lib.mkOption {
|
||||
default = [ "imv" ];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Applications used for handling image mime types";
|
||||
};
|
||||
videoApplications = lib.mkOption {
|
||||
default = [ "mpv" ];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Applications used for handling video mime types";
|
||||
};
|
||||
audioApplications = lib.mkOption {
|
||||
default = [ "io.bassi.Amberol" ];
|
||||
example = [ ];
|
||||
type = with lib.types; listOf str;
|
||||
description = "Applications used for handling audio mime types";
|
||||
};
|
||||
# TODO additional config
|
||||
};
|
||||
config = lib.optionalAttrs (options ? home) {
|
||||
xdg =
|
||||
let
|
||||
xdgAssociations =
|
||||
type: program: list:
|
||||
builtins.listToAttrs (
|
||||
map (e: {
|
||||
name = "${type}/${e}";
|
||||
value = program;
|
||||
}) list
|
||||
);
|
||||
|
||||
imageAc = xdgAssociations "image" config.mods.mime.imageApplications config.mods.mime.imageTypes;
|
||||
videoAc = xdgAssociations "video" config.mods.mime.videoApplications config.mods.mime.videoTypes;
|
||||
audioAc = xdgAssociations "audio" config.mods.mime.audioApplications config.mods.mime.audioTypes;
|
||||
browserAc =
|
||||
(xdgAssociations "application" config.mods.mime.browserApplications config.mods.mime.browserTypes)
|
||||
// (xdgAssociations "x-scheme-handler" config.mods.mime.browserApplications
|
||||
config.mods.mime.browserXTypes
|
||||
);
|
||||
associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) (
|
||||
# TODO make configurable
|
||||
{
|
||||
"application/pdf" = [ "org.pwmt.zathura-pdf-mupdf" ];
|
||||
"text/html" = config.mods.mime.browserApplications;
|
||||
"text/plain" = [ "neovide" ];
|
||||
"x-scheme-handler/chrome" = [ "com.brave.browser" ];
|
||||
"inode/directory" = [ "yazi" ];
|
||||
}
|
||||
// imageAc
|
||||
// audioAc
|
||||
// videoAc
|
||||
// browserAc
|
||||
);
|
||||
in
|
||||
lib.mkIf config.mods.mime.enable {
|
||||
enable = true;
|
||||
cacheHome = config.home.homeDirectory + "/.local/cache";
|
||||
|
||||
mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = associations;
|
||||
};
|
||||
|
||||
userDirs = {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
extraConfig = {
|
||||
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
|
||||
pws = "${config.home.homeDirectory}/pws";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -17,14 +17,18 @@
|
|||
config = lib.mkIf config.mods.printing.enable (
|
||||
lib.optionalAttrs (options ? services.printing) {
|
||||
# Enable CUPS to print documents.
|
||||
services.printing.enable = true;
|
||||
services.printing.browsing = true;
|
||||
services.printing.drivers = [ pkgs.hplip ];
|
||||
services.printing.startWhenNeeded = true; # optional
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
openFirewall = true;
|
||||
services = {
|
||||
printing = {
|
||||
enable = true;
|
||||
browsing = true;
|
||||
drivers = [ pkgs.hplip ];
|
||||
startWhenNeeded = true; # optional
|
||||
};
|
||||
avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@
|
|||
}:
|
||||
{
|
||||
options.mods.scripts = {
|
||||
change-brightness = lib.mkOption {
|
||||
changeBrightness = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
description = "Enables the change-brightness script";
|
||||
};
|
||||
audio-control = lib.mkOption {
|
||||
audioControl = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -28,8 +28,8 @@
|
|||
config = (
|
||||
lib.optionalAttrs (options ? home.packages) {
|
||||
home.packages = [
|
||||
(lib.mkIf config.mods.scripts.change-brightness (
|
||||
pkgs.writeShellScriptBin "change-brightness" ''
|
||||
(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)}')
|
||||
|
|
@ -41,8 +41,8 @@
|
|||
fi
|
||||
''
|
||||
))
|
||||
(lib.mkIf config.mods.scripts.audio-control (
|
||||
pkgs.writeShellScriptBin "audio-control" ''
|
||||
(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')
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
Enables starship prompt
|
||||
'';
|
||||
};
|
||||
use_default_prompt = lib.mkOption {
|
||||
useDefaultPrompt = lib.mkOption {
|
||||
default = true;
|
||||
example = false;
|
||||
type = lib.types.bool;
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
Enables preconfigured prompt
|
||||
'';
|
||||
};
|
||||
custom_prompt = lib.mkOption {
|
||||
customPrompt = lib.mkOption {
|
||||
default = { };
|
||||
example = { };
|
||||
type = with lib.types; attrsOf anything;
|
||||
|
|
@ -49,9 +49,9 @@
|
|||
{
|
||||
enable = true;
|
||||
interactiveOnly = true;
|
||||
presets = lib.mkIf config.mods.starship.use_default_prompt [ "pastel-powerline" ];
|
||||
presets = lib.mkIf config.mods.starship.useDefaultPrompt [ "pastel-powerline" ];
|
||||
settings =
|
||||
lib.mkIf config.mods.starship.use_default_prompt {
|
||||
lib.mkIf config.mods.starship.useDefaultPrompt {
|
||||
# derived from https://starship.rs/presets/pastel-powerline
|
||||
format = "$username$directory$git_branch$git_status$git_metrics[ ](bg:none fg:prev_bg)";
|
||||
right_format = "$c$elixir$elm$golang$gradle$haskell$java$julia$nodejs$nim$rust$scala$python$ocaml$opa$perl$zig$dart$dotnet$nix_shell$shell$solidity[](bg:prev_bg fg:#3465A4)$time$os";
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
format = "[ $time ]($style)";
|
||||
};
|
||||
}
|
||||
// config.mods.starship.custom_prompt;
|
||||
// config.mods.starship.customPrompt;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue