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

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

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

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