refactor: make modules independant and exposed in the flake for outside use
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
bc753eb285
commit
24aa4b9842
217 changed files with 2213 additions and 1954 deletions
11
README.md
11
README.md
|
@ -6,7 +6,7 @@ You might find it weird that most of my config is written in TypeScript.
|
||||||
That's because all my desktops run
|
That's because all my desktops run
|
||||||
[AGS](https://github.com/Aylur/ags)
|
[AGS](https://github.com/Aylur/ags)
|
||||||
for UI. Click on
|
for UI. Click on
|
||||||
[this](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/modules/ags)
|
[this](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/nixosModules/ags)
|
||||||
to see my configuration.
|
to see my configuration.
|
||||||
|
|
||||||
I'm also a victim of Stockholm syndrome at this point and make my scripts
|
I'm also a victim of Stockholm syndrome at this point and make my scripts
|
||||||
|
@ -17,10 +17,8 @@ in TypeScript because it's the scripting language I am most comfortable with.
|
||||||
### General
|
### General
|
||||||
|
|
||||||
This repo is the complete configuration of machines I own,
|
This repo is the complete configuration of machines I own,
|
||||||
running NixOS or Nix. I tend to mix Home-Manager and NixOS
|
running NixOS or Nix. Its structure is based on a flake's
|
||||||
a lot to make my custom modules by using my global vars system
|
[outputs](https://wiki.nixos.org/wiki/Flakes#Output_schema).
|
||||||
explained
|
|
||||||
[here](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/devices)
|
|
||||||
|
|
||||||
### Flake Location
|
### Flake Location
|
||||||
|
|
||||||
|
@ -46,6 +44,9 @@ sudo ln -sf /home/matt/.nix /etc/nixos
|
||||||
| `nixOnDroidConfigurations.default` | [Nix-On-Droid](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/devices/android)'s configuration |
|
| `nixOnDroidConfigurations.default` | [Nix-On-Droid](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/devices/android)'s configuration |
|
||||||
| `packages` | Some custom [packages](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/packages) not available in nixpkgs or modified from it |
|
| `packages` | Some custom [packages](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/packages) not available in nixpkgs or modified from it |
|
||||||
| `legacyPackages` | Some custom [package scopes](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/legacyPackages) not available in nixpkgs or modified from it |
|
| `legacyPackages` | Some custom [package scopes](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/legacyPackages) not available in nixpkgs or modified from it |
|
||||||
|
| `apps` | Scripts ran from the flake defined [here](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/apps) |
|
||||||
|
| `homeManagerModules` | [Modules](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/homeManagerModules) made for home-manager |
|
||||||
|
| `homeManagerModules` | [Modules](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/nixosModules) made for NixOS systems |
|
||||||
| `formatter` | I format nix code with [alejandra](https://github.com/kamadorueda/alejandra) |
|
| `formatter` | I format nix code with [alejandra](https://github.com/kamadorueda/alejandra) |
|
||||||
| `devShells.default` | A dev shell to build an ISO from the live-image nixosConfiguration |
|
| `devShells.default` | A dev shell to build an ISO from the live-image nixosConfiguration |
|
||||||
| `devShells.ags` | A dev shell to have a NodeJS env when I enter my AGS's config directory |
|
| `devShells.ags` | A dev shell to have a NodeJS env when I enter my AGS's config directory |
|
||||||
|
|
|
@ -8,16 +8,15 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
self,
|
self,
|
||||||
...
|
...
|
||||||
} @ inputs: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
./vars
|
./vars
|
||||||
|
|
||||||
./modules
|
./modules
|
||||||
./packages.nix
|
./packages.nix
|
||||||
|
self.nixosModules.borgbackup
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
|
|
||||||
../modules/borgbackup
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.tmp.useTmpfs = true;
|
boot.tmp.useTmpfs = true;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultFonts = {
|
defaultFonts = {
|
||||||
emoji = ["Noto Color Emoji"];
|
emoji = ["Noto Color Emoji"];
|
||||||
monospace = ["Noto Nerd Font"];
|
monospace = ["JetBrainsMono Nerd Font"];
|
||||||
sansSerif = ["Noto Nerd Font"];
|
sansSerif = ["Noto Nerd Font"];
|
||||||
serif = ["Noto Nerd Font"];
|
serif = ["Noto Nerd Font"];
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
|
pkgs,
|
||||||
self,
|
self,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
|
@ -11,12 +12,11 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
||||||
../../modules/kmscon.nix
|
|
||||||
../../modules/sshd.nix
|
|
||||||
|
|
||||||
./modules/desktop
|
./modules/desktop
|
||||||
|
|
||||||
|
self.nixosModules.kmscon
|
||||||
self.nixosModules.plymouth
|
self.nixosModules.plymouth
|
||||||
|
self.nixosModules.server
|
||||||
];
|
];
|
||||||
|
|
||||||
# State Version: DO NOT CHANGE
|
# State Version: DO NOT CHANGE
|
||||||
|
@ -50,8 +50,16 @@ in {
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
# `Self` Modules configuration
|
# `Self` Modules configuration
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
roles.server = {
|
||||||
|
user = mainUser;
|
||||||
|
sshd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
boot.plymouth = {
|
boot.plymouth = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = "steamos";
|
theme = "steamos";
|
||||||
|
themePackages = [pkgs.steamdeck-hw-theme];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.kmscon.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,24 +11,18 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
||||||
../../modules/ags
|
|
||||||
../../modules/audio.nix
|
|
||||||
../../modules/kmscon.nix
|
|
||||||
../../modules/printer.nix
|
|
||||||
../../modules/ratbag-mice.nix
|
|
||||||
../../modules/sshd.nix
|
|
||||||
../../modules/tailscale.nix
|
|
||||||
|
|
||||||
./modules/gpu-replay.nix
|
./modules/gpu-replay.nix
|
||||||
./modules/nix-gaming.nix
|
./modules/nix-gaming.nix
|
||||||
|
|
||||||
self.nixosModules.adb
|
self.nixosModules.adb
|
||||||
self.nixosModules.desktop
|
self.nixosModules.desktop
|
||||||
|
self.nixosModules.kmscon
|
||||||
|
self.nixosModules.server
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager.users.${mainUser} = {
|
home-manager.users.${mainUser} = {
|
||||||
imports = [
|
imports = [
|
||||||
../../home/firefox
|
self.homeManagerModules.firefox
|
||||||
];
|
];
|
||||||
|
|
||||||
# State Version: DO NOT CHANGE
|
# State Version: DO NOT CHANGE
|
||||||
|
@ -72,14 +66,23 @@ in {
|
||||||
roles.desktop = {
|
roles.desktop = {
|
||||||
user = mainUser;
|
user = mainUser;
|
||||||
|
|
||||||
|
ags.enable = true;
|
||||||
mainMonitor = "desc:GIGA-BYTE TECHNOLOGY CO. LTD. G27QC 0x00000B1D";
|
mainMonitor = "desc:GIGA-BYTE TECHNOLOGY CO. LTD. G27QC 0x00000B1D";
|
||||||
displayManager.duplicateScreen = false;
|
displayManager.duplicateScreen = false;
|
||||||
|
|
||||||
fontSize = 12.5;
|
fontSize = 12.5;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
roles.server = {
|
||||||
|
user = mainUser;
|
||||||
|
tailscale.enable = true;
|
||||||
|
sshd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
programs.adb = {
|
programs.adb = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = mainUser;
|
user = mainUser;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.kmscon.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
deviceName: {config, ...}: let
|
deviceName: {config, self, ...}: let
|
||||||
inherit (config.vars) mainUser hostName;
|
inherit (config.vars) mainUser hostName;
|
||||||
|
|
||||||
clusterIP = config.services.pcsd.virtualIps.caddy-vip.ip;
|
clusterIP = config.services.pcsd.virtualIps.caddy-vip.ip;
|
||||||
|
@ -9,11 +9,10 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
||||||
../../modules/kmscon.nix
|
|
||||||
../../modules/sshd.nix
|
|
||||||
../../modules/tailscale.nix
|
|
||||||
|
|
||||||
./modules/pcsd.nix
|
./modules/pcsd.nix
|
||||||
|
|
||||||
|
self.nixosModules.kmscon
|
||||||
|
self.nixosModules.server
|
||||||
];
|
];
|
||||||
|
|
||||||
# State Version: DO NOT CHANGE
|
# State Version: DO NOT CHANGE
|
||||||
|
@ -57,4 +56,15 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
time.timeZone = "America/Montreal";
|
time.timeZone = "America/Montreal";
|
||||||
|
|
||||||
|
# ------------------------------------------------
|
||||||
|
# `Self` Modules configuration
|
||||||
|
# ------------------------------------------------
|
||||||
|
roles.server = {
|
||||||
|
user = mainUser;
|
||||||
|
tailscale.enable = true;
|
||||||
|
sshd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.kmscon.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,6 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
||||||
../../modules/kmscon.nix
|
|
||||||
../../modules/sshd.nix
|
|
||||||
../../modules/tailscale.nix
|
|
||||||
|
|
||||||
./modules/docker
|
./modules/docker
|
||||||
./modules/jellyfin
|
./modules/jellyfin
|
||||||
./modules/mergerfs.nix
|
./modules/mergerfs.nix
|
||||||
|
@ -23,6 +19,8 @@ in {
|
||||||
./modules/subtitles
|
./modules/subtitles
|
||||||
|
|
||||||
self.nixosModules.docker
|
self.nixosModules.docker
|
||||||
|
self.nixosModules.kmscon
|
||||||
|
self.nixosModules.server
|
||||||
];
|
];
|
||||||
|
|
||||||
# State Version: DO NOT CHANGE
|
# State Version: DO NOT CHANGE
|
||||||
|
@ -54,4 +52,15 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
time.timeZone = "America/Montreal";
|
time.timeZone = "America/Montreal";
|
||||||
|
|
||||||
|
# ------------------------------------------------
|
||||||
|
# `Self` Modules configuration
|
||||||
|
# ------------------------------------------------
|
||||||
|
roles.server = {
|
||||||
|
user = mainUser;
|
||||||
|
tailscale.enable = true;
|
||||||
|
sshd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.kmscon.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,6 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
||||||
../../modules/kmscon.nix
|
|
||||||
../../modules/sshd.nix
|
|
||||||
../../modules/tailscale.nix
|
|
||||||
|
|
||||||
./modules/7-days-to-die.nix
|
./modules/7-days-to-die.nix
|
||||||
./modules/binary-cache.nix
|
./modules/binary-cache.nix
|
||||||
./modules/minecraft.nix
|
./modules/minecraft.nix
|
||||||
|
@ -22,6 +18,8 @@ in {
|
||||||
./modules/pr-tracker.nix
|
./modules/pr-tracker.nix
|
||||||
|
|
||||||
self.nixosModules.docker
|
self.nixosModules.docker
|
||||||
|
self.nixosModules.kmscon
|
||||||
|
self.nixosModules.server
|
||||||
];
|
];
|
||||||
|
|
||||||
# State Version: DO NOT CHANGE
|
# State Version: DO NOT CHANGE
|
||||||
|
@ -70,5 +68,11 @@ in {
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
# `Self` Modules configuration
|
# `Self` Modules configuration
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
# ...
|
roles.server = {
|
||||||
|
user = mainUser;
|
||||||
|
tailscale.enable = true;
|
||||||
|
sshd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.kmscon.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
self,
|
self,
|
||||||
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (config.vars) mainUser hostName;
|
inherit (config.vars) mainUser hostName;
|
||||||
|
@ -11,22 +12,18 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
||||||
../../modules/ags
|
|
||||||
../../modules/audio.nix
|
|
||||||
../../modules/kmscon.nix
|
|
||||||
../../modules/printer.nix
|
|
||||||
../../modules/tailscale.nix
|
|
||||||
|
|
||||||
./modules/security.nix
|
./modules/security.nix
|
||||||
|
|
||||||
self.nixosModules.adb
|
self.nixosModules.adb
|
||||||
self.nixosModules.desktop
|
self.nixosModules.desktop
|
||||||
|
self.nixosModules.kmscon
|
||||||
self.nixosModules.plymouth
|
self.nixosModules.plymouth
|
||||||
|
self.nixosModules.server
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager.users.${mainUser} = {
|
home-manager.users.${mainUser} = {
|
||||||
imports = [
|
imports = [
|
||||||
../../home/firefox
|
self.homeManagerModules.firefox
|
||||||
];
|
];
|
||||||
|
|
||||||
# State Version: DO NOT CHANGE
|
# State Version: DO NOT CHANGE
|
||||||
|
@ -73,6 +70,7 @@ in {
|
||||||
roles.desktop = {
|
roles.desktop = {
|
||||||
user = mainUser;
|
user = mainUser;
|
||||||
|
|
||||||
|
ags.enable = true;
|
||||||
mainMonitor = "eDP-1";
|
mainMonitor = "eDP-1";
|
||||||
isLaptop = true;
|
isLaptop = true;
|
||||||
isTouchscreen = true;
|
isTouchscreen = true;
|
||||||
|
@ -80,6 +78,11 @@ in {
|
||||||
fontSize = 12.5;
|
fontSize = 12.5;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
roles.server = {
|
||||||
|
user = mainUser;
|
||||||
|
tailscale.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
programs.adb = {
|
programs.adb = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = mainUser;
|
user = mainUser;
|
||||||
|
@ -88,5 +91,10 @@ in {
|
||||||
boot.plymouth = {
|
boot.plymouth = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = "dracula";
|
theme = "dracula";
|
||||||
|
themePackages = [
|
||||||
|
self.legacyPackages.${pkgs.system}.dracula.plymouth
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.kmscon.enable = true;
|
||||||
}
|
}
|
||||||
|
|
10
flake.in.nix
10
flake.in.nix
|
@ -55,13 +55,9 @@
|
||||||
nixpkgs.lib.genAttrs supportedSystems (system:
|
nixpkgs.lib.genAttrs supportedSystems (system:
|
||||||
attrs (mkPkgs system nixpkgs));
|
attrs (mkPkgs system nixpkgs));
|
||||||
in {
|
in {
|
||||||
nixosModules = {
|
nixosModules = import ./nixosModules self;
|
||||||
adb = import ./modules/adb.nix;
|
|
||||||
desktop = import ./modules/desktop;
|
homeManagerModules = import ./homeManagerModules self;
|
||||||
docker = import ./modules/docker;
|
|
||||||
nvidia = import ./modules/nvidia.nix;
|
|
||||||
plymouth = import ./modules/plymouth.nix;
|
|
||||||
};
|
|
||||||
|
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
# Desktops
|
# Desktops
|
||||||
|
|
|
@ -1,219 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
firefox-gx-src,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (config.vars) hostName;
|
|
||||||
|
|
||||||
inherit (self.legacyPackages.${pkgs.system}) firefoxAddons;
|
|
||||||
|
|
||||||
firefox-gx = pkgs.callPackage ./gx-theme.nix {
|
|
||||||
inherit firefox-gx-src;
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
home.file = {
|
|
||||||
".mozilla/firefox/matt/chrome/userContent.css".source = "${firefox-gx}/chrome/userContent.css";
|
|
||||||
".mozilla/firefox/matt/chrome/components".source = "${firefox-gx}/chrome/components";
|
|
||||||
".mozilla/firefox/matt/chrome/images".source = "${firefox-gx}/chrome/images";
|
|
||||||
".mozilla/firefox/matt/chrome/icons".source = "${firefox-gx}/chrome/icons";
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.firefox = {
|
|
||||||
enable = true;
|
|
||||||
profiles.matt = {
|
|
||||||
isDefault = true;
|
|
||||||
id = 0;
|
|
||||||
|
|
||||||
userChrome = ''
|
|
||||||
@import url("file://${firefox-gx}/chrome/userChrome.css");
|
|
||||||
${import ./custom-css.nix hostName}
|
|
||||||
'';
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
# Theme
|
|
||||||
"firefoxgx.tab-shapes" = true;
|
|
||||||
"firefoxgx.left-sidebar" = true;
|
|
||||||
"userChrome.tab.bottom_rounded_corner" = true;
|
|
||||||
"userChrome.tab.bottom_rounded_corner.wave" = false;
|
|
||||||
"userChrome.tab.bottom_rounded_corner.australis" = true;
|
|
||||||
"widget.use-xdg-desktop-portal.file-picker" = 1;
|
|
||||||
|
|
||||||
# Firefox-gx user.js
|
|
||||||
/*
|
|
||||||
Default rules
|
|
||||||
*/
|
|
||||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
|
||||||
"svg.context-properties.content.enabled" = true;
|
|
||||||
"layout.css.color-mix.enabled" = true;
|
|
||||||
"browser.tabs.delayHidingAudioPlayingIconMS" = 0;
|
|
||||||
"layout.css.backdrop-filter.enabled" = true;
|
|
||||||
"browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar" = false;
|
|
||||||
"browser.newtabpage.activity-stream.newtabWallpapers.enabled" = true;
|
|
||||||
|
|
||||||
/*
|
|
||||||
To active container tabs without any extension
|
|
||||||
*/
|
|
||||||
"privacy.userContext.enabled" = true;
|
|
||||||
"privacy.userContext.ui.enabled" = true;
|
|
||||||
"privacy.userContext.longPressBehavior" = 2;
|
|
||||||
|
|
||||||
# Open previous windows and tabs
|
|
||||||
"browser.startup.page" = 3;
|
|
||||||
|
|
||||||
# Prefs
|
|
||||||
"layout.css.devPixelsPerPx" = 1.12;
|
|
||||||
"browser.search.widget.inNavBar" = true;
|
|
||||||
"browser.toolbars.bookmarks.visibility" = "always";
|
|
||||||
"browser.toolbars.bookmarks.showInPrivateBrowsing" = true;
|
|
||||||
"ui.key.menuAccessKey" = 0;
|
|
||||||
|
|
||||||
# remove telemetry
|
|
||||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
|
||||||
"datareporting.healthreport.uploadEnabled" = false;
|
|
||||||
"datareporting.healthreport.infoURL" = "";
|
|
||||||
"dom.security.https_only_mode" = true;
|
|
||||||
|
|
||||||
# remove first run and warning stuff
|
|
||||||
"datareporting.policy.firstRunURL" = "";
|
|
||||||
"browser.aboutwelcome.enabled" = false;
|
|
||||||
"browser.aboutConfig.showWarning" = false;
|
|
||||||
|
|
||||||
# Disable firefox autofill
|
|
||||||
"signon.rememberSignons" = false;
|
|
||||||
"extensions.formautofill.addresses.enabled" = false;
|
|
||||||
"extensions.formautofill.creditCards.enabled" = false;
|
|
||||||
|
|
||||||
# remove new tab stuff
|
|
||||||
"extensions.pocket.enabled" = false;
|
|
||||||
"services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
|
||||||
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.system.topstories" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.topsites" = false;
|
|
||||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false;
|
|
||||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
search = {
|
|
||||||
default = "DuckDuckGo";
|
|
||||||
force = true;
|
|
||||||
engines = {
|
|
||||||
"Nixpkgs" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://github.com/search?q=repo%3ANixOS%2Fnixpkgs%20{searchTerms}&type=code";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://github.githubassets.com/favicons/favicon.png";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@pkgs"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"NixOS Wiki" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://nixos.wiki/index.php?search={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://nixos.wiki/favicon.png";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@nw"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"MyNixos" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://mynixos.com/search?q={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://mynixos.com/favicon.ico";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@mn"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Noogle" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://noogle.dev/q?term={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://noogle.dev/favicon.ico";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@ng"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Firefox Add-ons" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://addons.mozilla.org/en-US/firefox/search/?q={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://addons.mozilla.org/favicon.ico";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@fa"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"ProtonDB" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://www.protondb.com/search?q={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://www.protondb.com/favicon.ico";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@pdb"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"YouTube" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://www.youtube.com/results?search_query={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
iconUpdateURL = "https://www.youtube.com/favicon.ico";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@yt" "@youtube"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Bing".metaData.hidden = true;
|
|
||||||
"Google".metaData.hidden = true;
|
|
||||||
"eBay".metaData.hidden = true;
|
|
||||||
};
|
|
||||||
order = [
|
|
||||||
"DuckDuckGo"
|
|
||||||
"MyNixos"
|
|
||||||
"NixOS Wiki"
|
|
||||||
"Nixpkgs"
|
|
||||||
"Noogle"
|
|
||||||
"Wikipedia (en)"
|
|
||||||
"YouTube"
|
|
||||||
"Firefox Add-ons"
|
|
||||||
"ProtonDB"
|
|
||||||
"Amazon.ca"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
extensions = with firefoxAddons; [
|
|
||||||
auto-refresh-page
|
|
||||||
bitwarden
|
|
||||||
checkmarks-web-ext
|
|
||||||
darkreader
|
|
||||||
floccus
|
|
||||||
google-container
|
|
||||||
image-search-options
|
|
||||||
istilldontcareaboutcookies
|
|
||||||
opera-gx-witchcraft-purple
|
|
||||||
return-youtube-dislikes
|
|
||||||
seventv
|
|
||||||
sponsorblock
|
|
||||||
sound-volume
|
|
||||||
stylus
|
|
||||||
ttv-lol-pro
|
|
||||||
ublock-origin
|
|
||||||
undoclosetabbutton
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
3
homeManagerModules/default.nix
Normal file
3
homeManagerModules/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
self: {
|
||||||
|
firefox = import ./firefox self;
|
||||||
|
}
|
222
homeManagerModules/firefox/default.nix
Normal file
222
homeManagerModules/firefox/default.nix
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
self: {
|
||||||
|
osConfig,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (osConfig.networking) hostName;
|
||||||
|
|
||||||
|
inherit (self.legacyPackages.${pkgs.system}) firefoxAddons;
|
||||||
|
|
||||||
|
firefox-gx = pkgs.callPackage ./gx-theme.nix {
|
||||||
|
inherit (self.inputs) firefox-gx-src;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
config = {
|
||||||
|
home.file = {
|
||||||
|
".mozilla/firefox/matt/chrome/userContent.css".source = "${firefox-gx}/chrome/userContent.css";
|
||||||
|
".mozilla/firefox/matt/chrome/components".source = "${firefox-gx}/chrome/components";
|
||||||
|
".mozilla/firefox/matt/chrome/images".source = "${firefox-gx}/chrome/images";
|
||||||
|
".mozilla/firefox/matt/chrome/icons".source = "${firefox-gx}/chrome/icons";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
profiles.matt = {
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
|
||||||
|
userChrome = ''
|
||||||
|
@import url("file://${firefox-gx}/chrome/userChrome.css");
|
||||||
|
${import ./custom-css.nix hostName}
|
||||||
|
'';
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
# Theme
|
||||||
|
"firefoxgx.tab-shapes" = true;
|
||||||
|
"firefoxgx.left-sidebar" = true;
|
||||||
|
"userChrome.tab.bottom_rounded_corner" = true;
|
||||||
|
"userChrome.tab.bottom_rounded_corner.wave" = false;
|
||||||
|
"userChrome.tab.bottom_rounded_corner.australis" = true;
|
||||||
|
"widget.use-xdg-desktop-portal.file-picker" = 1;
|
||||||
|
|
||||||
|
# Firefox-gx user.js
|
||||||
|
/*
|
||||||
|
Default rules
|
||||||
|
*/
|
||||||
|
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||||
|
"svg.context-properties.content.enabled" = true;
|
||||||
|
"layout.css.color-mix.enabled" = true;
|
||||||
|
"browser.tabs.delayHidingAudioPlayingIconMS" = 0;
|
||||||
|
"layout.css.backdrop-filter.enabled" = true;
|
||||||
|
"browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar" = false;
|
||||||
|
"browser.newtabpage.activity-stream.newtabWallpapers.enabled" = true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To active container tabs without any extension
|
||||||
|
*/
|
||||||
|
"privacy.userContext.enabled" = true;
|
||||||
|
"privacy.userContext.ui.enabled" = true;
|
||||||
|
"privacy.userContext.longPressBehavior" = 2;
|
||||||
|
|
||||||
|
# Open previous windows and tabs
|
||||||
|
"browser.startup.page" = 3;
|
||||||
|
|
||||||
|
# Prefs
|
||||||
|
"layout.css.devPixelsPerPx" = 1.12;
|
||||||
|
"browser.search.widget.inNavBar" = true;
|
||||||
|
"browser.toolbars.bookmarks.visibility" = "always";
|
||||||
|
"browser.toolbars.bookmarks.showInPrivateBrowsing" = true;
|
||||||
|
"ui.key.menuAccessKey" = 0;
|
||||||
|
|
||||||
|
# remove telemetry
|
||||||
|
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||||
|
"datareporting.healthreport.uploadEnabled" = false;
|
||||||
|
"datareporting.healthreport.infoURL" = "";
|
||||||
|
"dom.security.https_only_mode" = true;
|
||||||
|
|
||||||
|
# remove first run and warning stuff
|
||||||
|
"datareporting.policy.firstRunURL" = "";
|
||||||
|
"browser.aboutwelcome.enabled" = false;
|
||||||
|
"browser.aboutConfig.showWarning" = false;
|
||||||
|
|
||||||
|
# Disable firefox autofill
|
||||||
|
"signon.rememberSignons" = false;
|
||||||
|
"extensions.formautofill.addresses.enabled" = false;
|
||||||
|
"extensions.formautofill.creditCards.enabled" = false;
|
||||||
|
|
||||||
|
# remove new tab stuff
|
||||||
|
"extensions.pocket.enabled" = false;
|
||||||
|
"services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.system.topstories" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.topsites" = false;
|
||||||
|
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false;
|
||||||
|
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
search = {
|
||||||
|
default = "DuckDuckGo";
|
||||||
|
force = true;
|
||||||
|
engines = {
|
||||||
|
"Nixpkgs" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://github.com/search?q=repo%3ANixOS%2Fnixpkgs%20{searchTerms}&type=code";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://github.githubassets.com/favicons/favicon.png";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@pkgs"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"NixOS Wiki" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://nixos.wiki/index.php?search={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://nixos.wiki/favicon.png";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@nw"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"MyNixos" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://mynixos.com/search?q={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://mynixos.com/favicon.ico";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@mn"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"Noogle" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://noogle.dev/q?term={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://noogle.dev/favicon.ico";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@ng"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"Firefox Add-ons" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://addons.mozilla.org/en-US/firefox/search/?q={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://addons.mozilla.org/favicon.ico";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@fa"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"ProtonDB" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://www.protondb.com/search?q={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://www.protondb.com/favicon.ico";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@pdb"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"YouTube" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://www.youtube.com/results?search_query={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
iconUpdateURL = "https://www.youtube.com/favicon.ico";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = ["@yt" "@youtube"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"Bing".metaData.hidden = true;
|
||||||
|
"Google".metaData.hidden = true;
|
||||||
|
"eBay".metaData.hidden = true;
|
||||||
|
};
|
||||||
|
order = [
|
||||||
|
"DuckDuckGo"
|
||||||
|
"MyNixos"
|
||||||
|
"NixOS Wiki"
|
||||||
|
"Nixpkgs"
|
||||||
|
"Noogle"
|
||||||
|
"Wikipedia (en)"
|
||||||
|
"YouTube"
|
||||||
|
"Firefox Add-ons"
|
||||||
|
"ProtonDB"
|
||||||
|
"Amazon.ca"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
extensions = with firefoxAddons; [
|
||||||
|
auto-refresh-page
|
||||||
|
bitwarden
|
||||||
|
checkmarks-web-ext
|
||||||
|
darkreader
|
||||||
|
floccus
|
||||||
|
google-container
|
||||||
|
image-search-options
|
||||||
|
istilldontcareaboutcookies
|
||||||
|
opera-gx-witchcraft-purple
|
||||||
|
return-youtube-dislikes
|
||||||
|
seventv
|
||||||
|
sponsorblock
|
||||||
|
sound-volume
|
||||||
|
stylus
|
||||||
|
ttv-lol-pro
|
||||||
|
ublock-origin
|
||||||
|
undoclosetabbutton
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# For accurate stack trace
|
||||||
|
_file = ./default.nix;
|
||||||
|
}
|
|
@ -1,174 +0,0 @@
|
||||||
{
|
|
||||||
ags,
|
|
||||||
astal-tray,
|
|
||||||
config,
|
|
||||||
gtk-session-lock,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
ts-for-gir-src,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) boolToString toLower;
|
|
||||||
|
|
||||||
# Configs
|
|
||||||
inherit (config.vars) mainUser hostName;
|
|
||||||
cfgDesktop = config.roles.desktop;
|
|
||||||
flakeDir = config.environment.variables.FLAKE;
|
|
||||||
isTouchscreen = config.hardware.sensor.iio.enable;
|
|
||||||
|
|
||||||
# Packages
|
|
||||||
astalTray = astal-tray.packages.${pkgs.system}.tray;
|
|
||||||
gtkSessionLock = gtk-session-lock.packages.${pkgs.system}.default;
|
|
||||||
in {
|
|
||||||
# Enable pam for ags
|
|
||||||
security.pam.services.ags = {};
|
|
||||||
|
|
||||||
services.upower.enable = true;
|
|
||||||
|
|
||||||
home-manager.users.${mainUser}.imports = [
|
|
||||||
ags.homeManagerModules.default
|
|
||||||
|
|
||||||
({
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (config.lib.file) mkOutOfStoreSymlink;
|
|
||||||
inherit (lib) hasPrefix optionals removePrefix;
|
|
||||||
|
|
||||||
configJs =
|
|
||||||
# javascript
|
|
||||||
''
|
|
||||||
Utils.execAsync('hyprpaper');
|
|
||||||
|
|
||||||
import { transpileTypeScript } from './js/utils.js';
|
|
||||||
|
|
||||||
export default (await transpileTypeScript('${hostName}')).default;
|
|
||||||
'';
|
|
||||||
|
|
||||||
agsPkg = config.programs.ags.finalPackage;
|
|
||||||
agsConfigDir = "${removePrefix "/home/${mainUser}/" flakeDir}/modules/ags";
|
|
||||||
in {
|
|
||||||
assertions = [
|
|
||||||
{
|
|
||||||
assertion = hasPrefix "/home/${mainUser}/" flakeDir;
|
|
||||||
message = ''
|
|
||||||
Your $FLAKE environment variable needs to point to a directory in
|
|
||||||
the main users' home to use the AGS module.
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.ags = {
|
|
||||||
enable = true;
|
|
||||||
extraPackages = [
|
|
||||||
astalTray
|
|
||||||
gtkSessionLock
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
home = {
|
|
||||||
file = let
|
|
||||||
mkType = package: girName: {
|
|
||||||
"${agsConfigDir}/config/types/@girs/${toLower girName}".source =
|
|
||||||
pkgs.callPackage
|
|
||||||
./mk-types {
|
|
||||||
inherit ts-for-gir-src package girName;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in (
|
|
||||||
{
|
|
||||||
# Generated types
|
|
||||||
"${agsConfigDir}/config/types" = {
|
|
||||||
source = "${agsPkg}/share/com.github.Aylur.ags/types";
|
|
||||||
recursive = true; # To add other types inside the folder
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// (mkType gtkSessionLock "GtkSessionLock-0.1")
|
|
||||||
// (mkType astalTray "AstalTray-0.1")
|
|
||||||
// {
|
|
||||||
# Out of store symlinks
|
|
||||||
".config/ags".source = mkOutOfStoreSymlink "${flakeDir}/modules/ags/config";
|
|
||||||
|
|
||||||
# Generated JavaScript files
|
|
||||||
"${agsConfigDir}/config/config.js".text = configJs;
|
|
||||||
"${agsConfigDir}/config/ts/lockscreen/vars.ts".text =
|
|
||||||
# javascript
|
|
||||||
''
|
|
||||||
export default {
|
|
||||||
mainMonitor: '${cfgDesktop.mainMonitor}',
|
|
||||||
dupeLockscreen: ${boolToString cfgDesktop.displayManager.duplicateScreen},
|
|
||||||
hasFprintd: ${boolToString (hostName == "wim")},
|
|
||||||
};
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
// (import ./icons.nix {inherit pkgs agsConfigDir;})
|
|
||||||
);
|
|
||||||
|
|
||||||
packages =
|
|
||||||
[
|
|
||||||
# TODO: replace with matugen
|
|
||||||
self.packages.${pkgs.system}.coloryou
|
|
||||||
]
|
|
||||||
++ (with pkgs; [
|
|
||||||
# ags
|
|
||||||
dart-sass
|
|
||||||
bun
|
|
||||||
playerctl
|
|
||||||
(callPackage ./clipboard {})
|
|
||||||
|
|
||||||
## gui
|
|
||||||
pavucontrol # TODO: replace with ags widget
|
|
||||||
])
|
|
||||||
++ (optionals isTouchscreen (with pkgs; [
|
|
||||||
lisgd
|
|
||||||
ydotool
|
|
||||||
]));
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
settings = {
|
|
||||||
animations = {
|
|
||||||
bezier = [
|
|
||||||
"easeInOutBack, 0.68, -0.6, 0.32, 1.6"
|
|
||||||
];
|
|
||||||
|
|
||||||
animation = [
|
|
||||||
"fadeLayersIn, 0"
|
|
||||||
"fadeLayersOut, 1, 3000, default"
|
|
||||||
"layers, 1, 8, easeInOutBack, slide left"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
layerrule = [
|
|
||||||
"noanim, ^(?!win-).*"
|
|
||||||
|
|
||||||
# Lockscreen blur
|
|
||||||
"blur, ^(blur-bg.*)"
|
|
||||||
"ignorealpha 0.19, ^(blur-bg.*)"
|
|
||||||
];
|
|
||||||
|
|
||||||
exec-once = [
|
|
||||||
"ags"
|
|
||||||
"sleep 3; ags -r 'App.openWindow(\"win-applauncher\")'"
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
"$mainMod SHIFT, E , exec, ags -t win-powermenu"
|
|
||||||
"$mainMod , D , exec, ags -t win-applauncher"
|
|
||||||
"$mainMod , V , exec, ags -t win-clipboard"
|
|
||||||
" , Print, exec, ags -t win-screenshot"
|
|
||||||
];
|
|
||||||
binde = [
|
|
||||||
## Brightness control
|
|
||||||
", XF86MonBrightnessUp , exec, ags -r 'Brightness.screen += 0.05'"
|
|
||||||
", XF86MonBrightnessDown, exec, ags -r 'Brightness.screen -= 0.05'"
|
|
||||||
];
|
|
||||||
bindn = [" , Escape , exec, ags -r 'closeAll()'"];
|
|
||||||
bindr = ["CAPS, Caps_Lock, exec, ags -r 'Brightness.fetchCapsState()'"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
{nix-gaming, ...}: {
|
|
||||||
imports = [nix-gaming.nixosModules.pipewireLowLatency];
|
|
||||||
|
|
||||||
hardware.pulseaudio.enable = false;
|
|
||||||
|
|
||||||
services.pipewire = {
|
|
||||||
enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
jack.enable = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
lowLatency.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
{config, ...}: let
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
in {
|
|
||||||
programs.dconf.enable = true;
|
|
||||||
|
|
||||||
home-manager.users.${cfg.user} = {
|
|
||||||
dconf.settings = {
|
|
||||||
"org/virt-manager/virt-manager/connections" = {
|
|
||||||
autoconnect = ["qemu:///system"];
|
|
||||||
uris = ["qemu:///system"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"apps/seahorse/listing" = {
|
|
||||||
keyrings-selected = ["gnupg://"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gtk/settings/file-chooser" = {
|
|
||||||
show-hidden = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/desktop/interface" = {
|
|
||||||
color-scheme = "prefer-dark";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,223 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
hyprland,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) concatStringsSep optionals;
|
|
||||||
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
|
|
||||||
hyprCfg =
|
|
||||||
config
|
|
||||||
.home-manager
|
|
||||||
.users
|
|
||||||
.${cfg.user}
|
|
||||||
.wayland
|
|
||||||
.windowManager
|
|
||||||
.hyprland;
|
|
||||||
in {
|
|
||||||
# SYSTEM CONFIG
|
|
||||||
imports = [
|
|
||||||
./dconf.nix
|
|
||||||
|
|
||||||
./packages.nix
|
|
||||||
./security.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
services = {
|
|
||||||
dbus.enable = true;
|
|
||||||
gvfs.enable = true;
|
|
||||||
libinput.enable = true;
|
|
||||||
xserver.wacom.enable = cfg.isTouchscreen;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
package = hyprCfg.finalPackage;
|
|
||||||
portalPackage =
|
|
||||||
hyprland
|
|
||||||
.packages
|
|
||||||
.${pkgs.system}
|
|
||||||
.xdg-desktop-portal-hyprland;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
extraPortals = with pkgs; [
|
|
||||||
xdg-desktop-portal-kde
|
|
||||||
];
|
|
||||||
|
|
||||||
config.hyprland = {
|
|
||||||
default = [
|
|
||||||
"hyprland"
|
|
||||||
"gtk"
|
|
||||||
];
|
|
||||||
|
|
||||||
"org.freedesktop.impl.portal.FileChooser" = [
|
|
||||||
"kde"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# HOME-MANAGER CONFIG
|
|
||||||
home-manager.users.${cfg.user} = {
|
|
||||||
imports = [
|
|
||||||
./home/dev.nix
|
|
||||||
|
|
||||||
# Plugins
|
|
||||||
./home/hyprgrass.nix
|
|
||||||
./home/hyprexpo.nix
|
|
||||||
# ./home/Hyprspace.nix
|
|
||||||
|
|
||||||
./home/inputs.nix
|
|
||||||
./home/style.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
package =
|
|
||||||
hyprland
|
|
||||||
.packages
|
|
||||||
.${pkgs.system}
|
|
||||||
.default;
|
|
||||||
|
|
||||||
systemd.variables = ["-all"];
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
envd = let
|
|
||||||
mkGSchemas = pkg: "${pkg}/share/gsettings-schemas/${pkg.name}";
|
|
||||||
in
|
|
||||||
[
|
|
||||||
"GTK_USE_PORTAL, 1"
|
|
||||||
"NIXOS_OZONE_WL, 1"
|
|
||||||
"ELECTRON_OZONE_PLATFORM_HINT, auto"
|
|
||||||
|
|
||||||
"XDG_DATA_DIRS, ${concatStringsSep ":" [
|
|
||||||
(mkGSchemas pkgs.gsettings-desktop-schemas)
|
|
||||||
(mkGSchemas pkgs.gtk3)
|
|
||||||
"$XDG_DATA_DIRS"
|
|
||||||
]}"
|
|
||||||
]
|
|
||||||
++ (optionals config.nvidia.enable [
|
|
||||||
"LIBVA_DRIVER_NAME, nvidia"
|
|
||||||
"NVD_BACKEND, direct"
|
|
||||||
"XDG_SESSION_TYPE, wayland"
|
|
||||||
"GBM_BACKEND, nvidia-drm"
|
|
||||||
"__GLX_VENDOR_LIBRARY_NAME, nvidia"
|
|
||||||
]);
|
|
||||||
|
|
||||||
xwayland.force_zero_scaling = true;
|
|
||||||
monitor = [
|
|
||||||
(concatStringsSep "," [
|
|
||||||
"desc:Acer Technologies Acer K212HQL T3EAA0014201"
|
|
||||||
"1920x1080@60"
|
|
||||||
"840x450, 1, transform, 3"
|
|
||||||
])
|
|
||||||
(concatStringsSep "," [
|
|
||||||
"desc:BOE 0x0964"
|
|
||||||
"1920x1200@60"
|
|
||||||
"0x2920, 1"
|
|
||||||
])
|
|
||||||
(concatStringsSep "," [
|
|
||||||
"desc:Samsung Electric Company C27JG5x HTOM100586"
|
|
||||||
"2560x1440@120"
|
|
||||||
"1920x120, 1"
|
|
||||||
])
|
|
||||||
(concatStringsSep "," [
|
|
||||||
"desc:GIGA-BYTE TECHNOLOGY CO. LTD. G27QC 0x00000B1D"
|
|
||||||
"2560x1440@120"
|
|
||||||
"1920x1560, 1"
|
|
||||||
])
|
|
||||||
];
|
|
||||||
|
|
||||||
"$mainMod" = "SUPER";
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
# Defaults
|
|
||||||
"$mainMod, F, fullscreen"
|
|
||||||
"$mainMod, C, killactive"
|
|
||||||
"$mainMod SHIFT, SPACE, togglefloating"
|
|
||||||
"$mainMod, J, layoutmsg, togglesplit"
|
|
||||||
|
|
||||||
## Move focus with arrow keys
|
|
||||||
"$mainMod, left, movefocus, l"
|
|
||||||
"$mainMod, right, movefocus, r"
|
|
||||||
"$mainMod, up, movefocus, u"
|
|
||||||
"$mainMod, down, movefocus, d"
|
|
||||||
|
|
||||||
## Move to specific workspaces
|
|
||||||
"$mainMod, 1, workspace, 1"
|
|
||||||
"$mainMod, 2, workspace, 2"
|
|
||||||
"$mainMod, 3, workspace, 3"
|
|
||||||
"$mainMod, 4, workspace, 4"
|
|
||||||
"$mainMod, 5, workspace, 5"
|
|
||||||
"$mainMod, 6, workspace, 6"
|
|
||||||
"$mainMod, 7, workspace, 7"
|
|
||||||
"$mainMod, 8, workspace, 8"
|
|
||||||
"$mainMod, 9, workspace, 9"
|
|
||||||
"$mainMod, 0, workspace, 10"
|
|
||||||
|
|
||||||
# Move active window to a workspace
|
|
||||||
"$mainMod SHIFT, 1, movetoworkspace, 1"
|
|
||||||
"$mainMod SHIFT, 2, movetoworkspace, 2"
|
|
||||||
"$mainMod SHIFT, 3, movetoworkspace, 3"
|
|
||||||
"$mainMod SHIFT, 4, movetoworkspace, 4"
|
|
||||||
"$mainMod SHIFT, 5, movetoworkspace, 5"
|
|
||||||
"$mainMod SHIFT, 6, movetoworkspace, 6"
|
|
||||||
"$mainMod SHIFT, 7, movetoworkspace, 7"
|
|
||||||
"$mainMod SHIFT, 8, movetoworkspace, 8"
|
|
||||||
"$mainMod SHIFT, 9, movetoworkspace, 9"
|
|
||||||
"$mainMod SHIFT, 0, movetoworkspace, 10"
|
|
||||||
|
|
||||||
",XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle"
|
|
||||||
",XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle"
|
|
||||||
];
|
|
||||||
|
|
||||||
binde = [
|
|
||||||
",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+ & ags -r 'popup_osd(\"speaker\")' &"
|
|
||||||
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- & ags -r 'popup_osd(\"speaker\")' &"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Mouse Binds
|
|
||||||
bindm = [
|
|
||||||
"$mainMod, mouse:272, movewindow"
|
|
||||||
"$mainMod, mouse:273, resizewindow"
|
|
||||||
];
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
disable_hyprland_logo = true;
|
|
||||||
disable_splash_rendering = true;
|
|
||||||
vfr = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
dwindle = {
|
|
||||||
smart_split = true;
|
|
||||||
special_scale_factor = 0.8;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# libs
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
# tools
|
|
||||||
bluez-tools
|
|
||||||
brightnessctl
|
|
||||||
pulseaudio
|
|
||||||
alsa-utils
|
|
||||||
|
|
||||||
qt5.qtwayland
|
|
||||||
qt6.qtwayland
|
|
||||||
libayatana-appindicator
|
|
||||||
xdg-utils
|
|
||||||
evtest
|
|
||||||
glib
|
|
||||||
xorg.xrandr
|
|
||||||
libinput
|
|
||||||
xclip
|
|
||||||
libnotify
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (config.vars) mainUser;
|
|
||||||
in {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
plasma5Packages.kio-admin
|
|
||||||
];
|
|
||||||
|
|
||||||
# To make it work with firefox
|
|
||||||
# https://www.reddit.com/r/NixOS/comments/xtoubc/comment/koxxr3e/?utm_source=share&utm_medium=web2x&context=3
|
|
||||||
systemd.user.services.plasma-dolphin = {
|
|
||||||
unitConfig = {
|
|
||||||
Description = "Dolphin file manager";
|
|
||||||
PartOf = ["graphical-session.target"];
|
|
||||||
};
|
|
||||||
path = ["/run/current-system/sw"];
|
|
||||||
environment.QT_QPA_PLATFORM = "wayland";
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "dbus";
|
|
||||||
BusName = "org.freedesktop.FileManager1";
|
|
||||||
ExecStart = "${pkgs.dolphin}/bin/dolphin";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${mainUser}.home.packages = with pkgs;
|
|
||||||
[
|
|
||||||
gnome-calculator
|
|
||||||
]
|
|
||||||
++ (with kdePackages; [
|
|
||||||
kde-cli-tools
|
|
||||||
])
|
|
||||||
++ (with plasma5Packages; [
|
|
||||||
ark
|
|
||||||
kcharselect
|
|
||||||
kdenlive
|
|
||||||
okular
|
|
||||||
|
|
||||||
# Dolphin & co
|
|
||||||
dolphin
|
|
||||||
dolphin-plugins
|
|
||||||
kdegraphics-thumbnailers
|
|
||||||
ffmpegthumbs
|
|
||||||
kio
|
|
||||||
kio-admin # needs to be both here and in system pkgs
|
|
||||||
kio-extras
|
|
||||||
kmime
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
Hyprspace,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
plugins = [Hyprspace.packages.${pkgs.system}.Hyprspace];
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
bind = [
|
|
||||||
"ALT, tab, overview:toggle"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
programs.bash.shellAliases = {
|
|
||||||
# https://wiki.hyprland.org/Contributing-and-Debugging/#lsp-and-formatting
|
|
||||||
"mkCMakeFiles" = "cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON";
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = [
|
|
||||||
(pkgs.writeShellScriptBin "testChanges" ''
|
|
||||||
rm -r /home/matt/git/$1/$2/{.cache,build}
|
|
||||||
nix flake update "$1"
|
|
||||||
nh os switch
|
|
||||||
(
|
|
||||||
cd "/home/matt/git/$1/$2"
|
|
||||||
nix develop /home/matt/git/$1 -c cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
|
||||||
)
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,88 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = osConfig.roles.desktop;
|
|
||||||
in {
|
|
||||||
programs = {
|
|
||||||
# https://codeberg.org/dnkl/foot/wiki#spawning-new-terminal-instances-in-the-current-working-directory
|
|
||||||
bash.bashrcExtra =
|
|
||||||
# bash
|
|
||||||
''
|
|
||||||
osc7_cwd() {
|
|
||||||
local strlen=''${#PWD}
|
|
||||||
local encoded=""
|
|
||||||
local pos c o
|
|
||||||
for (( pos=0; pos<strlen; pos++ )); do
|
|
||||||
c=''${PWD:$pos:1}
|
|
||||||
case "$c" in
|
|
||||||
[-/:_.!\'\(\)~[:alnum:]] ) o="$c" ;;
|
|
||||||
* ) printf -v o '%%%02X' "'$c" ;;
|
|
||||||
esac
|
|
||||||
encoded+="''${o}"
|
|
||||||
done
|
|
||||||
printf '\e]7;file://%s%s\e\\' "''${HOSTNAME}" "''${encoded}"
|
|
||||||
}
|
|
||||||
PROMPT_COMMAND=''${PROMPT_COMMAND:+$PROMPT_COMMAND; }osc7_cwd
|
|
||||||
'';
|
|
||||||
|
|
||||||
foot = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
main = {
|
|
||||||
term = "xterm-256color";
|
|
||||||
|
|
||||||
font = "JetBrainsMono Nerd Font:size=${
|
|
||||||
lib.strings.floatToString cfg.fontSize
|
|
||||||
}";
|
|
||||||
pad = "0x10";
|
|
||||||
};
|
|
||||||
|
|
||||||
key-bindings = {
|
|
||||||
spawn-terminal = "Control+Shift+Return";
|
|
||||||
};
|
|
||||||
|
|
||||||
bell = {
|
|
||||||
urgent = false;
|
|
||||||
notify = false;
|
|
||||||
visual = false;
|
|
||||||
command = null;
|
|
||||||
command-focused = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
colors = {
|
|
||||||
# BG transparency
|
|
||||||
alpha = 0.8;
|
|
||||||
|
|
||||||
background = "282a36";
|
|
||||||
foreground = "f8f8f2";
|
|
||||||
|
|
||||||
regular0 = "21222c"; # black
|
|
||||||
regular1 = "ff5555"; # red
|
|
||||||
regular2 = "50fa7b"; # green
|
|
||||||
regular3 = "f1fa8c"; # yellow
|
|
||||||
regular4 = "bd93f9"; # blue
|
|
||||||
regular5 = "ff79c6"; # magenta
|
|
||||||
regular6 = "8be9fd"; # cyan
|
|
||||||
regular7 = "f8f8f2"; # white
|
|
||||||
|
|
||||||
bright0 = "6272a4"; # bright black
|
|
||||||
bright1 = "ff6e6e"; # bright red
|
|
||||||
bright2 = "69ff94"; # bright green
|
|
||||||
bright3 = "ffffa5"; # bright yellow
|
|
||||||
bright4 = "d6acff"; # bright blue
|
|
||||||
bright5 = "ff92df"; # bright magenta
|
|
||||||
bright6 = "a4ffff"; # bright cyan
|
|
||||||
bright7 = "ffffff"; # bright white
|
|
||||||
|
|
||||||
selection-foreground = "ffffff";
|
|
||||||
selection-background = "44475a";
|
|
||||||
|
|
||||||
urls = "8be9fd";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
hyprland-plugins,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
plugins = [hyprland-plugins.packages.${pkgs.system}.hyprexpo];
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
plugin = {
|
|
||||||
hyprexpo = {
|
|
||||||
columns = 3;
|
|
||||||
gap_size = 5;
|
|
||||||
bg_col = "rgb(111111)";
|
|
||||||
workspace_method = "center current"; # [center/first] [workspace] e.g. first 1 or center m+1
|
|
||||||
|
|
||||||
enable_gesture = true; # laptop touchpad
|
|
||||||
gesture_fingers = 3;
|
|
||||||
gesture_distance = 300; # how far is the "max"
|
|
||||||
gesture_positive = true; # positive = swipe down. Negative = swipe up.
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
"ALT, tab, hyprexpo:expo, toggle" # can be: toggle, off/disable or on/enable
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
{osConfig, ...}: let
|
|
||||||
inherit (osConfig.services.xserver) xkb;
|
|
||||||
inherit (osConfig.roles.desktop) mainMonitor;
|
|
||||||
|
|
||||||
miceNames = [
|
|
||||||
"logitech-g502-x"
|
|
||||||
"logitech-g502-hero-gaming-mouse"
|
|
||||||
];
|
|
||||||
|
|
||||||
mkConf = name: {
|
|
||||||
inherit name;
|
|
||||||
sensitivity = 0;
|
|
||||||
accel_profile = "flat";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
settings = {
|
|
||||||
device = map (d: (mkConf d)) miceNames;
|
|
||||||
|
|
||||||
cursor = {
|
|
||||||
no_hardware_cursors = osConfig.nvidia.enable;
|
|
||||||
hide_on_touch = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
exec-once =
|
|
||||||
if mainMonitor != null
|
|
||||||
then ["hyprctl dispatch focusmonitor ${mainMonitor}"]
|
|
||||||
else [];
|
|
||||||
|
|
||||||
input = {
|
|
||||||
# Keyboard
|
|
||||||
kb_layout = xkb.layout;
|
|
||||||
kb_variant = xkb.variant;
|
|
||||||
numlock_by_default = true;
|
|
||||||
repeat_rate = 25;
|
|
||||||
|
|
||||||
# Mouse
|
|
||||||
follow_mouse = true;
|
|
||||||
|
|
||||||
# Touchpad
|
|
||||||
touchpad = {
|
|
||||||
natural_scroll = true;
|
|
||||||
disable_while_typing = false;
|
|
||||||
drag_lock = true;
|
|
||||||
tap-and-drag = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
",XF86AudioPlay, exec, playerctl play-pause"
|
|
||||||
",XF86AudioStop, exec, playerctl stop"
|
|
||||||
",XF86AudioNext, exec, playerctl next"
|
|
||||||
",XF86AudioPrev, exec, playerctl previous"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (self.legacyPackages.${pkgs.system}) mpvScripts;
|
|
||||||
in {
|
|
||||||
# For kdialog-open-files
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
kdialog
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.mpv = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# https://github.com/mpv-player/mpv/wiki/User-Scripts
|
|
||||||
scripts = with mpvScripts; [
|
|
||||||
modernx
|
|
||||||
# Dep of touch-gestures
|
|
||||||
pointer-event
|
|
||||||
touch-gestures
|
|
||||||
# Ctrl + o
|
|
||||||
kdialog-open-files
|
|
||||||
persist-properties
|
|
||||||
undo-redo
|
|
||||||
];
|
|
||||||
|
|
||||||
scriptOpts = {
|
|
||||||
persist_properties = {
|
|
||||||
properties = "volume,sub-scale";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Touch gestures default
|
|
||||||
pointer-event = {
|
|
||||||
margin_left = 0;
|
|
||||||
margin_right = 80;
|
|
||||||
margin_top = 50;
|
|
||||||
margin_bottom = 130;
|
|
||||||
ignore_left_single_long_while_window_dragging = true;
|
|
||||||
left_single = "cycle pause";
|
|
||||||
left_double = "script-message-to touch_gestures double";
|
|
||||||
left_long = "script-binding uosc/menu-blurred";
|
|
||||||
left_drag_start = "script-message-to touch_gestures drag_start";
|
|
||||||
left_drag_end = "script-message-to touch_gestures drag_end";
|
|
||||||
left_drag = "script-message-to touch_gestures drag";
|
|
||||||
};
|
|
||||||
|
|
||||||
touch-gestures = {
|
|
||||||
# valid options are:
|
|
||||||
# 'playlist' for changing the playlist item by swiping
|
|
||||||
# 'seek' for seeking by dragging
|
|
||||||
horizontal_drag = "seek";
|
|
||||||
|
|
||||||
# scale seeking based on the duration of the video
|
|
||||||
proportional_seek = true;
|
|
||||||
|
|
||||||
# scale factor for seeking
|
|
||||||
seek_scale = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
nixpkgs-wayland,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
waypkgs = nixpkgs-wayland.packages.${pkgs.system};
|
|
||||||
in {
|
|
||||||
programs = {
|
|
||||||
obs-studio = {
|
|
||||||
enable = true;
|
|
||||||
plugins = [
|
|
||||||
waypkgs.obs-wlrobs
|
|
||||||
pkgs.obs-studio-plugins.droidcam-obs
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
|
|
||||||
cursorTheme = self.legacyPackages.${pkgs.system}.dracula.hyprcursor;
|
|
||||||
cursorThemeName = "Dracula-cursors";
|
|
||||||
hyprcursorThemeName = "Dracula-hyprcursor";
|
|
||||||
cursorSize = "24";
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
../../home/theme
|
|
||||||
../../home/hyprpaper.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home.file.".local/share/icons/${hyprcursorThemeName}".source = cursorTheme;
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
settings =
|
|
||||||
{
|
|
||||||
envd = [
|
|
||||||
"XCURSOR_THEME, ${cursorThemeName}"
|
|
||||||
"XCURSOR_SIZE, ${cursorSize}"
|
|
||||||
];
|
|
||||||
|
|
||||||
exec-once = [
|
|
||||||
"hyprctl setcursor ${hyprcursorThemeName} ${cursorSize}"
|
|
||||||
];
|
|
||||||
|
|
||||||
windowrule = [
|
|
||||||
"size 1231 950,title:^(Open Folder)$"
|
|
||||||
"float,title:^(Open Folder)$"
|
|
||||||
|
|
||||||
"size 1231 950,title:^(Open File)$"
|
|
||||||
"float,title:^(Open File)$"
|
|
||||||
];
|
|
||||||
|
|
||||||
layerrule = [
|
|
||||||
"noanim, selection"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
// (
|
|
||||||
mkIf (config.home.username != "greeter") {
|
|
||||||
# This file should only be used for theming
|
|
||||||
source = ["${config.vars.configDir}/hypr/main.conf"];
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,257 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
jellyfin-flake,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) getExe makeLibraryPath mkIf optionals optionalString;
|
|
||||||
inherit (pkgs.writers) writeTOML;
|
|
||||||
|
|
||||||
flakeDir = config.environment.variables.FLAKE;
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
nvidiaEnable = config.nvidia.enable;
|
|
||||||
|
|
||||||
restartTailscale = pkgs.writeShellScriptBin "restartTailscale" ''
|
|
||||||
sudo ${pkgs.systemd}/bin/systemctl restart tailscaled.service
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
imports = [./dolphin.nix];
|
|
||||||
|
|
||||||
programs.kdeconnect.enable = true;
|
|
||||||
|
|
||||||
security.sudo.extraRules = [
|
|
||||||
{
|
|
||||||
users = [cfg.user];
|
|
||||||
groups = [100];
|
|
||||||
commands = [
|
|
||||||
{
|
|
||||||
command = "${pkgs.systemd}/bin/systemctl restart tailscaled.service";
|
|
||||||
options = ["SETENV" "NOPASSWD"];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
home-manager.users.${cfg.user} = {
|
|
||||||
imports = [
|
|
||||||
./home/foot.nix
|
|
||||||
./home/mpv.nix
|
|
||||||
./home/obs.nix
|
|
||||||
|
|
||||||
({config, ...}: let
|
|
||||||
symlink = config.lib.file.mkOutOfStoreSymlink;
|
|
||||||
configDir = "${flakeDir}/modules/desktop/desktop-environment/config";
|
|
||||||
in {
|
|
||||||
xdg = {
|
|
||||||
configFile = {
|
|
||||||
"dolphinrc".source = symlink "${configDir}/dolphinrc";
|
|
||||||
"kdeglobals".source = symlink "${configDir}/kdeglobals";
|
|
||||||
"kiorc".source = symlink "${configDir}/kiorc";
|
|
||||||
"mimeapps.list".source = symlink "${configDir}/mimeapps.list";
|
|
||||||
|
|
||||||
"satty/config.toml".source = writeTOML "satty.toml" {
|
|
||||||
general = {
|
|
||||||
early-exit = true;
|
|
||||||
copy-command = "wl-copy";
|
|
||||||
initial-tool = "crop";
|
|
||||||
output-filename = "${config.home.homeDirectory}/Pictures/Screenshots/screen-%d-%m-%Y_%H:%M:%S.png";
|
|
||||||
};
|
|
||||||
|
|
||||||
font = {
|
|
||||||
family = "Ubuntu Mono";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
desktopEntries =
|
|
||||||
(mkIf nvidiaEnable {
|
|
||||||
"com.github.iwalton3.jellyfin-media-player" = {
|
|
||||||
name = "Jellyfin Media Player";
|
|
||||||
comment = "Desktop client for Jellyfin";
|
|
||||||
exec = "jellyfinmediaplayer --platform xcb";
|
|
||||||
icon = "com.github.iwalton3.jellyfin-media-player";
|
|
||||||
terminal = false;
|
|
||||||
type = "Application";
|
|
||||||
categories = ["AudioVideo" "Video" "Player" "TV"];
|
|
||||||
settings = {
|
|
||||||
Version = "1.0";
|
|
||||||
StartupWMClass = "jellyfin-media-player";
|
|
||||||
};
|
|
||||||
actions = {
|
|
||||||
"DesktopF" = {
|
|
||||||
name = "Desktop [Fullscreen]";
|
|
||||||
exec = "jellyfinmediaplayer --fullscreen --desktop --platform xcb";
|
|
||||||
};
|
|
||||||
"DesktopW" = {
|
|
||||||
name = "Desktop [Windowed]";
|
|
||||||
exec = "jellyfinmediaplayer --windowed --desktop --platform xcb";
|
|
||||||
};
|
|
||||||
"TVF" = {
|
|
||||||
name = "TV [Fullscreen]";
|
|
||||||
exec = "jellyfinmediaplayer --fullscreen --tv --platform xcb";
|
|
||||||
};
|
|
||||||
"TVW" = {
|
|
||||||
name = "TV [Windowed]";
|
|
||||||
exec = "jellyfinmediaplayer --windowed --tv --platform xcb";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
|
||||||
// {
|
|
||||||
gparted = {
|
|
||||||
name = "GParted";
|
|
||||||
genericName = "Partition Editor";
|
|
||||||
comment = "Create, reorganize, and delete partitions";
|
|
||||||
exec = "Gparted";
|
|
||||||
icon = "gparted";
|
|
||||||
terminal = false;
|
|
||||||
type = "Application";
|
|
||||||
categories = ["GNOME" "System" "Filesystem"];
|
|
||||||
startupNotify = true;
|
|
||||||
settings = {
|
|
||||||
Keywords = "Partition";
|
|
||||||
X-GNOME-FullName = "GParted Partition Editor";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.sioyek = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
config = {
|
|
||||||
startup_commands = "toggle_custom_color";
|
|
||||||
ui_font = "JetBrainsMono Nerd Font Mono Regular";
|
|
||||||
font_size = "24";
|
|
||||||
source = toString self.legacyPackages.${pkgs.system}.dracula.sioyek;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages =
|
|
||||||
(with pkgs; [
|
|
||||||
# School
|
|
||||||
xournalpp
|
|
||||||
virt-manager
|
|
||||||
libreoffice-fresh # TODO: declarative conf?
|
|
||||||
hunspell
|
|
||||||
hunspellDicts.en_CA
|
|
||||||
|
|
||||||
# Apps
|
|
||||||
protonmail-desktop
|
|
||||||
spotifywm
|
|
||||||
photoqt
|
|
||||||
nextcloud-client
|
|
||||||
prismlauncher
|
|
||||||
|
|
||||||
(writeShellScriptBin "Gparted" ''
|
|
||||||
(
|
|
||||||
sleep 1.5
|
|
||||||
while killall -r -0 ksshaskpass > /dev/null 2>&1
|
|
||||||
do
|
|
||||||
sleep 0.1
|
|
||||||
if [[ $(hyprctl activewindow | grep Ksshaskpass) == "" ]]; then
|
|
||||||
killall -r ksshaskpass
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
) &
|
|
||||||
exec env SUDO_ASKPASS=${plasma5Packages.ksshaskpass}/bin/${plasma5Packages.ksshaskpass.pname} sudo -k -EA "${gparted}/bin/${gparted.pname}" "$@"
|
|
||||||
'')
|
|
||||||
|
|
||||||
# tools
|
|
||||||
wl-color-picker
|
|
||||||
wl-clipboard
|
|
||||||
cliphist
|
|
||||||
grim-hyprland
|
|
||||||
slurp
|
|
||||||
satty
|
|
||||||
])
|
|
||||||
++ [
|
|
||||||
jellyfin-flake.packages.${pkgs.system}.jellyfin-media-player
|
|
||||||
|
|
||||||
/*
|
|
||||||
Discord themes for Vencord
|
|
||||||
https://markchan0225.github.io/RoundedDiscord/RoundedDiscord.theme.css
|
|
||||||
https://raw.githubusercontent.com/dracula/BetterDiscord/master/Dracula_Official.theme.css
|
|
||||||
*/
|
|
||||||
(pkgs.symlinkJoin {
|
|
||||||
name = "discord";
|
|
||||||
paths = [
|
|
||||||
(pkgs.discord.override {
|
|
||||||
withOpenASAR = true;
|
|
||||||
withVencord = true;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
buildInputs = [pkgs.makeWrapper];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/Discord ${optionalString config.nvidia.enable
|
|
||||||
''--prefix LD_LIBRARY_PATH : "${makeLibraryPath [
|
|
||||||
pkgs.addOpenGLRunpath.driverLink
|
|
||||||
pkgs.libglvnd
|
|
||||||
]}"''} \
|
|
||||||
--add-flags "--enable-features=UseOzonePlatform,WebRTCPipeWireCapturer --ozone-platform=wayland"
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
|
|
||||||
(pkgs.symlinkJoin {
|
|
||||||
name = "rstudio";
|
|
||||||
paths = [
|
|
||||||
(pkgs.rstudioWrapper.override {packages = with pkgs.rPackages; [ggplot2 dplyr xts];})
|
|
||||||
];
|
|
||||||
buildInputs = [pkgs.makeWrapper];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/rstudio --prefix LD_LIBRARY_PATH : "${makeLibraryPath [
|
|
||||||
pkgs.addOpenGLRunpath.driverLink
|
|
||||||
pkgs.libglvnd
|
|
||||||
]}"
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
settings = {
|
|
||||||
exec-once =
|
|
||||||
[
|
|
||||||
"${config.programs.kdeconnect.package}/libexec/kdeconnectd"
|
|
||||||
"kdeconnect-indicator"
|
|
||||||
|
|
||||||
"wl-paste --watch cliphist store"
|
|
||||||
|
|
||||||
"sleep 3; nextcloud --background"
|
|
||||||
|
|
||||||
"[workspace special:protonmail silent] proton-mail"
|
|
||||||
"[workspace special:spot silent] spotify"
|
|
||||||
]
|
|
||||||
++ optionals config.services.tailscale.enable [
|
|
||||||
"sleep 3; ${getExe restartTailscale}"
|
|
||||||
];
|
|
||||||
|
|
||||||
windowrule = [
|
|
||||||
"tile,^(libreoffice)$"
|
|
||||||
"float,^(org.gnome.Calculator)$"
|
|
||||||
"float,^(com.gabm.satty)$"
|
|
||||||
"size 1000 700,^(com.gabm.satty)$"
|
|
||||||
|
|
||||||
"float,^(com.nextcloud.desktopclient.nextcloud)$"
|
|
||||||
"move cursor -15 -10,^(com.nextcloud.desktopclient.nextcloud)$"
|
|
||||||
"size 400 581,^(com.nextcloud.desktopclient.nextcloud)$"
|
|
||||||
|
|
||||||
"workspace special:protonmail silent,^(Proton Mail)$"
|
|
||||||
"workspace special:spot silent,^(Spotify)$"
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
"$mainMod, Q, exec, foot"
|
|
||||||
|
|
||||||
"$mainMod SHIFT, C, exec, wl-color-picker"
|
|
||||||
|
|
||||||
"$mainMod, P, togglespecialworkspace, protonmail"
|
|
||||||
"$mainMod, S, togglespecialworkspace, spot"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,108 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) getExe mkIf;
|
|
||||||
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
|
|
||||||
hmCfg = config.home-manager.users.${cfg.user};
|
|
||||||
agsPkg = hmCfg.programs.ags.finalPackage;
|
|
||||||
hyprPkg = hmCfg.wayland.windowManager.hyprland.finalPackage;
|
|
||||||
|
|
||||||
runInDesktop = pkgs.writeShellApplication {
|
|
||||||
name = "runInDesktop";
|
|
||||||
runtimeInputs = [
|
|
||||||
pkgs.sudo
|
|
||||||
agsPkg
|
|
||||||
hyprPkg
|
|
||||||
];
|
|
||||||
|
|
||||||
text = ''
|
|
||||||
params=( "$@" )
|
|
||||||
user="$(id -u ${cfg.user})"
|
|
||||||
readarray -t SIGS <<< "$(ls "/run/user/$user/hypr/")"
|
|
||||||
|
|
||||||
run() {
|
|
||||||
export HYPRLAND_INSTANCE_SIGNATURE="$1"
|
|
||||||
sudo -Eu ${cfg.user} hyprctl dispatch exec "''${params[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
i=0
|
|
||||||
|
|
||||||
# FIXME: not sure if sudo passes the exit status to this
|
|
||||||
while ! run "''${SIGS[$i]}"; do
|
|
||||||
((i+=1))
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
lockPkg = pkgs.writeShellApplication {
|
|
||||||
name = "lock";
|
|
||||||
runtimeInputs = [
|
|
||||||
agsPkg
|
|
||||||
];
|
|
||||||
|
|
||||||
text = ''
|
|
||||||
ags -r 'Tablet.setLaptopMode()'
|
|
||||||
ags -b lockscreen -c /home/${cfg.user}/.config/ags/lockscreen.js
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
services.acpid = mkIf cfg.isLaptop {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
lidEventCommands =
|
|
||||||
# bash
|
|
||||||
''
|
|
||||||
LID="/proc/acpi/button/lid/LID/state"
|
|
||||||
state=$(${pkgs.gawk}/bin/awk '{print $2}' "$LID")
|
|
||||||
|
|
||||||
case "$state" in
|
|
||||||
*open*)
|
|
||||||
${getExe runInDesktop} "ags -b lockscreen -r 'authFinger()'"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*close*)
|
|
||||||
${getExe runInDesktop} ${getExe lockPkg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
logger -t lid-handler "Failed to detect lid state ($state)"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${cfg.user} = {
|
|
||||||
home.packages = [
|
|
||||||
pkgs.seahorse
|
|
||||||
lockPkg
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
settings = {
|
|
||||||
exec-once = [
|
|
||||||
"gnome-keyring-daemon --start --components=secrets"
|
|
||||||
"${pkgs.plasma5Packages.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"
|
|
||||||
];
|
|
||||||
|
|
||||||
windowrule = [
|
|
||||||
"float,^(org.kde.polkit-kde-authentication-agent-1)$"
|
|
||||||
"size 741 288,^(org.kde.polkit-kde-authentication-agent-1)$"
|
|
||||||
"center,^(org.kde.polkit-kde-authentication-agent-1)$"
|
|
||||||
|
|
||||||
# For GParted auth
|
|
||||||
"size 741 288,^(org.kde.ksshaskpass)$"
|
|
||||||
"move cursor -370 -144,^(org.kde.ksshaskpass)$"
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
"$mainMod, L, exec, ${getExe lockPkg}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
{
|
|
||||||
ags,
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
|
|
||||||
hyprland =
|
|
||||||
config
|
|
||||||
.home-manager
|
|
||||||
.users
|
|
||||||
.${cfg.user}
|
|
||||||
.wayland
|
|
||||||
.windowManager
|
|
||||||
.hyprland
|
|
||||||
.finalPackage;
|
|
||||||
in {
|
|
||||||
# Add home folder for home-manager to work
|
|
||||||
users.users.greeter = {
|
|
||||||
home = "/var/lib/greeter";
|
|
||||||
createHome = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.greeter = {
|
|
||||||
imports = [ags.homeManagerModules.default];
|
|
||||||
|
|
||||||
programs.ags.enable = true;
|
|
||||||
|
|
||||||
home.packages = [
|
|
||||||
hyprland
|
|
||||||
pkgs.gtk3
|
|
||||||
pkgs.glib
|
|
||||||
];
|
|
||||||
|
|
||||||
xdg.configFile = {
|
|
||||||
"ags".source = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "ags-greeter";
|
|
||||||
src = lib.fileset.toSource {
|
|
||||||
root = ./.;
|
|
||||||
fileset = lib.fileset.unions [
|
|
||||||
./scss
|
|
||||||
./greeter.ts
|
|
||||||
./ts
|
|
||||||
./tsconfig.json
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = with pkgs; [
|
|
||||||
bun
|
|
||||||
dart-sass
|
|
||||||
];
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
sass ./scss/greeter.scss style.css
|
|
||||||
bun build ./greeter.ts --external resource:///* --external gi://* --external cairo > config.js
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir $out
|
|
||||||
mv style.css config.js $out/
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
|
|
||||||
hyprland =
|
|
||||||
config
|
|
||||||
.home-manager
|
|
||||||
.users
|
|
||||||
.${cfg.user}
|
|
||||||
.wayland
|
|
||||||
.windowManager
|
|
||||||
.hyprland
|
|
||||||
.finalPackage;
|
|
||||||
|
|
||||||
cmd = toString (pkgs.writeShellScript "hyprland-wrapper" ''
|
|
||||||
trap 'systemctl --user stop hyprland-session.target; sleep 1' EXIT
|
|
||||||
exec Hyprland >/dev/null
|
|
||||||
'');
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
./ags
|
|
||||||
./hyprland.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
services = {
|
|
||||||
displayManager.sessionPackages = [hyprland];
|
|
||||||
|
|
||||||
greetd = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
default_session = {
|
|
||||||
command = cmd;
|
|
||||||
user = "greeter";
|
|
||||||
};
|
|
||||||
|
|
||||||
initial_session = {
|
|
||||||
command = cmd;
|
|
||||||
user = cfg.user;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# unlock GPG keyring on login
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
|
||||||
security.pam.services.greetd.enableGnomeKeyring = true;
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) filterAttrs hasPrefix optionals;
|
|
||||||
|
|
||||||
inherit (import ./setupMonitors.nix {inherit config pkgs;}) setupMonitors;
|
|
||||||
|
|
||||||
cfg = config.roles.desktop;
|
|
||||||
|
|
||||||
# Nix stuff
|
|
||||||
cfgHypr =
|
|
||||||
config
|
|
||||||
.home-manager
|
|
||||||
.users
|
|
||||||
.${cfg.user}
|
|
||||||
.wayland
|
|
||||||
.windowManager
|
|
||||||
.hyprland;
|
|
||||||
|
|
||||||
devices = filterAttrs (n: v: hasPrefix "device:" n) cfgHypr.settings;
|
|
||||||
in {
|
|
||||||
home-manager.users.greeter = {
|
|
||||||
imports = [../desktop-environment/home/style.nix];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
package = cfgHypr.finalPackage;
|
|
||||||
systemd.enable = false;
|
|
||||||
|
|
||||||
settings =
|
|
||||||
{
|
|
||||||
inherit (cfgHypr.settings) cursor input misc monitor;
|
|
||||||
|
|
||||||
envd = optionals (config.nvidia.enable) [
|
|
||||||
"LIBVA_DRIVER_NAME, nvidia"
|
|
||||||
"NVD_BACKEND, direct"
|
|
||||||
"XDG_SESSION_TYPE, wayland"
|
|
||||||
"GBM_BACKEND, nvidia-drm"
|
|
||||||
"__GLX_VENDOR_LIBRARY_NAME, nvidia"
|
|
||||||
];
|
|
||||||
|
|
||||||
general.border_size = 0;
|
|
||||||
|
|
||||||
decoration = {
|
|
||||||
blur.enabled = false;
|
|
||||||
drop_shadow = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
exec-once = [
|
|
||||||
setupMonitors
|
|
||||||
"ags -b greeter &> /tmp/ags-greetd.log; hyprctl dispatch exit"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
// devices;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
wallpaper = toString self.legacyPackages.${pkgs.system}.dracula.wallpaper;
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [hyprpaper];
|
|
||||||
|
|
||||||
xdg.configFile."hypr/hyprpaper.conf" = {
|
|
||||||
text = lib.hm.generators.toHyprconf {
|
|
||||||
attrs = {
|
|
||||||
ipc = "on";
|
|
||||||
splash = false;
|
|
||||||
|
|
||||||
preload = [wallpaper];
|
|
||||||
|
|
||||||
wallpaper = [
|
|
||||||
",${wallpaper}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (self.legacyPackages.${pkgs.system}) dracula;
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
./gtk.nix
|
|
||||||
./qt.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home.pointerCursor = {
|
|
||||||
name = "Dracula-cursors";
|
|
||||||
package = dracula.gtk;
|
|
||||||
size = 24;
|
|
||||||
|
|
||||||
gtk.enable = true;
|
|
||||||
|
|
||||||
x11 = {
|
|
||||||
enable = true;
|
|
||||||
defaultCursor = "Dracula-cursors";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xresources.extraConfig = ''
|
|
||||||
! Dracula Xresources palette
|
|
||||||
*.foreground: #F8F8F2
|
|
||||||
*.background: #282A36
|
|
||||||
*.color0: #000000
|
|
||||||
*.color8: #4D4D4D
|
|
||||||
*.color1: #FF5555
|
|
||||||
*.color9: #FF6E67
|
|
||||||
*.color2: #50FA7B
|
|
||||||
*.color10: #5AF78E
|
|
||||||
*.color3: #F1FA8C
|
|
||||||
*.color11: #F4F99D
|
|
||||||
*.color4: #BD93F9
|
|
||||||
*.color12: #CAA9FA
|
|
||||||
*.color5: #FF79C6
|
|
||||||
*.color13: #FF92D0
|
|
||||||
*.color6: #8BE9FD
|
|
||||||
*.color14: #9AEDFE
|
|
||||||
*.color7: #BFBFBF
|
|
||||||
*.color15: #E6E6E6
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,64 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (import ./gradience.nix {inherit pkgs lib;}) gradience;
|
|
||||||
|
|
||||||
cfg = osConfig.roles.desktop;
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
gnomeExtensions.user-themes
|
|
||||||
];
|
|
||||||
|
|
||||||
# Gtk settings
|
|
||||||
gtk = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
theme = {
|
|
||||||
name = "adw-gtk3";
|
|
||||||
package = pkgs.adw-gtk3;
|
|
||||||
};
|
|
||||||
|
|
||||||
iconTheme = {
|
|
||||||
name = "Flat-Remix-Violet-Dark";
|
|
||||||
package = pkgs.flat-remix-icon-theme;
|
|
||||||
};
|
|
||||||
|
|
||||||
font = {
|
|
||||||
name = "Sans Serif";
|
|
||||||
size = cfg.fontSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk3 = {
|
|
||||||
extraConfig = {
|
|
||||||
"gtk-application-prefer-dark-theme" = 1;
|
|
||||||
};
|
|
||||||
extraCss = "@import url(\"file://${gradience.build}/gtk-3.0/gtk.css\");";
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk4 = {
|
|
||||||
extraConfig = {
|
|
||||||
"gtk-application-prefer-dark-theme" = 1;
|
|
||||||
};
|
|
||||||
extraCss = "@import url(\"file://${gradience.build}/gtk-4.0/gtk.css\");";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dconf.settings = {
|
|
||||||
"org/gnome/shell/extensions/user-theme" = {
|
|
||||||
name = gradience.shellTheme;
|
|
||||||
};
|
|
||||||
"org/gnome/shell" = {
|
|
||||||
enabled-extensions = [pkgs.gnomeExtensions.user-themes.extensionUuid];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.dataFile.shellTheme = {
|
|
||||||
enable = true;
|
|
||||||
recursive = true;
|
|
||||||
source = "${gradience.build}/gradience-shell";
|
|
||||||
target = "themes/${gradience.shellTheme}";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (self.legacyPackages.${pkgs.system}) dracula;
|
|
||||||
|
|
||||||
cfg = osConfig.roles.desktop;
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
libsForQt5.qtstyleplugin-kvantum
|
|
||||||
qt6Packages.qtstyleplugin-kvantum
|
|
||||||
];
|
|
||||||
|
|
||||||
qt = {
|
|
||||||
enable = true;
|
|
||||||
platformTheme.name = "qtct";
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.configFile = let
|
|
||||||
floatFont = lib.strings.floatToString cfg.fontSize;
|
|
||||||
qtconf =
|
|
||||||
# ini
|
|
||||||
''
|
|
||||||
[Fonts]
|
|
||||||
fixed="Sans Serif,${floatFont},-1,5,50,0,0,0,0,0"
|
|
||||||
general="Sans Serif,${floatFont},-1,5,50,0,0,0,0,0"
|
|
||||||
|
|
||||||
[Appearance]
|
|
||||||
icon_theme=Flat-Remix-Violet-Dark
|
|
||||||
style='';
|
|
||||||
# The newline before this must be there
|
|
||||||
in {
|
|
||||||
"Kvantum/Dracula/Dracula.kvconfig".source = "${dracula.gtk}/share/Kvantum/Dracula-purple-solid/Dracula-purple-solid.kvconfig";
|
|
||||||
"Kvantum/Dracula/Dracula.svg".source = "${dracula.gtk}/share/Kvantum/Dracula-purple-solid/Dracula-purple-solid.svg";
|
|
||||||
"Kvantum/kvantum.kvconfig".text = "[General]\ntheme=Dracula";
|
|
||||||
|
|
||||||
"qt5ct/qt5ct.conf".text = qtconf + "kvantum";
|
|
||||||
"qt6ct/qt6ct.conf".text = qtconf + "kvantum";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{...}: {
|
|
||||||
services.kmscon = {
|
|
||||||
enable = true;
|
|
||||||
useXkbConfig = true;
|
|
||||||
hwRender = false;
|
|
||||||
|
|
||||||
# FIXME: https://github.com/Aetf/kmscon/issues/18 // Icons not rendering properly
|
|
||||||
extraOptions = builtins.concatStringsSep " " [
|
|
||||||
"--font-size 12.5"
|
|
||||||
"--font-dpi 170"
|
|
||||||
"--font-name 'JetBrainsMono Nerd Font'"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
services = {
|
|
||||||
# Enable CUPS to print documents.
|
|
||||||
printing = {
|
|
||||||
enable = true;
|
|
||||||
drivers = with pkgs; [
|
|
||||||
hplip
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
{
|
|
||||||
libratbag-src,
|
|
||||||
pkgs,
|
|
||||||
piper-src,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (import ../flake/lib.nix {}) mkVersion;
|
|
||||||
in {
|
|
||||||
services.ratbagd = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
package = pkgs.libratbag.overrideAttrs {
|
|
||||||
pname = "libratbag";
|
|
||||||
version = mkVersion libratbag-src;
|
|
||||||
src = libratbag-src;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = [
|
|
||||||
(pkgs.piper.overrideAttrs {
|
|
||||||
pname = "piper";
|
|
||||||
version = mkVersion piper-src;
|
|
||||||
src = piper-src;
|
|
||||||
|
|
||||||
mesonFlags = [
|
|
||||||
"-Druntime-dependency-checks=false"
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{config, ...}: let
|
|
||||||
inherit (config.vars) mainUser;
|
|
||||||
in {
|
|
||||||
services = {
|
|
||||||
openssh = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
PasswordAuthentication = false;
|
|
||||||
PermitRootLogin = "no";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.${mainUser} = {
|
|
||||||
openssh.authorizedKeys.keys = [
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPE39uk52+NIDLdHeoSHIEsOUUFRzj06AGn09z4TUOYm matt@OP9"
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICr2+CpqXNMLsjgbrYyIwTKhlVSiIYol1ghBPzLmUpKl matt@binto"
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJGbLu+Gb7PiyNgNXMHemaQLnKixebx1/4cdJGna9OQp matt@wim"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
{config, ...}: let
|
|
||||||
inherit (config.vars) hostName mainUser;
|
|
||||||
in {
|
|
||||||
services = {
|
|
||||||
tailscale = {
|
|
||||||
enable = true;
|
|
||||||
# TODO: add authKeyFile to get extraUpFlags to work
|
|
||||||
# https://github.com/juanfont/headscale/issues/1550
|
|
||||||
# https://github.com/juanfont/headscale/blob/main/docs/running-headscale-linux-manual.md#register-machine-using-a-pre-authenticated-key
|
|
||||||
# https://www.reddit.com/r/NixOS/comments/18kz1nb/tailscale_extraupflags_not_working/
|
|
||||||
extraUpFlags = [
|
|
||||||
"--login-server https://headscale.nelim.org"
|
|
||||||
"--operator=matt"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${mainUser} = {
|
|
||||||
programs.bash.shellAliases = {
|
|
||||||
# Connect to headscale
|
|
||||||
tup = "tailscale up --login-server https://headscale.nelim.org";
|
|
||||||
|
|
||||||
# Desktop
|
|
||||||
pc = "ssh -t matt@binto 'tmux -2u new -At ${hostName}'";
|
|
||||||
|
|
||||||
# NAS
|
|
||||||
nos = "ssh -t matt@nos 'tmux -2u new -At ${hostName}'";
|
|
||||||
|
|
||||||
# Experimenting server
|
|
||||||
servivi = "ssh -t matt@servivi 'tmux -2u new -At ${hostName}'";
|
|
||||||
|
|
||||||
# Cluster nodes
|
|
||||||
thingone = "ssh -t matt@thingone 'tmux -2u new -At ${hostName}'";
|
|
||||||
thingtwo = "ssh -t matt@thingtwo 'tmux -2u new -At ${hostName}'";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -21,4 +21,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
users.users.${cfg.user}.extraGroups = ["adbusers"];
|
users.users.${cfg.user}.extraGroups = ["adbusers"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# For accurate stack trace
|
||||||
|
_file = ./default.nix;
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue