Add mime type module and refactor options

This commit is contained in:
DashieTM 2024-09-09 23:11:36 +02:00
parent 3a2266d44f
commit 69fb898087
25 changed files with 641 additions and 478 deletions

View file

@ -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 = ./.;

View file

@ -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

View file

@ -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,7 +21,9 @@
};
};
outputs = { ... }@inputs: {
outputs =
{ ... }@inputs:
{
nixosConfigurations = inputs.dashNix.dashNixLib.build_systems ./.;
};

View file

@ -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 = { };

View file

@ -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;

View file

@ -29,7 +29,6 @@
imports =
[
./common.nix
./xdg.nix
./themes
./sync.nix
]

View file

@ -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";
};
};
};
}

View file

@ -1,7 +1,13 @@
{ inputs, pkgs, self, lib, additionalMods ? {
{
inputs,
pkgs,
self,
lib,
additionalMods ? {
nixos = [ ];
home = [ ];
}, mods ? {
},
mods ? {
nixos = [
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
@ -25,8 +31,12 @@
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.
@ -54,31 +64,53 @@
# );
# in
build_systems = root:
builtins.listToAttrs (map (name: {
build_systems =
root:
builtins.listToAttrs (
map
(name: {
name = name;
value = let
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 {
in
inputs.nixpkgs.lib.nixosSystem {
specialArgs = {
inherit self inputs pkgs mod additionalHomeConfig root;
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
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)))));
})
(
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 ];
};
}

View file

@ -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;
};
}

View file

@ -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

View file

@ -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"; }
];
}
);
}

View file

@ -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 "" '

View file

@ -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;
};

View file

@ -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;
}
);
}

View file

@ -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 = {

View file

@ -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;
};
}

View file

@ -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;
};
}
);

View file

@ -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
};

View file

@ -1,7 +1,6 @@
{
lib,
config,
pkgs,
options,
...
}:
@ -17,14 +16,53 @@ 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 = ''
style =
if config.mods.hyprland.ironbar.useDefaultCss then
''
@import url("/home/${username}/.config/gtk-3.0/gtk.css");
* {
@ -157,12 +195,17 @@ in
.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}" = {
monitors."${config.conf.defaultMonitor}" =
if config.mods.hyprland.ironbar.useDefaultConfig then
{
end = config.conf.ironbar.modules ++ [
{
type = "sys_info";
@ -272,7 +315,10 @@ in
truncate = "end";
}
];
};
}
// config.mods.hyprland.ironbar.customConfig
else
config.mods.hyprland.ironbar.customConfig;
};
};
}

View file

@ -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 = [

View file

@ -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
View 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";
};
};
};
};
}

View file

@ -17,15 +17,19 @@
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 = {
services = {
printing = {
enable = true;
browsing = true;
drivers = [ pkgs.hplip ];
startWhenNeeded = true; # optional
};
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
}
);
}

View file

@ -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')

View file

@ -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;
};
}
);