Compare commits

..

2 commits
master ... sway

Author SHA1 Message Date
Paul-Henri Froidmont
6b047c55b1
Sway 2024-07-10 19:57:01 +02:00
Paul-Henri Froidmont
78e212e21b
Fix amdgpu crashes 2024-07-10 16:09:30 +02:00
69 changed files with 1806 additions and 2931 deletions

View file

@ -1,62 +1,44 @@
{ { inputs, config, lib, pkgs, ... }:
inputs,
lib,
pkgs,
...
}:
{ with lib;
imports = [ with lib.my; {
inputs.home-manager.nixosModules.home-manager imports = [ inputs.home-manager.nixosModules.home-manager ]
] ++ (mapModulesRec' (toString ./modules) import);
++ (lib.my.mapModulesRec' (toString ./modules) import);
nix = { nix = {
package = pkgs.nixVersions.stable; package = pkgs.nixFlakes;
extraOptions = "experimental-features = nix-command flakes"; extraOptions = "experimental-features = nix-command flakes";
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ]; nixPath = [ "nixpkgs=${inputs.nixpkgs-unstable}" ];
settings = { settings = {
substituters = [ substituters = [
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"http://cache.banditlair.com"
"https://cache.nixos.org/" "https://cache.nixos.org/"
"https://devenv.cachix.org"
# "ssh://nix-ssh@hel1.banditlair.com"
]; ];
trusted-public-keys = [ trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "cache.banditlair.com:4zk7iDvzKh6VN+LxzKIGcVPKgL5dLeyEt2ydrgx4o8c="
"hel1.banditlair.com:stzB4xe5QTFvSABoP11ZpNzLDCRZ93PExk0Z/gOzW3g="
]; ];
auto-optimise-store = true; auto-optimise-store = true;
}; };
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
persistent = true;
};
}; };
system.configurationRevision = lib.mkIf (inputs.self ? rev) inputs.self.rev; system.configurationRevision = with inputs; mkIf (self ? rev) self.rev;
time.timeZone = lib.mkDefault "Europe/Amsterdam"; time.timeZone = mkDefault "Europe/Amsterdam";
i18n.defaultLocale = lib.mkDefault "en_US.UTF-8"; i18n.defaultLocale = mkDefault "en_US.UTF-8";
zramSwap.enable = true;
zramSwap.memoryPercent = 300;
systemd.oomd.enable = true;
console = { console = {
keyMap = lib.mkDefault "fr"; keyMap = lib.mkDefault "fr";
font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz"; font = mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz";
earlySetup = true; earlySetup = true;
}; };
fonts.fontconfig.antialias = lib.mkDefault true; fonts.fontconfig.antialias = mkDefault true;
fonts.fontconfig.subpixel = { fonts.fontconfig.subpixel = {
rgba = lib.mkDefault "none"; rgba = mkDefault "none";
lcdfilter = lib.mkDefault "none"; lcdfilter = mkDefault "none";
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@ -78,10 +60,7 @@
]; ];
networking.hosts = { networking.hosts = {
"127.0.0.1" = [ "127.0.0.1" = [ "localhost" "membres.yourcoop.local" ];
"localhost"
"membres.yourcoop.local"
];
}; };
services.resolved.dnssec = "false"; services.resolved.dnssec = "false";
} }

637
flake.lock generated
View file

@ -1,38 +1,50 @@
{ {
"nodes": { "nodes": {
"blueprint": { "doom-emacs": {
"inputs": { "flake": false,
"nixpkgs": [
"llm-agents",
"nixpkgs"
],
"systems": "systems"
},
"locked": { "locked": {
"lastModified": 1763308703, "lastModified": 1662497747,
"narHash": "sha256-O9Y+Wer8wOh+N+4kcCK5p/VLrXyX+ktk0/s3HdZvJzk=", "narHash": "sha256-4n7E1fqda7cn5/F2jTkOnKw1juG6XMS/FI9gqODL3aU=",
"owner": "numtide", "owner": "doomemacs",
"repo": "blueprint", "repo": "doomemacs",
"rev": "5a9bba070f801d63e2af3c9ef00b86b212429f4f", "rev": "3853dff5e11655e858d0bfae64b70cb12ef685ac",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "numtide", "owner": "doomemacs",
"repo": "blueprint", "repo": "doomemacs",
"rev": "3853dff5e11655e858d0bfae64b70cb12ef685ac",
"type": "github"
}
},
"doom-snippets": {
"flake": false,
"locked": {
"lastModified": 1694887483,
"narHash": "sha256-KlKhruPSLPSKqUnr5/U65arm16VrY9ORzm+XKNZhpTQ=",
"owner": "doomemacs",
"repo": "snippets",
"rev": "f022984ee1318a4015d5d081b3c3dab5a60dc6ff",
"type": "github"
},
"original": {
"owner": "doomemacs",
"repo": "snippets",
"type": "github" "type": "github"
} }
}, },
"emacs-overlay": { "emacs-overlay": {
"inputs": { "inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable"
}, },
"locked": { "locked": {
"lastModified": 1766423654, "lastModified": 1719106959,
"narHash": "sha256-ko2vQ6kf8dXLMTq2bnNazbPAHvdsf+BrWQfr4acRNDo=", "narHash": "sha256-dxrEcXldbG9pw2f+BCgu5lv7nUeHphQHhGZupaaDmGg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "emacs-overlay", "repo": "emacs-overlay",
"rev": "d06edf59a5f5c1b15d607ec2e514cf2f8a71a591", "rev": "b5e4ae0a33bb011e9515181ff1634471a975539f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -41,6 +53,236 @@
"type": "github" "type": "github"
} }
}, },
"emacs-overlay_2": {
"flake": false,
"locked": {
"lastModified": 1676366521,
"narHash": "sha256-i4UAY8t9Au9SJtsgYppa3NHSVf1YkV6yqnNIQd+Km4g=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "c16be6de78ea878aedd0292aa5d4a1ee0a5da501",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "c16be6de78ea878aedd0292aa5d4a1ee0a5da501",
"type": "github"
}
},
"emacs-so-long": {
"flake": false,
"locked": {
"lastModified": 1575031854,
"narHash": "sha256-xIa5zO0ZaToDrec1OFjBK6l39AbA4l/CE4LInVu2hi0=",
"owner": "hlissner",
"repo": "emacs-so-long",
"rev": "ed666b0716f60e8988c455804de24b55919e71ca",
"type": "github"
},
"original": {
"owner": "hlissner",
"repo": "emacs-so-long",
"type": "github"
}
},
"evil-escape": {
"flake": false,
"locked": {
"lastModified": 1588439096,
"narHash": "sha256-aB2Ge5o/93B18tPf4fN1c+O46CNh/nOqwLJbox4c8Gw=",
"owner": "hlissner",
"repo": "evil-escape",
"rev": "819f1ee1cf3f69a1ae920e6004f2c0baeebbe077",
"type": "github"
},
"original": {
"owner": "hlissner",
"repo": "evil-escape",
"type": "github"
}
},
"evil-markdown": {
"flake": false,
"locked": {
"lastModified": 1626852210,
"narHash": "sha256-HBBuZ1VWIn6kwK5CtGIvHM1+9eiNiKPH0GUsyvpUVN8=",
"owner": "Somelauw",
"repo": "evil-markdown",
"rev": "8e6cc68af83914b2fa9fd3a3b8472573dbcef477",
"type": "github"
},
"original": {
"owner": "Somelauw",
"repo": "evil-markdown",
"type": "github"
}
},
"evil-org-mode": {
"flake": false,
"locked": {
"lastModified": 1607203864,
"narHash": "sha256-JxwqVYDN6OIJEH15MVI6XOZAPtUWUhJQWHyzcrUvrFg=",
"owner": "hlissner",
"repo": "evil-org-mode",
"rev": "a9706da260c45b98601bcd72b1d2c0a24a017700",
"type": "github"
},
"original": {
"owner": "hlissner",
"repo": "evil-org-mode",
"type": "github"
}
},
"evil-quick-diff": {
"flake": false,
"locked": {
"lastModified": 1575189609,
"narHash": "sha256-oGzl1ayW9rIuq0haoiFS7RZsS8NFMdEA7K1BSozgnJU=",
"owner": "rgrinberg",
"repo": "evil-quick-diff",
"rev": "69c883720b30a892c63bc89f49d4f0e8b8028908",
"type": "github"
},
"original": {
"owner": "rgrinberg",
"repo": "evil-quick-diff",
"type": "github"
}
},
"explain-pause-mode": {
"flake": false,
"locked": {
"lastModified": 1595842060,
"narHash": "sha256-++znrjiDSx+cy4okFBBXUBkRFdtnE2x+trkmqjB3Njs=",
"owner": "lastquestion",
"repo": "explain-pause-mode",
"rev": "2356c8c3639cbeeb9751744dbe737267849b4b51",
"type": "github"
},
"original": {
"owner": "lastquestion",
"repo": "explain-pause-mode",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flameshot-git": {
"flake": false,
"locked": {
"lastModified": 1718732606,
"narHash": "sha256-Y9RnVxic5mlRIc48wYVQXrvu/s65smtMMVj8HBskHzE=",
"owner": "flameshot-org",
"repo": "flameshot",
"rev": "c1dac52231024174faa68a29577129ebca125dff",
"type": "github"
},
"original": {
"owner": "flameshot-org",
"repo": "flameshot",
"type": "github"
}
},
"format-all": {
"flake": false,
"locked": {
"lastModified": 1581716637,
"narHash": "sha256-ul7LCe60W8TIvUmUtZtZRo8489TK9iTPDsLHmzxY57M=",
"owner": "lassik",
"repo": "emacs-format-all-the-code",
"rev": "47d862d40a088ca089c92cd393c6dca4628f87d3",
"type": "github"
},
"original": {
"owner": "lassik",
"repo": "emacs-format-all-the-code",
"rev": "47d862d40a088ca089c92cd393c6dca4628f87d3",
"type": "github"
}
},
"gruvbox-gtk-theme": {
"flake": false,
"locked": {
"lastModified": 1718658865,
"narHash": "sha256-wUBOR9CjjD2MwT3PdLw/mccVLYhwVCaTJ+fe2V2HhnE=",
"owner": "Fausto-Korpsvart",
"repo": "Gruvbox-GTK-Theme",
"rev": "5e99fc6c2b30b0489065254240f15cd6d401eb0b",
"type": "github"
},
"original": {
"owner": "Fausto-Korpsvart",
"repo": "Gruvbox-GTK-Theme",
"type": "github"
}
},
"gruvbox-kvantum-theme": {
"flake": false,
"locked": {
"lastModified": 1696096968,
"narHash": "sha256-u2J4Zf9HuMjNCt3qVpgEffkytl/t277FzOvWL8Nm8os=",
"owner": "sachnr",
"repo": "gruvbox-kvantum-themes",
"rev": "f47670be407c1f07c64890ad53884ee9977a7db1",
"type": "github"
},
"original": {
"owner": "sachnr",
"repo": "gruvbox-kvantum-themes",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -48,47 +290,85 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1766387499, "lastModified": 1718530513,
"narHash": "sha256-AjK3/UKDzeXFeYNLVBaJ3+HLE9he1g5UrlNd4/BM3eA=", "narHash": "sha256-BmO8d0r+BVlwWtMLQEYnwmngqdXIuyFzMwvmTcLMee8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "527ad07e6625302b648ed3b28c34b62a79bd103e", "rev": "a1fddf0967c33754271761d91a3d921772b30d0e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "master", "ref": "release-24.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"llm-agents": { "nix-doom-emacs": {
"inputs": { "inputs": {
"blueprint": "blueprint", "doom-emacs": "doom-emacs",
"doom-snippets": "doom-snippets",
"emacs-overlay": "emacs-overlay_2",
"emacs-so-long": "emacs-so-long",
"evil-escape": "evil-escape",
"evil-markdown": "evil-markdown",
"evil-org-mode": "evil-org-mode",
"evil-quick-diff": "evil-quick-diff",
"explain-pause-mode": "explain-pause-mode",
"flake-compat": "flake-compat",
"flake-utils": "flake-utils_2",
"format-all": "format-all",
"nix-straight": "nix-straight",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"treefmt-nix": "treefmt-nix" "nose": "nose",
"ob-racket": "ob-racket",
"org": "org",
"org-contrib": "org-contrib",
"org-yt": "org-yt",
"php-extras": "php-extras",
"revealjs": "revealjs",
"rotate-text": "rotate-text",
"sln-mode": "sln-mode",
"ts-fold": "ts-fold",
"ws-butler": "ws-butler"
}, },
"locked": { "locked": {
"lastModified": 1766441132, "lastModified": 1701264882,
"narHash": "sha256-bd6d2lQiNaIEIjRZo7yFthyYJ8uugnRJfWn8SuOy8i4=", "narHash": "sha256-MBXR7x7Ua8qystlGr+lenwjQd7dsFNFpEFmtHhh10zM=",
"owner": "numtide", "owner": "nix-community",
"repo": "llm-agents.nix", "repo": "nix-doom-emacs",
"rev": "950a181bbb93b8de506b1db15fec242d273d2c1d", "rev": "f7413022370f24bb53cb450bfb2803233510113e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "numtide", "owner": "nix-community",
"repo": "llm-agents.nix", "repo": "nix-doom-emacs",
"type": "github"
}
},
"nix-straight": {
"flake": false,
"locked": {
"lastModified": 1694361489,
"narHash": "sha256-kjDp+j6OtrmqbtjQB5uuOtjS08+kgJQuxFqhWE1Y9Rw=",
"owner": "nix-community",
"repo": "nix-straight.el",
"rev": "748be99b84be0b130e946288099806a0f16d6e57",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-straight.el",
"type": "github" "type": "github"
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1766309749, "lastModified": 1718895438,
"narHash": "sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC+2IVK0NoVEzDoOh4DA4=", "narHash": "sha256-k3JqJrkdoYwE3fHE6xGDY676AYmyh4U2Zw+0Bwe5DLU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", "rev": "d603719ec6e294f034936c0d0dc06f689d91b6c3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -100,130 +380,221 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1766014764, "lastModified": 1718811006,
"narHash": "sha256-+73VffE5GP5fvbib6Hs1Su6LehG+9UV1Kzs90T2gBLA=", "narHash": "sha256-0Y8IrGhRmBmT7HHXlxxepg2t8j1X90++qRN3lukGaIk=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2b0d2b456e4e8452cf1c16d00118d145f31160f9", "rev": "03d771e513ce90147b65fe922d87d3a0356fc125",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-25.05", "ref": "nixos-23.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1718895438,
"narHash": "sha256-k3JqJrkdoYwE3fHE6xGDY676AYmyh4U2Zw+0Bwe5DLU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d603719ec6e294f034936c0d0dc06f689d91b6c3",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1766314097, "lastModified": 1695806987,
"narHash": "sha256-laJftWbghBehazn/zxVJ8NdENVgjccsWAdAqKXhErrM=", "narHash": "sha256-fX5kGs66NZIxCMcpAGIpxuftajHL8Hil1vjHmjjl118=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "306ea70f9eb0fb4e040f8540e2deab32ed7e2055", "rev": "f3dab3509afca932f3f4fd0908957709bb1c1f57",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "id": "nixpkgs",
"ref": "nixpkgs-unstable", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "type": "indirect"
"type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1766309749, "lastModified": 1718835956,
"narHash": "sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC+2IVK0NoVEzDoOh4DA4=", "narHash": "sha256-wM9v2yIxClRYsGHut5vHICZTK7xdrUGfrLkXvSuv6s4=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", "rev": "dd457de7e08c6d06789b1f5b88fc9327f4d96309",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-unstable", "ref": "nixos-24.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": { "nose": {
"locked": {
"lastModified": 1766070988,
"narHash": "sha256-G/WVghka6c4bAzMhTwT2vjLccg/awmHkdKSd2JrycLc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c6245e83d836d0433170a16eb185cefe0572f8b8",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nvim-treesitter": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1766230815, "lastModified": 1400604510,
"narHash": "sha256-+2PF6Q2uwRs/gbhKvR4jF8rYhe0HoZfwMwZCoZinp/o=", "narHash": "sha256-daEi8Kta1oGaDEmUUDDQMahTTPOpvNpDKk22rlr7cB0=",
"owner": "nvim-treesitter", "owner": "emacsattic",
"repo": "nvim-treesitter", "repo": "nose",
"rev": "8cdffc6d334731ce3703b6d870a5a34fd878208a", "rev": "f8528297519eba911696c4e68fa88892de9a7b72",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nvim-treesitter", "owner": "emacsattic",
"ref": "main", "repo": "nose",
"repo": "nvim-treesitter",
"type": "github" "type": "github"
} }
}, },
"nvim-treesitter-main": { "ob-racket": {
"inputs": {
"nixpkgs": "nixpkgs_4",
"nvim-treesitter": "nvim-treesitter",
"nvim-treesitter-textobjects": "nvim-treesitter-textobjects"
},
"locked": {
"lastModified": 1766296113,
"narHash": "sha256-s6bymukQTFg6kAsgogwbCda+Fe+Su3T9rJE0xZ8s9R0=",
"owner": "iofq",
"repo": "nvim-treesitter-main",
"rev": "5ca3b0dd2d3d00fb597ba8c316eb3ca79ea17fbc",
"type": "github"
},
"original": {
"owner": "iofq",
"repo": "nvim-treesitter-main",
"type": "github"
}
},
"nvim-treesitter-textobjects": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1766243280, "lastModified": 1584656173,
"narHash": "sha256-hbVwqoo0WRTVKIhsG5N6IXnmOVrrQzGuE4x0rEMYro0=", "narHash": "sha256-rBUYDDCXb+3D4xTPQo9UocbTPZ32kWV1Uya/1DmZknU=",
"owner": "nvim-treesitter", "owner": "xchrishawk",
"repo": "nvim-treesitter-textobjects", "repo": "ob-racket",
"rev": "e91c585ac0ee760198dabc1fad2e6227effdcd5e", "rev": "83457ec9e1e96a29fd2086ed19432b9d75787673",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nvim-treesitter", "owner": "xchrishawk",
"ref": "main", "repo": "ob-racket",
"repo": "nvim-treesitter-textobjects", "type": "github"
}
},
"org": {
"flake": false,
"locked": {
"lastModified": 1695726851,
"narHash": "sha256-qgbjspklSoI8M3cbCJOcUdjuijRgsL/+PSyEOW9VX4I=",
"owner": "emacs-straight",
"repo": "org-mode",
"rev": "aa9177e1a8b039c357d369c1c9aaab710bb247a9",
"type": "github"
},
"original": {
"owner": "emacs-straight",
"repo": "org-mode",
"type": "github"
}
},
"org-contrib": {
"flake": false,
"locked": {
"lastModified": 1694946041,
"narHash": "sha256-X/HFG6NZe5BY00KvGbcsIuf9R6Lg8x7Uhd0Y5+Q3qZU=",
"owner": "emacsmirror",
"repo": "org-contrib",
"rev": "5eabbf22bdd4523c922a30787e98ee66c24221aa",
"type": "github"
},
"original": {
"owner": "emacsmirror",
"repo": "org-contrib",
"type": "github"
}
},
"org-yt": {
"flake": false,
"locked": {
"lastModified": 1527381913,
"narHash": "sha256-dzQ6B7ryzatHCTLyEnRSbWO0VUiX/FHYnpHTs74aVUs=",
"owner": "TobiasZawada",
"repo": "org-yt",
"rev": "40cc1ac76d741055cbefa13860d9f070a7ade001",
"type": "github"
},
"original": {
"owner": "TobiasZawada",
"repo": "org-yt",
"type": "github"
}
},
"php-extras": {
"flake": false,
"locked": {
"lastModified": 1573312690,
"narHash": "sha256-r4WyVbzvT0ra4Z6JywNBOw5RxOEYd6Qe2IpebHXkj1U=",
"owner": "arnested",
"repo": "php-extras",
"rev": "d410c5af663c30c01d461ac476d1cbfbacb49367",
"type": "github"
},
"original": {
"owner": "arnested",
"repo": "php-extras",
"type": "github"
}
},
"revealjs": {
"flake": false,
"locked": {
"lastModified": 1695738029,
"narHash": "sha256-Z9c9Q41jMkj/DyXOiZYyIa7Gmn8VB8yauTyWrSsT+ps=",
"owner": "hakimel",
"repo": "reveal.js",
"rev": "88fbfc5751ad01e3f6adee5819eabeb9e73c3757",
"type": "github"
},
"original": {
"owner": "hakimel",
"repo": "reveal.js",
"type": "github" "type": "github"
} }
}, },
"root": { "root": {
"inputs": { "inputs": {
"emacs-overlay": "emacs-overlay", "emacs-overlay": "emacs-overlay",
"flameshot-git": "flameshot-git",
"gruvbox-gtk-theme": "gruvbox-gtk-theme",
"gruvbox-kvantum-theme": "gruvbox-kvantum-theme",
"home-manager": "home-manager", "home-manager": "home-manager",
"llm-agents": "llm-agents", "nix-doom-emacs": "nix-doom-emacs",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_3",
"nvim-treesitter-main": "nvim-treesitter-main", "nixpkgs-unstable": "nixpkgs-unstable"
"vim-org-roam": "vim-org-roam" }
},
"rotate-text": {
"flake": false,
"locked": {
"lastModified": 1322962747,
"narHash": "sha256-SOeOgSlcEIsKhUiYDJv0p+mLUb420s9E2BmvZQvZ0wk=",
"owner": "debug-ito",
"repo": "rotate-text.el",
"rev": "48f193697db996855aee1ad2bc99b38c6646fe76",
"type": "github"
},
"original": {
"owner": "debug-ito",
"repo": "rotate-text.el",
"type": "github"
}
},
"sln-mode": {
"flake": false,
"locked": {
"lastModified": 1423727528,
"narHash": "sha256-XqkqPyEJuTtFslOz1fpTf/Klbd/zA7IGpzpmum/MGao=",
"owner": "sensorflo",
"repo": "sln-mode",
"rev": "0f91d1b957c7d2a7bab9278ec57b54d57f1dbd9c",
"type": "github"
},
"original": {
"owner": "sensorflo",
"repo": "sln-mode",
"type": "github"
} }
}, },
"systems": { "systems": {
@ -241,40 +612,50 @@
"type": "github" "type": "github"
} }
}, },
"treefmt-nix": { "systems_2": {
"inputs": {
"nixpkgs": [
"llm-agents",
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1766000401, "lastModified": 1681028828,
"narHash": "sha256-+cqN4PJz9y0JQXfAK5J1drd0U05D5fcAGhzhfVrDlsI=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "numtide", "owner": "nix-systems",
"repo": "treefmt-nix", "repo": "default",
"rev": "42d96e75aa56a3f70cab7e7dc4a32868db28e8fd", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "numtide", "owner": "nix-systems",
"repo": "treefmt-nix", "repo": "default",
"type": "github" "type": "github"
} }
}, },
"vim-org-roam": { "ts-fold": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1765802816, "lastModified": 1695278494,
"narHash": "sha256-Zzq4JK3iFBVr8QmMmv5vm/R8QyYqmL44fRMZa15m7eo=", "narHash": "sha256-O4NcUC1u08W8ZslqoA/i+iTaLotKwheURXQWBxLLMFc=",
"owner": "chipsenkbeil", "owner": "jcs-elpa",
"repo": "org-roam.nvim", "repo": "ts-fold",
"rev": "74276a94e9e4af463e7ba35c22259eeced9c90f9", "rev": "70b2c79ff4daa7351d4e2917b0343b9a18d4d4f2",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "chipsenkbeil", "owner": "jcs-elpa",
"repo": "org-roam.nvim", "repo": "ts-fold",
"type": "github"
}
},
"ws-butler": {
"flake": false,
"locked": {
"lastModified": 1634511126,
"narHash": "sha256-c0y0ZPtxxICPk+eaNbbQf6t+FRCliNY54CCz9QHQ8ZI=",
"owner": "hlissner",
"repo": "ws-butler",
"rev": "572a10c11b6cb88293de48acbb59a059d36f9ba5",
"type": "github"
},
"original": {
"owner": "hlissner",
"repo": "ws-butler",
"type": "github" "type": "github"
} }
} }

View file

@ -1,78 +1,66 @@
{ {
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/master"; url = "github:nix-community/home-manager/release-24.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
emacs-overlay.url = "github:nix-community/emacs-overlay"; emacs-overlay.url = "github:nix-community/emacs-overlay";
vim-org-roam = { nix-doom-emacs.url = "github:nix-community/nix-doom-emacs";
url = "github:chipsenkbeil/org-roam.nvim"; gruvbox-gtk-theme = {
url = "github:Fausto-Korpsvart/Gruvbox-GTK-Theme";
flake = false;
};
gruvbox-kvantum-theme = {
url = "github:sachnr/gruvbox-kvantum-themes";
flake = false;
};
flameshot-git = {
url = "github:flameshot-org/flameshot";
flake = false; flake = false;
}; };
llm-agents.url = "github:numtide/llm-agents.nix";
# Workaround until nvim-treesitter main branch is used in nixpkgs
nvim-treesitter-main.url = "github:iofq/nvim-treesitter-main";
}; };
outputs = outputs = inputs@{ self, home-manager, nixpkgs, nixpkgs-unstable, ... }:
inputs@{
self,
nixpkgs,
...
}:
let let
inherit (lib.my) mapHosts; inherit (lib.my) mapModules mapModulesRec mkHost mapHosts;
system = "x86_64-linux"; system = "x86_64-linux";
mkPkgs = mkPkgs = pkgs: extraOverlays:
pkgs: extraOverlays:
import pkgs { import pkgs {
inherit system; inherit system;
config.allowUnfreePredicate = config.allowUnfreePredicate = pkg:
pkg:
builtins.elem (pkgs.lib.getName pkg) [ builtins.elem (pkgs.lib.getName pkg) [
"corefonts"
"steam" "steam"
"steam-original" "steam-original"
"steam-run" "steam-run"
"steam-unwrapped"
"keymapp"
"mongodb-compass"
"nvidia-x11"
"nvidia-settings"
"idea"
]; ];
overlays = overlays = extraOverlays ++ (pkgs.lib.attrValues self.overlays);
extraOverlays
++ (pkgs.lib.attrValues self.overlays)
++ [ inputs.nvim-treesitter-main.overlays.default ];
}; };
pkgs = mkPkgs nixpkgs [ self.overlay ];
pkgs-unstable = mkPkgs nixpkgs-unstable [ ];
pkgs = mkPkgs nixpkgs [ ]; lib = nixpkgs.lib.extend (self: super: {
my = import ./lib {
lib = nixpkgs.lib.extend ( inherit pkgs inputs;
self: super: { lib = self;
my = import ./lib { };
inherit pkgs inputs; });
lib = self; in {
};
}
);
in
{
lib = lib.my; lib = lib.my;
overlays = { overlay = final: prev: { unstable = pkgs-unstable; };
my = import ./overlay.nix;
}; overlays = { my = (import ./overlay.nix); };
nixosConfigurations = (mapHosts ./hosts { }) // { nixosConfigurations = (mapHosts ./hosts { }) // {
rpi3 = nixpkgs.lib.nixosSystem { rpi3 = nixpkgs.lib.nixosSystem {
system = "aarch64-linux"; system = "aarch64-linux";
specialArgs = { specialArgs = { inherit inputs; };
inherit inputs;
};
modules = [ ./hosts/rpi3/default.nix ]; modules = [ ./hosts/rpi3/default.nix ];
}; };
}; };

View file

@ -0,0 +1,46 @@
{ pkgs, config, lib, ... }: {
imports = [ ./hardware-configuration.nix ];
modules = {
desktop.hyprland.enable = true;
editor = {
vim.enable = true;
emacs.enable = true;
};
services = {
flatpak.enable = true;
belgian-eid.enable = true;
docker.enable = true;
libvirt.enable = true;
languagetool.enable = true;
};
media = {
mpd.enable = true;
ncmpcpp.enable = true;
};
};
# Monitor backlight control
programs.light.enable = true;
users.users.${config.user.name}.extraGroups = [ "video" ];
services.tlp.enable = true;
home-manager.users.${config.user.name} = { pkgs, config, ... }: {
services.network-manager-applet.enable = true;
services.blueman-applet.enable = true;
wayland.windowManager.hyprland.settings = {
dwindle.no_gaps_when_only = 1;
};
};
services.pipewire.wireplumber.extraConfig = {
"monitor.bluez.properties" = {
"bluez5.enable-sbc-xq" = true;
"bluez5.enable-msbc" = true;
"bluez5.enable-hw-volume" = true;
"bluez5.roles" = [ "hsp_hs" "hsp_ag" "hfp_hf" "hfp_ag" ];
};
};
system.stateVersion = "21.05";
}

View file

@ -0,0 +1,50 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot = {
initrd.availableKernelModules = [ "nvme" "xhci_pci" "sdhci_pci" ];
initrd.kernelModules = [ "dm-snapshot" ];
kernelModules = [ "kvm-amd" ];
# Required, otherwise the kernel freezes on boot
kernelParams = [ "amd_iommu=on" "iommu=pt" "pci=noats" ];
extraModulePackages = [ ];
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = true;
initrd.luks.devices."crypted".device =
"/dev/disk/by-uuid/1e900b2e-daea-4558-b18f-3d3a5843de61";
};
hardware.cpu.amd.updateMicrocode = true;
fileSystems."/" = {
device = "/dev/disk/by-uuid/a8abad9b-5615-4887-8431-3d80b78d073e";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/077C-758A";
fsType = "vfat";
};
swapDevices =
[{ device = "/dev/disk/by-uuid/bb8fa9ef-9b8f-413d-913a-6c891649a954"; }];
zramSwap.enable = true;
hardware = {
bluetooth = {
enable = true;
# Enable A2DP Sink
settings = { General = { Enable = "Source,Sink,Media,Socket"; }; };
};
};
networking.networkmanager.enable = true;
services.blueman.enable = true;
services.logind.lidSwitch = "ignore";
}

View file

@ -1,9 +1,8 @@
{ pkgs, config, ... }: { pkgs, config, lib, ... }: {
{
imports = [ ./hardware-configuration.nix ]; imports = [ ./hardware-configuration.nix ];
modules = { modules = {
desktop.wm.enable = true; desktop.hyprland.enable = true;
editor = { editor = {
vim.enable = true; vim.enable = true;
emacs.enable = true; emacs.enable = true;
@ -14,7 +13,6 @@
docker.enable = true; docker.enable = true;
libvirt.enable = true; libvirt.enable = true;
languagetool.enable = true; languagetool.enable = true;
work-proxy.enable = true;
}; };
media = { media = {
mpd.enable = true; mpd.enable = true;
@ -23,67 +21,14 @@
steam.enable = true; steam.enable = true;
lutris.enable = true; lutris.enable = true;
}; };
ai.opencode.enable = true;
}; };
user.name = "froidmpa";
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
# nix = {
# distributedBuilds = true;
# buildMachines = [
# {
# hostName = "hel1.banditlair.com";
# sshUser = "nix-ssh";
# system = "x86_64-linux";
# supportedFeatures = [
# "nixos-test"
# "benchmark"
# "big-parallel"
# "kvm"
# ];
# }
# ];
# settings = {
# builders-use-substitutes = true;
# };
# };
services.tailscale.enable = true;
services.openssh = {
enable = true;
settings.PasswordAuthentication = false;
listenAddresses = [
{
# Tailscale interface
addr = "100.64.0.3";
port = 22;
}
];
};
users.users.${config.user.name} = {
openssh.authorizedKeys.keyFiles = [
../../ssh_keys/phfroidmont-desktop.pub
../../ssh_keys/phfroidmont-stellaris.pub
];
};
# Allow to externally control MPD # Allow to externally control MPD
networking.firewall.allowedTCPPorts = [ 6600 ]; networking.firewall.allowedTCPPorts = [ 6600 ];
home-manager.users.${config.user.name} =
{ ... }:
{
wayland.windowManager.hyprland.settings = {
monitor = [
"DP-1, 4096x2160@240, 0x0, 1.5"
];
};
};
system.stateVersion = "20.09"; system.stateVersion = "20.09";
} }

View file

@ -1,73 +1,61 @@
{ { config, lib, pkgs, modulesPath, ... }: {
lib,
pkgs,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot = { boot = {
kernelPackages = pkgs.linuxPackages_zen; initrd.availableKernelModules =
initrd.availableKernelModules = [ [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ];
"nvme"
"xhci_pci"
"ahci"
"usbhid"
"sd_mod"
];
initrd.kernelModules = [ "amdgpu" ]; initrd.kernelModules = [ "amdgpu" ];
kernelParams = [
"amdgpu.noretry=0" # Prevents constant crashing in BG3
];
kernelModules = [ "kvm-amd" ]; kernelModules = [ "kvm-amd" ];
extraModulePackages = [ ]; extraModulePackages = [ ];
loader.systemd-boot.enable = true; loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = true; loader.efi.canTouchEfiVariables = true;
}; };
fileSystems = { fileSystems."/" = {
"/" = { device = "/dev/disk/by-uuid/f1e21558-88e6-413e-b56a-04e0b25e9ddd";
device = "/dev/disk/by-uuid/f1e21558-88e6-413e-b56a-04e0b25e9ddd"; fsType = "ext4";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/CCD1-0415";
fsType = "vfat";
};
"/home/froidmpa/Nextcloud" = {
device = "/dev/disk/by-uuid/a4ba8b21-ea33-4487-b6f6-9bb7470a0acb";
fsType = "ext4";
};
"/home/froidmpa/Backup" = {
device = "/dev/disk/by-uuid/7fdc4e44-ecb4-49c7-9fb0-cb1ef6235b05";
fsType = "ext4";
};
}; };
swapDevices = [ { device = "/dev/disk/by-uuid/f714775c-b5af-4c0c-8330-999b43db4794"; } ]; fileSystems."/boot" = {
device = "/dev/disk/by-uuid/CCD1-0415";
powerManagement = { fsType = "vfat";
cpuFreqGovernor = "performance";
powertop.enable = true;
}; };
fileSystems."/home/froidmpa/Nextcloud" = {
device = "/dev/disk/by-uuid/a4ba8b21-ea33-4487-b6f6-9bb7470a0acb";
fsType = "ext4";
};
fileSystems."/home/froidmpa/Backup" = {
device = "/dev/disk/by-uuid/7fdc4e44-ecb4-49c7-9fb0-cb1ef6235b05";
fsType = "ext4";
};
swapDevices =
[{ device = "/dev/disk/by-uuid/f714775c-b5af-4c0c-8330-999b43db4794"; }];
zramSwap.enable = true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
nix.settings.max-jobs = lib.mkDefault 16; nix.settings.max-jobs = lib.mkDefault 16;
networking.useNetworkd = true; networking.useNetworkd = true;
networking.interfaces.enp31s0.useDHCP = true; networking.interfaces.enp31s0.useDHCP = true;
hardware.graphics = { hardware.opengl = {
enable = true; enable = true;
enable32Bit = true; driSupport = true;
extraPackages = with pkgs; [ driSupport32Bit = true;
rocmPackages.clr extraPackages = with pkgs; [ rocm-opencl-icd rocm-opencl-runtime amdvlk ];
];
}; };
hardware.cpu.amd.updateMicrocode = true; hardware.cpu.amd.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
services.resolved.dnssec = "false"; services.resolved.dnssec = "false";
} }

View file

@ -1,33 +1,28 @@
{ inputs, pkgs, ... }: { inputs, pkgs, ... }: {
{
nix = { nix = {
registry.nixpkgs.flake = inputs.nixpkgs; registry.nixpkgs.flake = inputs.nixpkgs;
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ]; nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
}; };
boot = { boot.loader.grub.enable = false;
loader.grub.enable = false; boot.loader.generic-extlinux-compatible.enable = true;
loader.generic-extlinux-compatible.enable = true; boot.kernelParams = [ "cma=256M" ];
kernelParams = [ "cma=256M" ];
};
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-label/NIXOS_SD"; device = "/dev/disk/by-label/NIXOS_SD";
fsType = "ext4"; fsType = "ext4";
}; };
swapDevices = [ swapDevices = [{
{ device = "/swapfile";
device = "/swapfile"; size = 1024;
size = 1024; }];
}
];
services.openssh.enable = true; services.openssh.enable = true;
users.users.root.openssh.authorizedKeys.keyFiles = [ users.users.root.openssh.authorizedKeys.keyFiles = [
../../ssh_keys/phfroidmont-desktop.pub ../../ssh_keys/phfroidmont-desktop.pub
../../ssh_keys/phfroidmont-stellaris.pub ../../ssh_keys/phfroidmont-laptop.pub
]; ];
services.adguardhome = { services.adguardhome = {
@ -38,20 +33,15 @@
mutableSettings = false; mutableSettings = false;
settings = { settings = {
http = { http = { address = "0.0.0.0:80"; };
address = "0.0.0.0:80";
};
auth_attempts = 5; auth_attempts = 5;
block_auth_min = 15; block_auth_min = 15;
dns = { dns = {
bind_hosts = [ "0.0.0.0" ]; bind_hosts = [ "0.0.0.0" ];
port = 53; port = 53;
statistics_interval = 90; statistics_interval = 90;
upstream_dns = [ upstream_dns =
"tls://doh.mullvad.net" [ "tls://doh.mullvad.net" "[/lan/]192.168.1.1" "[//]192.168.1.1" ];
"[/lan/]192.168.1.1"
"[//]192.168.1.1"
];
local_ptr_upstreams = [ "192.168.1.1" ]; local_ptr_upstreams = [ "192.168.1.1" ];
use_private_ptr_resolvers = true; use_private_ptr_resolvers = true;
resolve_clients = true; resolve_clients = true;
@ -74,19 +64,11 @@
}; };
}; };
networking = { networking.hostName = "rpi3";
hostName = "rpi3"; networking.firewall.allowedTCPPorts = [ 53 80 ];
firewall.allowedTCPPorts = [ networking.firewall.allowedUDPPorts = [ 53 ];
53
80
];
firewall.allowedUDPPorts = [ 53 ];
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [ vim htop-vim ];
vim
htop-vim
];
system.stateVersion = "22.05"; system.stateVersion = "22.05";
} }

View file

@ -1,124 +0,0 @@
{ config, ... }:
{
imports = [ ./hardware-configuration.nix ];
modules = {
desktop = {
wm.enable = true;
defaultBrowser = "brave";
};
editor = {
vim.enable = true;
emacs.enable = true;
};
services = {
flatpak.enable = true;
belgian-eid.enable = true;
docker.enable = true;
libvirt.enable = true;
languagetool.enable = true;
work-proxy.enable = true;
kanata.enable = true;
};
media = {
mpd.enable = true;
ncmpcpp.enable = true;
emulators.gc.enable = true;
steam.enable = true;
lutris.enable = true;
};
ai.opencode.enable = true;
};
# Monitor backlight control
programs.light.enable = true;
services.tlp.enable = true;
hardware.cpu.amd.updateMicrocode = true;
hardware.tuxedo-drivers.enable = true;
hardware.tuxedo-rs = {
enable = true;
tailor-gui.enable = true;
};
hardware = {
bluetooth = {
enable = true;
# Enable A2DP Sink
settings = {
General = {
Enable = "Source,Sink,Media,Socket";
};
};
};
};
networking.networkmanager.enable = true;
services.blueman.enable = true;
services.logind.settings.Login.HandleLidSwitch = "ignore";
user.name = "phfroidmont";
home-manager.users.${config.user.name} =
{ ... }:
{
services.network-manager-applet.enable = true;
services.blueman-applet.enable = true;
wayland.windowManager.hyprland.settings = {
env = [
"LIBVA_DRIVER_NAME,nvidia"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
];
workspace = [
"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
windowrulev2 = [
"bordersize 0, floating:0, onworkspace:w[tv1]"
"rounding 0, floating:0, onworkspace:w[tv1]"
"bordersize 0, floating:0, onworkspace:f[1]"
"rounding 0, floating:0, onworkspace:f[1]"
];
};
};
services.pipewire.wireplumber.extraConfig = {
"monitor.bluez.properties" = {
"bluez5.enable-sbc-xq" = true;
"bluez5.enable-msbc" = true;
"bluez5.enable-hw-volume" = true;
"bluez5.roles" = [
"hsp_hs"
"hsp_ag"
"hfp_hf"
"hfp_ag"
];
};
};
services.tailscale.enable = true;
services.openssh = {
enable = true;
settings.PasswordAuthentication = false;
listenAddresses = [
{
# Tailscale interface
addr = "100.64.0.5";
port = 22;
}
];
};
users.users.${config.user.name} = {
openssh.authorizedKeys.keyFiles = [
../../ssh_keys/phfroidmont-desktop.pub
];
extraGroups = [ "video" ];
};
system.stateVersion = "25.05";
}

View file

@ -1,79 +0,0 @@
{ ... }:
{
disko.devices = {
disk.main = {
type = "disk";
# Replace with your device, e.g. /dev/disk/by-id/nvme-Samsung_SSD_980_...
device = "/dev/disk/by-id/nvme-Samsung_SSD_9100_PRO_2TB_S7YFNJ0Y612225D";
content = {
type = "gpt";
partitions = {
ESP = {
type = "ef00";
size = "512M";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "cryptroot";
settings = {
allowDiscards = true;
};
content = {
type = "btrfs";
extraArgs = [
"-L"
"nixos"
];
# Top-level btrfs mountpoint isn't used; subvols below define mounts
subvolumes = {
"@".mountpoint = "/";
"@home".mountpoint = "/home";
"@nix".mountpoint = "/nix";
"@log".mountpoint = "/var/log";
"@cache".mountpoint = "/var/cache";
# Common, fast, SSD-friendly defaults
"@".mountOptions = [
"compress=zstd"
"noatime"
"ssd"
"autodefrag"
];
"@home".mountOptions = [
"compress=zstd"
"noatime"
"ssd"
"autodefrag"
];
"@nix".mountOptions = [
"compress=zstd"
"noatime"
"ssd"
];
"@log".mountOptions = [
"compress=zstd"
"noatime"
"ssd"
];
"@cache".mountOptions = [
"compress=zstd"
"noatime"
"ssd"
];
};
};
};
};
};
};
};
};
}

View file

@ -1,92 +0,0 @@
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.kernelPackages = pkgs.linuxPackages_zen;
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"usb_storage"
"sd_mod"
"sdhci_pci"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
fileSystems."/" = {
device = "/dev/disk/by-uuid/60093dc5-7e4f-479d-8e6b-d4f5fedcb01f";
fsType = "btrfs";
options = [ "subvol=@" ];
};
boot.initrd.luks.devices."cryptroot".device =
"/dev/disk/by-uuid/46f38e24-f03e-4e3b-9266-652340e1fa41";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/4847-A536";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/60093dc5-7e4f-479d-8e6b-d4f5fedcb01f";
fsType = "btrfs";
options = [ "subvol=@home" ];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/60093dc5-7e4f-479d-8e6b-d4f5fedcb01f";
fsType = "btrfs";
options = [ "subvol=@nix" ];
};
fileSystems."/var/cache" = {
device = "/dev/disk/by-uuid/60093dc5-7e4f-479d-8e6b-d4f5fedcb01f";
fsType = "btrfs";
options = [ "subvol=@cache" ];
};
fileSystems."/var/log" = {
device = "/dev/disk/by-uuid/60093dc5-7e4f-479d-8e6b-d4f5fedcb01f";
fsType = "btrfs";
options = [ "subvol=@log" ];
};
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = true;
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = {
offload = {
enable = true;
enableOffloadCmd = true;
};
amdgpuBusId = "PCI:6:0:0";
nvidiaBusId = "PCI:1:0:0";
};
};
}

View file

@ -1,22 +1,26 @@
{ lib, ... }: { lib, ... }:
with builtins;
with lib;
rec { rec {
# attrsToList # attrsToList
attrsToList = attrs: lib.mapAttrsToList (name: value: { inherit name value; }) attrs; attrsToList = attrs:
mapAttrsToList (name: value: { inherit name value; }) attrs;
# mapFilterAttrs :: # mapFilterAttrs ::
# (name -> value -> bool) # (name -> value -> bool)
# (name -> value -> { name = any; value = any; }) # (name -> value -> { name = any; value = any; })
# attrs # attrs
mapFilterAttrs = mapFilterAttrs = pred: f: attrs: filterAttrs pred (mapAttrs' f attrs);
pred: f: attrs:
lib.filterAttrs pred (lib.mapAttrs' f attrs);
# Generate an attribute set by mapping a function over a list of values. # Generate an attribute set by mapping a function over a list of values.
genAttrs' = values: f: lib.listToAttrs (map f values); genAttrs' = values: f: listToAttrs (map f values);
# anyAttrs :: (name -> value -> bool) attrs # anyAttrs :: (name -> value -> bool) attrs
anyAttrs = pred: attrs: lib.any (attr: pred attr.name attr.value) (attrsToList attrs); anyAttrs = pred: attrs:
any (attr: pred attr.name attr.value) (attrsToList attrs);
# countAttrs :: (name -> value -> bool) attrs # countAttrs :: (name -> value -> bool) attrs
countAttrs = pred: attrs: lib.count (attr: pred attr.name attr.value) (attrsToList attrs); countAttrs = pred: attrs:
count (attr: pred attr.name attr.value) (attrsToList attrs);
} }

View file

@ -1,9 +1,4 @@
{ { inputs, lib, pkgs, ... }:
inputs,
lib,
pkgs,
...
}:
let let
inherit (lib) makeExtensible attrValues foldr; inherit (lib) makeExtensible attrValues foldr;
@ -11,25 +6,13 @@ let
modules = import ./modules.nix { modules = import ./modules.nix {
inherit lib; inherit lib;
self.attrs = import ./attrs.nix { self.attrs = import ./attrs.nix { inherit lib; self = { }; };
inherit lib;
self = { };
};
}; };
mylib = makeExtensible ( mylib = makeExtensible (self:
self: with self; mapModules ./.
mapModules ./. ( (file: import file { inherit self lib pkgs inputs; }));
file:
import file {
inherit
self
lib
pkgs
inputs
;
}
)
);
in in
mylib.extend (self: super: foldr (a: b: a // b) { } (attrValues super)) mylib.extend
(self: super:
foldr (a: b: a // b) { } (attrValues super))

View file

@ -1,62 +1,52 @@
{ self, lib, ... }: { self, lib, ... }:
let let
inherit (builtins) inherit (builtins) attrValues readDir pathExists concatLists;
attrValues inherit (lib) id mapAttrsToList filterAttrs hasPrefix hasSuffix nameValuePair removeSuffix;
readDir
pathExists
concatLists
;
inherit (lib)
id
mapAttrsToList
filterAttrs
hasPrefix
hasSuffix
nameValuePair
removeSuffix
;
inherit (self.attrs) mapFilterAttrs; inherit (self.attrs) mapFilterAttrs;
in in
rec { rec {
mapModules = mapModules = dir: fn:
dir: fn: mapFilterAttrs
mapFilterAttrs (n: v: v != null && !(hasPrefix "_" n)) ( (n: v:
n: v: v != null &&
let !(hasPrefix "_" n))
path = "${toString dir}/${n}"; (n: v:
in let path = "${toString dir}/${n}"; in
if v == "directory" && pathExists "${path}/default.nix" then if v == "directory" && pathExists "${path}/default.nix"
nameValuePair n (fn path) then nameValuePair n (fn path)
else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n then else if v == "regular" &&
nameValuePair (removeSuffix ".nix" n) (fn path) n != "default.nix" &&
else hasSuffix ".nix" n
nameValuePair "" null then nameValuePair (removeSuffix ".nix" n) (fn path)
) (readDir dir); else nameValuePair "" null)
(readDir dir);
mapModules' = dir: fn: attrValues (mapModules dir fn); mapModules' = dir: fn:
attrValues (mapModules dir fn);
mapModulesRec = mapModulesRec = dir: fn:
dir: fn: mapFilterAttrs
mapFilterAttrs (n: v: v != null && !(hasPrefix "_" n)) ( (n: v:
n: v: v != null &&
let !(hasPrefix "_" n))
path = "${toString dir}/${n}"; (n: v:
in let path = "${toString dir}/${n}"; in
if v == "directory" then if v == "directory"
nameValuePair n (mapModulesRec path fn) then nameValuePair n (mapModulesRec path fn)
else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n then else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n
nameValuePair (removeSuffix ".nix" n) (fn path) then nameValuePair (removeSuffix ".nix" n) (fn path)
else else nameValuePair "" null)
nameValuePair "" null (readDir dir);
) (readDir dir);
mapModulesRec' = mapModulesRec' = dir: fn:
dir: fn:
let let
dirs = mapAttrsToList (k: _: "${dir}/${k}") ( dirs =
filterAttrs (n: v: v == "directory" && !(hasPrefix "_" n)) (readDir dir) mapAttrsToList
); (k: _: "${dir}/${k}")
(filterAttrs
(n: v: v == "directory" && !(hasPrefix "_" n))
(readDir dir));
files = attrValues (mapModules dir id); files = attrValues (mapModules dir id);
paths = files ++ concatLists (map (d: mapModulesRec' d id) dirs); paths = files ++ concatLists (map (d: mapModulesRec' d id) dirs);
in in

View file

@ -1,42 +1,26 @@
{ { inputs, lib, pkgs, ... }:
inputs,
lib,
pkgs,
...
}:
let with lib;
sys = "x86_64-linux"; with lib.my;
in let sys = "x86_64-linux";
rec { in {
mkHost = mkHost = path: attrs @ { system ? sys, ... }:
path: nixosSystem {
attrs@{
system ? sys,
...
}:
lib.nixosSystem {
inherit system; inherit system;
specialArgs = { specialArgs = { inherit lib inputs system; };
inherit lib inputs system;
};
modules = [ modules = [
{ {
nixpkgs.pkgs = pkgs; nixpkgs.pkgs = pkgs;
nix.registry.nixpkgs.flake = inputs.nixpkgs; nix.registry.nixpkgs.flake = inputs.nixpkgs;
networking.hostName = lib.mkDefault (lib.removeSuffix ".nix" (baseNameOf path)); networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf path));
} }
(lib.filterAttrs (n: v: !lib.elem n [ "system" ]) attrs) (filterAttrs (n: v: !elem n [ "system" ]) attrs)
../common.nix ../common.nix
(import path) (import path)
]; ];
}; };
mapHosts = mapHosts = dir: attrs @ { system ? system, ... }:
dir: mapModules dir
attrs@{ (hostPath: mkHost hostPath attrs);
system ? system,
...
}:
lib.my.mapModules dir (hostPath: mkHost hostPath attrs);
} }

View file

@ -3,18 +3,16 @@
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
in in
{ rec {
mkOpt = type: default: mkOption { inherit type default; }; mkOpt = type: default:
mkOption { inherit type default; };
mkOpt' = mkOpt' = type: default: description:
type: default: description:
mkOption { inherit type default description; }; mkOption { inherit type default description; };
mkBoolOpt = mkBoolOpt = default: mkOption {
default: inherit default;
mkOption { type = types.bool;
inherit default; example = true;
type = types.bool; };
example = true;
};
} }

View file

@ -1,93 +0,0 @@
{
inputs,
config,
lib,
pkgs,
...
}:
let
cfg = config.modules.ai.opencode;
in
{
options.modules.ai.opencode = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} =
{ ... }:
{
programs.opencode = {
enable = true;
package = inputs.llm-agents.packages.${pkgs.system}.opencode;
settings = {
model = "glm_4_5_air";
permission = {
bash = "ask";
edit = "ask";
};
provider = {
vllm = {
npm = "@ai-sdk/openai-compatible";
name = "vLLM";
options = {
baseURL = "http://model1.lefoyer.lu:8030/v1";
apiKey = "dummy";
};
models = {
glm_4_5_air = {
name = "GLM 4.5 Air (local)";
temperature = true;
default = true;
};
};
};
openai = {
models = {
"gpt-5.1-codex" = {
options = {
store = false;
# reasoningEffort = "high";
# textVerbosity = "medium";
# reasoningSummary = "auto";
include = [ "reasoning.encrypted_content" ];
};
};
"gpt-5.1-codex-max" = {
options = {
store = false;
include = [ "reasoning.encrypted_content" ];
};
};
};
};
};
agent = {
build = {
mode = "primary";
temperature = 0.4;
};
plan = {
mode = "primary";
temperature = 0.4;
};
};
lsp = {
metals = {
command = [ "${pkgs.metals}/bin/metals" ];
extensions = [
".scala"
".sbt"
".sc"
];
initialization = {
statusBarProvider = "log-message";
doctorProvider = "json";
};
};
};
};
};
};
};
}

View file

@ -1,53 +0,0 @@
{
config,
lib,
...
}:
let
cfg = config.modules.apps.newsboat;
in
{
options.modules.apps.newsboat = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} = {
programs.newsboat = {
enable = true;
autoFetchArticles = {
enable = true;
onCalendar = "hourly";
};
extraConfig = ''
urls-source "ocnews"
ocnews-url "https://cloud.banditlair.com"
ocnews-login "paultrial"
ocnews-passwordeval "secret-tool lookup elfeed nextcloud"
cleanup-on-quit yes
bind gg everywhere home
bind G everywhere end
bind u everywhere toggle-article-read
bind , everywhere sort
bind ^u everywhere pageup
bind ^d everywhere pagedown
bind k everywhere up
bind j everywhere down
bind l feedlist open
bind l articlelist open
bind h articlelist quit
bind h article quit
'';
};
};
};
}

View file

@ -1,24 +1,17 @@
{ { inputs, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.apps.rofi; with lib.my;
in let cfg = config.modules.apps.rofi;
{ in {
options.modules.apps.rofi = { options.modules.apps.rofi = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
programs.rofi = { programs.rofi = {
enable = true; enable = true;
package = pkgs.rofi.override { plugins = [ pkgs.rofi-calc ]; }; package = pkgs.rofi-wayland.override { plugins = [ pkgs.rofi-calc ]; };
terminal = "kitty"; terminal = "kitty";
extraConfig = { extraConfig = {
icon-theme = "Paper"; icon-theme = "Paper";
@ -38,10 +31,7 @@ in
}; };
theme = ./theme.rasi; theme = ./theme.rasi;
}; };
home.packages = with pkgs; [ home.packages = with pkgs.unstable; [ paper-icon-theme rofi-power-menu ];
paper-icon-theme
rofi-power-menu
];
}; };
}; };
} }

View file

@ -1,54 +1,35 @@
{ { inputs, config, options, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
with lib;
with lib.my;
let let
cfg = config.modules.desktop;
wallpaper = pkgs.fetchurl { wallpaper = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/AngelJumbo/gruvbox-wallpapers/main/wallpapers/photography/houseonthesideofalake.jpg"; url =
"https://raw.githubusercontent.com/AngelJumbo/gruvbox-wallpapers/main/wallpapers/irl/houseonthesideofalake.jpg";
sha256 = "sha256-obKI4qZvucogqRCl51lwV9X8SRaMqcbBwWMfc9TupIo="; sha256 = "sha256-obKI4qZvucogqRCl51lwV9X8SRaMqcbBwWMfc9TupIo=";
}; };
in in {
{
options.modules.desktop = { options.modules.desktop = {
wallpaper = lib.mkOption { wallpaper = mkOption {
type = lib.types.path; type = types.path;
default = wallpaper; default = wallpaper;
}; };
defaultBrowser = lib.mkOption {
type = lib.types.str;
default = "firefox";
};
}; };
config = lib.mkIf config.modules.desktop.wm.enable { config = mkIf config.modules.desktop.hyprland.enable {
fonts = { fonts = {
enableDefaultPackages = true; packages = with pkgs.unstable; [
packages = with pkgs; [ corefonts # Microsoft free fonts
noto-fonts-color-emoji noto-fonts-emoji
meslo-lg meslo-lg
pkgs.nerd-fonts.meslo-lg (nerdfonts.override { fonts = [ "Meslo" "NerdFontsSymbolsOnly" ]; })
pkgs.nerd-fonts.symbols-only
]; ];
fontconfig.defaultFonts = { fontconfig.defaultFonts = { monospace = [ "MesloLGS Nerd Font Mono" ]; };
monospace = [ "MesloLGS Nerd Font Mono" ];
};
}; };
security.pam.loginLimits = [
{
domain = "*";
item = "nofile";
type = "-";
value = "65536";
}
];
programs.adb.enable = true; programs.adb.enable = true;
programs.ssh.startAgent = true; programs.ssh.startAgent = true;
@ -63,7 +44,7 @@ in
gpg-agent = { gpg-agent = {
enable = true; enable = true;
enableSshSupport = false; enableSshSupport = false;
pinentry.package = pkgs.pinentry-gtk2; pinentryPackage = pkgs.pinentry-gtk2;
}; };
unclutter.enable = true; unclutter.enable = true;
}; };
@ -72,31 +53,16 @@ in
gpg.enable = true; gpg.enable = true;
git = { git = {
enable = true; enable = true;
userName = "Paul-Henri Froidmont";
userEmail = "git.contact-57n2p@froidmont.org";
signing = { signing = {
key = lib.mkDefault "3AC6F170F01133CE393BCD94BE948AFD7E7873BE"; key = lib.mkDefault "3AC6F170F01133CE393BCD94BE948AFD7E7873BE";
signByDefault = true; signByDefault = true;
}; };
settings = { extraConfig = { init.defaultBranch = "master"; };
user.name = "Paul-Henri Froidmont";
user.email = "git.contact-57n2p@froidmont.org";
init.defaultBranch = "master";
};
}; };
ssh = { ssh = {
enable = true; enable = true;
enableDefaultConfig = false;
matchBlocks."*" = {
forwardAgent = false;
addKeysToAgent = "no";
compression = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = "no";
};
extraConfig = '' extraConfig = ''
# Force IPv4 otherwise git will try to use IPv6 which doesn't play well through a VPN # Force IPv4 otherwise git will try to use IPv6 which doesn't play well through a VPN
AddressFamily inet AddressFamily inet
@ -137,10 +103,10 @@ in
defaultApplications = { defaultApplications = {
"inode/directory" = "joshuto.desktop"; "inode/directory" = "joshuto.desktop";
"text/html" = "${config.modules.desktop.defaultBrowser}.desktop"; "text/html" = "firefox.desktop";
"x-scheme-handler/http" = "${config.modules.desktop.defaultBrowser}.desktop"; "x-scheme-handler/http" = "firefox.desktop";
"x-scheme-handler/https" = "${config.modules.desktop.defaultBrowser}.desktop"; "x-scheme-handler/https" = "firefox.desktop";
"x-scheme-handler/about" = "${config.modules.desktop.defaultBrowser}.desktop"; "x-scheme-handler/about" = "firefox.desktop";
"image/png" = "swayimg.desktop"; "image/png" = "swayimg.desktop";
"image/webp" = "swayimg.desktop"; "image/webp" = "swayimg.desktop";
@ -159,7 +125,8 @@ in
"application/msword" = "onlyoffice-desktopeditors.desktop"; "application/msword" = "onlyoffice-desktopeditors.desktop";
"application/vnd.openxmlformats-officedocument.presentationml.presentation" = "application/vnd.openxmlformats-officedocument.presentationml.presentation" =
"onlyoffice-desktopeditors.desktop"; "onlyoffice-desktopeditors.desktop";
"application/vnd.openxmlformats-officedocument*" = "onlyoffice-desktopeditors.desktop"; "application/vnd.openxmlformats-officedocument*" =
"onlyoffice-desktopeditors.desktop";
"text/*" = "nvim.desktop"; "text/*" = "nvim.desktop";
}; };
@ -172,52 +139,41 @@ in
options = [ "caps:escape" ]; options = [ "caps:escape" ];
}; };
sessionVariables = { sessionVariables.EDITOR = "vim";
EDITOR = "vim";
NIXOS_OZONE_WL = 1;
};
packages = packages = with pkgs.unstable; [
(with pkgs; [ brave
brave ungoogled-chromium
ungoogled-chromium mullvad-browser
mullvad-browser keepassxc
keepassxc krita
krita element-desktop
swayimg swayimg
mpv mpv
mumble jellyfin-mpv-shim
libreoffice-fresh mumble
signal-desktop libreoffice-fresh
onlyoffice-desktopeditors onlyoffice-bin
thunderbird thunderbird
portfolio portfolio
gnucash gnucash
transmission-remote-gtk transmission-remote-gtk
monero-gui
scala-cli scala-cli
beamMinimal27Packages.elixir jdk
jdk jetbrains.idea-community
jetbrains.idea-oss httpie
jetbrains.idea
httpie
zsh-syntax-highlighting zsh-syntax-highlighting
R R
tldr tldr
kdePackages.ark thefuck
perf ark
keymapp linuxPackages.perf
presenterm ];
ledger-live-desktop
monero-gui
])
++ [ pkgs.jellyfin-mpv-shim ];
}; };
}; };
hardware.keyboard.zsa.enable = true;
hardware.ledger.enable = true;
}; };
} }

View file

@ -1,18 +1,11 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.desktop.dunst; with lib.my;
in let cfg = config.modules.desktop.dunst;
{ in {
options.modules.desktop.dunst = { options.modules.desktop.dunst = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false; config = mkIf cfg.enable {
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
services.dunst = { services.dunst = {
enable = true; enable = true;

View file

@ -1,23 +1,15 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.desktop.file-manager; with lib.my;
in let cfg = config.modules.desktop.file-manager;
{ in {
options.modules.desktop.file-manager = { options.modules.desktop.file-manager = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false; config = mkIf cfg.enable {
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
programs.yazi = { programs.yazi = {
enable = true; enable = true;
package = pkgs.yazi;
enableZshIntegration = true; enableZshIntegration = true;
settings = { settings = {
manager = { manager = {
@ -47,13 +39,11 @@ in
desc = "Copy files to clipboard"; desc = "Copy files to clipboard";
} }
]; ];
input.prepend_keymap = [ input.prepend_keymap = [{
{ on = [ "<Esc>" ];
on = [ "<Esc>" ]; run = "close";
run = "close"; desc = "Cancel input";
desc = "Cancel input"; }];
}
];
}; };
theme = { theme = {
status = { status = {
@ -73,7 +63,7 @@ in
}; };
home = { home = {
packages = with pkgs; [ packages = with pkgs.unstable; [
ffmpegthumbnailer ffmpegthumbnailer
unar unar
poppler poppler

View file

@ -0,0 +1,34 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.flameshot;
in {
options.modules.desktop.flameshot = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
home-manager.users.${config.user.name} = { config, ... }: {
services.flameshot = {
enable = true;
package = pkgs.flameshot.overrideAttrs (old: {
src = inputs.flameshot-git;
cmakeFlags = [ "-DUSE_WAYLAND_GRIM=1" ];
});
settings = {
General = {
showStartupLaunchMessage = false;
disabledTrayIcon = true;
showHelp = false;
showDesktopNotification = false;
filenamePattern = "%F_%T";
savePath = "${config.home.homeDirectory}/Pictures/Screenshots";
savePathFixed = true;
saveAfterCopy = true;
uiColor = "#83A598";
};
};
};
home.packages = with pkgs.unstable; [ grim ];
};
};
}

View file

@ -1,61 +1,45 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.desktop.htop; with lib.my;
in let cfg = config.modules.desktop.htop;
{ in {
options.modules.desktop.htop = { options.modules.desktop.htop = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false; config = mkIf cfg.enable {
}; home-manager.users.${config.user.name} = { config, ... }: {
config = lib.mkIf cfg.enable { programs.htop = {
home-manager.users.${config.user.name} = enable = true;
{ config, ... }: package = pkgs.htop-vim;
{ settings = {
programs.htop = { hide_userland_threads = true;
enable = true; highlight_base_name = true;
package = pkgs.htop-vim; vim_mode = true;
settings = fields = with config.lib.htop.fields; [
{ PID
hide_userland_threads = true; USER
highlight_base_name = true; M_RESIDENT
vim_mode = true; M_SHARE
fields = with config.lib.htop.fields; [ STATE
PID PERCENT_CPU
USER PERCENT_MEM
M_RESIDENT IO_RATE
M_SHARE TIME
STATE COMM
PERCENT_CPU ];
PERCENT_MEM } // (with config.lib.htop;
IO_RATE leftMeters [
TIME (bar "LeftCPUs2")
COMM (bar "CPU")
]; (bar "Memory")
} (bar "Swap")
// ( ]) // (with config.lib.htop;
with config.lib.htop; rightMeters [
leftMeters [ (bar "RightCPUs2")
(bar "LeftCPUs2") (text "Tasks")
(bar "CPU") (text "LoadAverage")
(bar "Memory") (text "Uptime")
(bar "Swap") ]);
]
)
// (
with config.lib.htop;
rightMeters [
(bar "RightCPUs2")
(text "Tasks")
(text "LoadAverage")
(text "Uptime")
]
);
};
}; };
};
}; };
} }

View file

@ -0,0 +1,464 @@
{ options, config, lib, pkgs, ... }:
with lib;
with lib.my;
let
cfg = config.modules.desktop.hyprland;
term = "${
config.home-manager.users.${config.user.name}.programs.kitty.package
}/bin/kitty";
in
{
options.modules.desktop.hyprland = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
modules = {
desktop = {
themes = {
gtk.enable = true;
qt.enable = true;
};
terminal.enable = true;
file-manager.enable = true;
zsh.enable = true;
vscode.enable = true;
dunst.enable = true;
htop.enable = true;
flameshot.enable = true;
};
hardware = { audio.enable = true; };
apps.rofi.enable = true;
};
home-manager.users.${config.user.name} = {
wayland.windowManager.sway = {
enable = true;
systemd.enable = true;
xwayland = true;
config = {
modifier = "Mod4";
input = {
"type:keyboard" = {
"xkb_layout" = "fr";
"xkb_variant" = "nodeadkeys";
"xkb_options" = "caps:escape";
"xkb_numlock" = "enabled";
};
};
keybindings = {
"mod4+Return" = "exec ${term}";
"mod4+c" = "kill";
"mod4+Shift+r" = "reload";
"mod4+Shift+c" = "exit";
"mod4+Shift+a" = "exec ${term} -e pulsemixer";
"mod4+w" = "exec firefox";
"mod4+r" = "exec ${term} -e yazi";
"mod4+e" = "exec emacsclient -c";
"mod4+n" = "exec emacsclient -c --eval '(elfeed)'";
"mod4+i" = "exec ${term} -e htop";
"mod4+m" = "exec ${term} -e ncmpcpp";
"mod4+v" = "exec ${term} -e ncmpcpp -s visualizer";
"mod4+t" = "floating toggle";
"mod4+d" = "exec rofi -show drun -show-icons";
"mod4+Shift+p" = "exec rofi -show p -modi p:rofi-power-menu";
"mod4+h" = "focus left";
"mod4+j" = "focus down";
"mod4+k" = "focus up";
"mod4+l" = "focus right";
"mod4+Shift+h" = "move left";
"mod4+Shift+j" = "move down";
"mod4+Shift+k" = "move up";
"mod4+Shift+l" = "move right";
"mod4+f" = "fullscreen";
"XF86AudioRaiseVolume" = "exec pulsemixer --change-volume +1";
"XF86AudioLowerVolume" = "exec pulsemixer --change-volume -1";
"XF86AudioMute" = "exec pulsemixer --toggle-mute";
"XF86AudioPlay" = "exec mpc toggle";
"XF86AudioPause" = "exec mpc toggle";
"XF86AudioNext" = "exec mpc next";
"XF86AudioPrev" = "exec mpc prev";
"mod4+p" = "exec mpc toggle";
};
keycodebindings = {
"mod4+10" = "workspace number 1";
"mod4+11" = "workspace number 2";
"mod4+12" = "workspace number 3";
"mod4+13" = "workspace number 4";
"mod4+14" = "workspace number 5";
"mod4+15" = "workspace number 6";
"mod4+16" = "workspace number 7";
"mod4+17" = "workspace number 8";
"mod4+18" = "workspace number 9";
"mod4+19" = "workspace number 0";
"mod4+Shift+10" = "move container to workspace number 1";
"mod4+Shift+11" = "move container to workspace number 2";
"mod4+Shift+12" = "move container to workspace number 3";
"mod4+Shift+13" = "move container to workspace number 4";
"mod4+Shift+14" = "move container to workspace number 5";
"mod4+Shift+15" = "move container to workspace number 6";
"mod4+Shift+16" = "move container to workspace number 7";
"mod4+Shift+17" = "move container to workspace number 8";
"mod4+Shift+18" = "move container to workspace number 9";
"mod4+Shift+19" = "move container to workspace number 0";
};
};
};
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
xwayland.enable = true;
settings = {
"$mod" = "SUPER";
env = [ "XCURSOR_SIZE,24" "WLR_NO_HARDWARE_CURSORS,1" ];
xwayland = { force_zero_scaling = true; };
general = {
layout = "dwindle";
gaps_in = 7;
gaps_out = 14;
border_size = 2;
"col.active_border" = "rgb(B28121)";
"col.inactive_border" = "rgb(504945)";
no_focus_fallback = false;
resize_on_border = false;
hover_icon_on_border = false;
};
dwindle = { preserve_split = true; };
input = {
kb_layout = "fr";
kb_options = "caps:escape";
numlock_by_default = "true";
touchpad = {
natural_scroll = false;
disable_while_typing = true;
tap-to-click = false;
middle_button_emulation = false;
};
};
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
};
animations = {
enabled = true;
animation = [
"windows, 1, 2, default, popin 80%"
"windowsOut, 1, 2, default, popin 85%"
"windowsMove, 1, 2, default"
"workspaces, 1, 2, default"
"specialWorkspace, 1, 2, default"
];
};
bind = [
"$mod, Return, exec, ${term}"
"$mod, C, killactive"
"$mod SHIFT, Q, exit"
"$mod SHIFT, A, exec, ${term} -e pulsemixer"
"$mod, W, exec, firefox"
"$mod, R, exec, ${term} -e yazi"
"$mod, E, exec, emacsclient -c"
"$mod, N, exec, emacsclient -c --eval '(elfeed)'"
"$mod, I, exec, ${term} -e htop"
"$mod, M, exec, ${term} -e ncmpcpp"
"$mod, V, exec, ${term} -e ncmpcpp -s visualizer"
"$mod, T, togglefloating"
"$mod, D, exec, rofi -show drun -show-icons"
"$mod SHIFT, P, exec, rofi -show p -modi p:rofi-power-menu"
# Layout manipulation
"$mod SHIFT, O, layoutmsg, togglesplit"
"$mod, comma, splitratio, -0.1"
"$mod, semicolon, splitratio, +0.1"
"$mod, F, fullscreen, 0"
"$mod, X, exec, swaylock"
# Move focus
"$mod, H, movefocus, l"
"$mod, L, movefocus, r"
"$mod, K, movefocus, u"
"$mod, J, movefocus, d"
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
# Move window
"$mod SHIFT, H, movewindow, l"
"$mod SHIFT, L, movewindow, r"
"$mod SHIFT, K, movewindow, u"
"$mod SHIFT, J, movewindow, d"
"$mod SHIFT, left, movewindow, l"
"$mod SHIFT, right, movewindow, r"
"$mod SHIFT, up, movewindow, u"
"$mod SHIFT, down, movewindow, d"
# Switch workspaces with mainMod + [0-9]
"$mod, code:10, moveworkspacetomonitor, 1 current"
"$mod, code:10, workspace, 1"
"$mod, code:11, moveworkspacetomonitor, 2 current"
"$mod, code:11, workspace, 2"
"$mod, code:12, moveworkspacetomonitor, 3 current"
"$mod, code:12, workspace, 3"
"$mod, code:13, moveworkspacetomonitor, 4 current"
"$mod, code:13, workspace, 4"
"$mod, code:14, moveworkspacetomonitor, 5 current"
"$mod, code:14, workspace, 5"
"$mod, code:15, moveworkspacetomonitor, 6 current"
"$mod, code:15, workspace, 6"
"$mod, code:16, moveworkspacetomonitor, 7 current"
"$mod, code:16, workspace, 7"
"$mod, code:17, moveworkspacetomonitor, 8 current"
"$mod, code:17, workspace, 8"
"$mod, code:18, moveworkspacetomonitor, 9 current"
"$mod, code:18, workspace, 9"
"$mod, code:19, moveworkspacetomonitor, 10 current"
"$mod, code:19, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mod SHIFT, code:10, movetoworkspace, 1"
"$mod SHIFT, code:11, movetoworkspace, 2"
"$mod SHIFT, code:12, movetoworkspace, 3"
"$mod SHIFT, code:13, movetoworkspace, 4"
"$mod SHIFT, code:14, movetoworkspace, 5"
"$mod SHIFT, code:15, movetoworkspace, 6"
"$mod SHIFT, code:16, movetoworkspace, 7"
"$mod SHIFT, code:17, movetoworkspace, 8"
"$mod SHIFT, code:18, movetoworkspace, 9"
"$mod SHIFT, code:19, movetoworkspace, 10"
# Scroll through existing workspaces with mainMod + scroll
"$mod, mouse_down, workspace, e-1"
"$mod, mouse_up, workspace, e+1"
# Media controls
", XF86AudioRaiseVolume, exec, pulsemixer --change-volume +1"
", XF86AudioLowerVolume, exec, pulsemixer --change-volume -1"
# ", XF86AudioMicMute, exec, pulsemixer --toggle-mute"
", XF86AudioMute, exec, pulsemixer --toggle-mute"
", XF86AudioPlay, exec, mpc toggle"
", XF86AudioPause, exec, mpc toggle"
", XF86AudioNext, exec, mpc next"
", XF86AudioPrev, exec, mpc prev"
"$mod, P, exec, mpc toggle"
", XF86MonBrightnessDown, exec, light -U 5"
", XF86MonBrightnessUp, exec, light -A 5"
", Print, exec, flameshot full"
"SHIFT , Print, exec, env QT_SCREEN_SCALE_FACTORS=0.66666666 flameshot gui"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
exec-once = [
"${pkgs.swaybg}/bin/swaybg --image ${config.modules.desktop.wallpaper} --mode fill"
"keepassxc"
];
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
disable_splash_rendering = true;
animate_manual_resizes = true;
};
};
};
programs.waybar = {
enable = true;
systemd.enable = true;
settings = {
mainBar = {
layer = "top";
position = "bottom";
height = 25;
spacing = 2;
reload-style-on-change = true;
modules-left = [ "cpu" "memory" "disk" "hyprland/window" ];
modules-center = [ "hyprland/workspaces" ];
modules-right = [ "mpd" "battery" "clock" "tray" ];
tray = {
icon-size = 14;
spacing = 5;
show-passive-items = true;
};
cpu = {
interval = 1;
format = " {usage}%";
tooltip = false;
};
memory = {
interval = 1;
format = " {percentage}%";
tooltip = false;
};
disk = {
interval = 60;
format = " {free}";
tooltip = false;
};
clock = {
format = "󰥔 {:%A, %d %h %H:%M}";
format-alt = "󰥔 {:%d/%m/%Y %H:%M}";
tooltip = false;
};
};
};
style = ''
* {
border: none;
font-family: MesloLGS Nerd Font;
font-size: 12px;
min-height: 0;
}
tooltip {
background: #282828;
border: 0px solid;
border-radius: 0px;
}
window#waybar {
background: #282828;
color: #ebdbb2;
}
#workspaces button {
padding: 0 0.6em;
color: #a89984;
border-radius: 0px;
}
#workspaces button.active {
color: #ebdbb2;
background: #665c54;
}
#workspaces button.urgent {
color: #1d2021;
background: #fb4934;
}
#workspaces button:hover {
background: #665c54;
}
#network,
#workspaces,
#bluetooth,
#tray {
color: #ebdbb2;
padding: 0 5px;
margin: 0 5px;
}
#cpu,
#memory,
#disk,
#clock {
padding: 0 5px;
margin: 0 5px;
color: #83a598;
}
'';
package = pkgs.waybar.override { wireplumberSupport = false; };
};
home = {
packages = with pkgs.unstable; [ wlr-randr wl-clipboard wdisplays ];
};
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
ignore-empty-password = true;
daemonize = true;
# fade-in = 0.5;
indicator = true;
clock = true;
datestr = "%d/%m/%Y";
screenshots = true;
hide-keyboard-layout = true;
indicator-caps-lock = true;
bs-hl-color = "7daea3cc";
caps-lock-bs-hl-color = "7daea3cc";
caps-lock-key-hl-color = "d3869bcc";
font = "MesloLGS Nerd Font Propo";
font-size = "35";
indicator-idle-visible = true;
indicator-radius = 100;
indicator-thickness = 7;
inside-color = "32302f66";
inside-clear-color = "89b48266";
inside-caps-lock-color = "e78a4e66";
inside-ver-color = "7daea366";
inside-wrong-color = "ea696266";
key-hl-color = "a9b665cc";
layout-bg-color = "32302f00";
layout-text-color = "d4be98";
line-color = "00000000";
ring-color = "e78a4ecc";
ring-clear-color = "89b482cc";
ring-caps-lock-color = "e78a4ecc";
ring-ver-color = "7daea3cc";
ring-wrong-color = "ea6962cc";
separator-color = "00000000";
text-color = "d4be98";
text-clear-color = "d4be98";
text-caps-lock-color = "d4be98";
text-ver-color = "d4be98";
text-wrong-color = "d4be98";
effect-blur = "9x9";
effect-greyscale = true;
# effect-vignette = "0.5:0.5";
};
};
};
xdg.portal = {
enable = true;
config.preferred = {
default = "gtk";
"org.freedesktop.impl.portal.Screencast" = "hyprland";
};
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-hyprland
];
};
hardware.opengl.enable = true;
security.pam.services.swaylock = { };
};
}

View file

@ -1,13 +1,11 @@
{ config, lib, ... }: { config, lib, pkgs, ... }:
let with lib;
cfg = config.modules.desktop.terminal; with lib.my;
in let cfg = config.modules.desktop.terminal;
{ in {
options.modules.desktop.terminal = { options.modules.desktop.terminal = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false; config = mkIf cfg.enable {
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
programs.kitty = { programs.kitty = {
enable = true; enable = true;
@ -17,24 +15,18 @@ in
enable_audio_bell = false; enable_audio_bell = false;
font_family = "Meslo LG S"; font_family = "Meslo LG S";
font_size = 10; font_size = 10;
symbol_map = "U+e000-U+e00a,U+ea60-U+ebeb,U+e0a0-U+e0c8,U+e0ca,U+e0cc-U+e0d4,U+e200-U+e2a9,U+e300-U+e3e3,U+e5fa-U+e6b1,U+e700-U+e7c5,U+f000-U+f2e0,U+f300-U+f372,U+f400-U+f532,U+f0001-U+f1af0 Symbols Nerd Font Mono"; symbol_map =
allow_remote_control = "yes"; "U+e000-U+e00a,U+ea60-U+ebeb,U+e0a0-U+e0c8,U+e0ca,U+e0cc-U+e0d4,U+e200-U+e2a9,U+e300-U+e3e3,U+e5fa-U+e6b1,U+e700-U+e7c5,U+f000-U+f2e0,U+f300-U+f372,U+f400-U+f532,U+f0001-U+f1af0 Symbols Nerd Font Mono";
listen_on = "unix:@mykitty";
}; };
keybindings = { keybindings = {
"ctrl+up" = "change_font_size all +2.0"; "ctrl+up" = "change_font_size all +2.0";
"ctrl+down" = "change_font_size all -2.0"; "ctrl+down" = "change_font_size all -2.0";
"shift+page_up" = "scroll_page_up"; "shift+page_up" = "scroll_page_up";
"shift+page_down" = "scroll_page_down"; "shift+page_down" = "scroll_page_down";
"ctrl+shift+u" = "scroll_to_prompt -1"; "ctrl+shift+comma" = "scroll_to_prompt -1";
"ctrl+shift+d" = "scroll_to_prompt 1"; "ctrl+shift+semicolon" = "scroll_to_prompt 1";
"ctrl+shift+t" = "new_tab_with_cwd !neighbor";
"ctrl+," = "previous_tab";
"ctrl+;" = "next_tab";
"ctrl+shift+," = "move_tab_backward";
"ctrl+shift+;" = "move_tab_forward";
}; };
themeFile = "gruvbox-dark"; theme = "Gruvbox Dark";
}; };
}; };
}; };

View file

@ -1,19 +1,17 @@
{ { inputs, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
with lib;
with lib.my;
let let
cfg = config.modules.desktop.themes.gtk; cfg = config.modules.desktop.themes.gtk;
gruvboxPlus = pkgs.stdenv.mkDerivation rec { gruvboxPlus = pkgs.stdenv.mkDerivation rec {
name = "gruvbox-plus"; name = "gruvbox-plus";
version = "6.2.0"; version = "5.1";
src = pkgs.fetchurl { src = pkgs.fetchurl {
url = "https://github.com/SylEleuth/gruvbox-plus-icon-pack/releases/download/v${version}/gruvbox-plus-icon-pack-${version}.zip"; url =
sha256 = "sha256-D+SPhucHU4Riz0mzU1LnaEkkaQt+blJMAsA5r6fTAQ0="; "https://github.com/SylEleuth/gruvbox-plus-icon-pack/releases/download/v${version}/gruvbox-plus-icon-pack-${version}.zip";
sha256 = "1n3hqwk1mqaj8vbmy0pqbiq6v5jqrhmhin506xbpnccl28f907j0";
}; };
dontUnpack = true; dontUnpack = true;
installPhase = '' installPhase = ''
@ -22,13 +20,10 @@ let
''; '';
}; };
in in {
{ options.modules.desktop.themes.gtk = { enable = mkBoolOpt false; };
options.modules.desktop.themes.gtk = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
systemd.packages = [ pkgs.dconf ]; systemd.packages = [ pkgs.dconf ];
@ -39,11 +34,11 @@ in
gtk = { gtk = {
enable = true; enable = true;
cursorTheme = { cursorTheme = {
package = pkgs.paper-icon-theme; package = pkgs.unstable.paper-icon-theme;
name = "Paper"; name = "Paper";
}; };
theme = { theme = {
package = pkgs.adw-gtk3; package = pkgs.unstable.adw-gtk3;
name = "adw-gtk3"; name = "adw-gtk3";
}; };
iconTheme = { iconTheme = {
@ -53,17 +48,13 @@ in
}; };
xdg.configFile = { xdg.configFile = {
"gtk-3.0/gtk.css" = { "gtk-3.0/gtk.css" = { source = ./gtk.css; };
source = ./gtk.css; "gtk-4.0/gtk.css" = { source = ./gtk.css; };
};
"gtk-4.0/gtk.css" = {
source = ./gtk.css;
};
}; };
home = { home = {
pointerCursor = { pointerCursor = {
package = pkgs.paper-icon-theme; package = pkgs.unstable.paper-icon-theme;
name = "Paper"; name = "Paper";
size = 24; size = 24;
gtk.enable = true; gtk.enable = true;

View file

@ -1,20 +1,13 @@
{ { inputs, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.desktop.themes.qt; with lib.my;
let cfg = config.modules.desktop.themes.qt;
in in {
{ options.modules.desktop.themes.qt = { enable = mkBoolOpt false; };
options.modules.desktop.themes.qt = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
libsForQt5.qt5.qtquickcontrols2 libsForQt5.qt5.qtquickcontrols2
@ -28,7 +21,7 @@ in
platformTheme.name = "gtk"; platformTheme.name = "gtk";
style = { style = {
name = "adwaita-dark"; name = "adwaita-dark";
package = pkgs.adwaita-qt; package = pkgs.unstable.adwaita-qt;
}; };
}; };
}; };

View file

@ -1,32 +1,29 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.desktop.vscode; with lib.my;
in let cfg = config.modules.desktop.vscode;
{ in {
options.modules.desktop.vscode = { options.modules.desktop.vscode = {
enable = lib.my.mkBoolOpt false; enable = mkBoolOpt false;
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
programs.vscode = { programs.vscode = {
enable = true; enable = true;
package = pkgs.vscodium; package = pkgs.vscodium;
extensions = with pkgs.vscode-extensions; [ extensions = (
pkief.material-icon-theme with pkgs.vscode-extensions; [
jnoortheen.nix-ide pkief.material-icon-theme
arrterian.nix-env-selector jnoortheen.nix-ide
scala-lang.scala arrterian.nix-env-selector
scalameta.metals scala-lang.scala
hashicorp.terraform scalameta.metals
bradlc.vscode-tailwindcss hashicorp.terraform
asciidoctor.asciidoctor-vscode bradlc.vscode-tailwindcss
]; asciidoctor.asciidoctor-vscode
]
);
userSettings = { userSettings = {
"editor.formatOnSave" = true; "editor.formatOnSave" = true;
"editor.quickSuggestions" = { "editor.quickSuggestions" = {
@ -36,14 +33,8 @@ in
"scala" = "html"; "scala" = "html";
}; };
"tailwindCSS.experimental.classRegex" = [ "tailwindCSS.experimental.classRegex" = [
[ [ "cls\\(([^)]*)\\)" "\"([^']*)\"" ]
"cls\\(([^)]*)\\)" [ "cls\\s*:=\\s*\\(?([^,^\\n^\\)]*)" "\"([^']*)\"" ]
"\"([^']*)\""
]
[
"cls\\s*:=\\s*\\(?([^,^\\n^\\)]*)"
"\"([^']*)\""
]
]; ];
"files.autoSave" = "onFocusChange"; "files.autoSave" = "onFocusChange";
@ -59,7 +50,9 @@ in
"terraform.languageServer" = { "terraform.languageServer" = {
"external" = true; "external" = true;
"pathToBinary" = ""; "pathToBinary" = "";
"args" = [ "serve" ]; "args" = [
"serve"
];
"maxNumberOfProblems" = 100; "maxNumberOfProblems" = 100;
"trace.server" = "off"; "trace.server" = "off";
}; };

View file

@ -1,472 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.modules.desktop.wm;
term = "${config.home-manager.users.${config.user.name}.programs.kitty.package}/bin/kitty";
wallpaper = config.modules.desktop.wallpaper;
in
{
options.modules.desktop.wm = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
modules = {
desktop = {
themes = {
gtk.enable = true;
qt.enable = true;
};
terminal.enable = true;
file-manager.enable = true;
zsh.enable = true;
dunst.enable = true;
htop.enable = true;
};
hardware = {
audio.enable = true;
};
apps = {
rofi.enable = true;
newsboat.enable = true;
};
};
home-manager.users.${config.user.name} =
{ config, ... }:
{
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
xwayland.enable = true;
settings = {
"$mod" = "SUPER";
env = [
"XCURSOR_SIZE,24"
"WLR_NO_HARDWARE_CURSORS,1"
];
xwayland = {
force_zero_scaling = true;
};
general = {
layout = "dwindle";
gaps_in = 7;
gaps_out = 14;
border_size = 2;
"col.active_border" = "rgb(B28121)";
"col.inactive_border" = "rgb(504945)";
no_focus_fallback = false;
resize_on_border = false;
hover_icon_on_border = false;
};
dwindle = {
preserve_split = true;
};
debug = {
disable_logs = false;
enable_stdout_logs = true;
};
input = {
kb_layout = "fr";
kb_options = "caps:escape";
numlock_by_default = "true";
touchpad = {
natural_scroll = false;
disable_while_typing = true;
tap-to-click = false;
middle_button_emulation = false;
};
};
gesture = [
"3, horizontal, workspace"
];
animations = {
enabled = true;
animation = [
"windows, 1, 2, default, popin 80%"
"windowsOut, 1, 2, default, popin 85%"
"windowsMove, 1, 2, default"
"workspaces, 1, 2, default"
"specialWorkspace, 1, 2, default"
];
};
bind = [
"$mod, Return, exec, ${term}"
"$mod, C, killactive"
# "$mod SHIFT, Q, exit"
"$mod SHIFT, A, exec, ${term} -e pulsemixer"
"$mod, W, exec, firefox"
"$mod, R, exec, ${term} -e yazi"
"$mod, E, exec, emacsclient -c"
"$mod, N, exec, ${term} -e newsboat"
"$mod, I, exec, ${term} -e htop"
"$mod, M, exec, ${term} -e ncmpcpp"
"$mod, V, exec, ${term} -e ncmpcpp -s visualizer"
"$mod, T, togglefloating"
"$mod, D, exec, rofi -show drun -show-icons"
"$mod SHIFT, P, exec, rofi -show p -modi p:rofi-power-menu"
# Layout manipulation
"$mod SHIFT, O, layoutmsg, togglesplit"
"$mod, comma, splitratio, -0.1"
"$mod, semicolon, splitratio, +0.1"
"$mod, F, fullscreen, 0"
"$mod, X, exec, swaylock"
# Move focus
"$mod, H, movefocus, l"
"$mod, L, movefocus, r"
"$mod, K, movefocus, u"
"$mod, J, movefocus, d"
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
# Move window
"$mod SHIFT, H, movewindow, l"
"$mod SHIFT, L, movewindow, r"
"$mod SHIFT, K, movewindow, u"
"$mod SHIFT, J, movewindow, d"
"$mod SHIFT, left, movewindow, l"
"$mod SHIFT, right, movewindow, r"
"$mod SHIFT, up, movewindow, u"
"$mod SHIFT, down, movewindow, d"
# Switch workspaces with mainMod + [0-9]
"$mod, code:10, moveworkspacetomonitor, 1 current"
"$mod, code:10, workspace, 1"
"$mod, 1, moveworkspacetomonitor, 1 current"
"$mod, 1, workspace, 1"
"$mod, code:11, moveworkspacetomonitor, 2 current"
"$mod, code:11, workspace, 2"
"$mod, 2, moveworkspacetomonitor, 2 current"
"$mod, 2, workspace, 2"
"$mod, code:12, moveworkspacetomonitor, 3 current"
"$mod, code:12, workspace, 3"
"$mod, 3, moveworkspacetomonitor, 3 current"
"$mod, 3, workspace, 3"
"$mod, code:13, moveworkspacetomonitor, 4 current"
"$mod, code:13, workspace, 4"
"$mod, 4, moveworkspacetomonitor, 4 current"
"$mod, 4, workspace, 4"
"$mod, code:14, moveworkspacetomonitor, 5 current"
"$mod, code:14, workspace, 5"
"$mod, 5, moveworkspacetomonitor, 5 current"
"$mod, 5, workspace, 5"
"$mod, code:15, moveworkspacetomonitor, 6 current"
"$mod, code:15, workspace, 6"
"$mod, 6, moveworkspacetomonitor, 6 current"
"$mod, 6, workspace, 6"
"$mod, code:16, moveworkspacetomonitor, 7 current"
"$mod, code:16, workspace, 7"
"$mod, 7, moveworkspacetomonitor, 7 current"
"$mod, 7, workspace, 7"
"$mod, code:17, moveworkspacetomonitor, 8 current"
"$mod, code:17, workspace, 8"
"$mod, 8, moveworkspacetomonitor, 8 current"
"$mod, 8, workspace, 8"
"$mod, code:18, moveworkspacetomonitor, 9 current"
"$mod, code:18, workspace, 9"
"$mod, 9, moveworkspacetomonitor, 9 current"
"$mod, 9, workspace, 9"
"$mod, code:19, moveworkspacetomonitor, 10 current"
"$mod, code:19, workspace, 10"
"$mod, 0, moveworkspacetomonitor, 10 current"
"$mod, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mod SHIFT, code:10, movetoworkspace, 1"
"$mod SHIFT, 1, movetoworkspace, 1"
"$mod SHIFT, code:11, movetoworkspace, 2"
"$mod SHIFT, 2, movetoworkspace, 2"
"$mod SHIFT, code:12, movetoworkspace, 3"
"$mod SHIFT, 3, movetoworkspace, 3"
"$mod SHIFT, code:13, movetoworkspace, 4"
"$mod SHIFT, 4, movetoworkspace, 4"
"$mod SHIFT, code:14, movetoworkspace, 5"
"$mod SHIFT, 5, movetoworkspace, 5"
"$mod SHIFT, code:15, movetoworkspace, 6"
"$mod SHIFT, 6, movetoworkspace, 6"
"$mod SHIFT, code:16, movetoworkspace, 7"
"$mod SHIFT, 7, movetoworkspace, 7"
"$mod SHIFT, code:17, movetoworkspace, 8"
"$mod SHIFT, 8, movetoworkspace, 8"
"$mod SHIFT, code:18, movetoworkspace, 9"
"$mod SHIFT, 9, movetoworkspace, 9"
"$mod SHIFT, code:19, movetoworkspace, 10"
"$mod SHIFT, 0, movetoworkspace, 10"
# Scroll through existing workspaces with mainMod + scroll
"$mod, mouse_down, workspace, e-1"
"$mod, mouse_up, workspace, e+1"
# Media controls
", XF86AudioRaiseVolume, exec, pulsemixer --change-volume +1"
", XF86AudioLowerVolume, exec, pulsemixer --change-volume -1"
# ", XF86AudioMicMute, exec, pulsemixer --toggle-mute"
", XF86AudioMute, exec, pulsemixer --toggle-mute"
", XF86AudioPlay, exec, mpc toggle"
", XF86AudioPause, exec, mpc toggle"
", XF86AudioNext, exec, mpc next"
", XF86AudioPrev, exec, mpc prev"
"$mod, P, exec, mpc toggle"
", XF86MonBrightnessDown, exec, light -U 5"
", XF86MonBrightnessUp, exec, light -A 5"
", Print, exec, grim -g \"$(slurp)\" - | satty -f -"
"SHIFT, Print, exec, grim - | satty -f -"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
exec-once = [
"${pkgs.swaybg}/bin/swaybg --image ${wallpaper} --mode fill"
"keepassxc"
];
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
disable_splash_rendering = true;
animate_manual_resizes = true;
};
};
};
programs.waybar = {
enable = true;
systemd.enable = true;
settings = {
mainBar = {
layer = "top";
position = "bottom";
height = 25;
spacing = 2;
reload-style-on-change = true;
modules-left = [
"cpu"
"memory"
"disk"
"hyprland/window"
];
modules-center = [ "hyprland/workspaces" ];
modules-right = [
"mpd"
"battery"
"clock"
"tray"
];
tray = {
icon-size = 14;
spacing = 5;
show-passive-items = true;
};
cpu = {
interval = 1;
format = " {usage}%";
tooltip = false;
};
memory = {
interval = 1;
format = " {percentage}%";
tooltip = false;
};
disk = {
interval = 60;
format = " {free}";
tooltip = false;
};
clock = {
format = "󰥔 {:%A, %d %h %H:%M}";
format-alt = "󰥔 {:%d/%m/%Y %H:%M}";
tooltip = false;
};
};
};
style = ''
* {
border: none;
font-family: MesloLGS Nerd Font;
font-size: 12px;
min-height: 0;
}
tooltip {
background: #282828;
border: 0px solid;
border-radius: 0px;
}
window#waybar {
background: #282828;
color: #ebdbb2;
}
#workspaces button {
padding: 0 0.6em;
color: #a89984;
border-radius: 0px;
}
#workspaces button.active {
color: #ebdbb2;
background: #665c54;
}
#workspaces button.urgent {
color: #1d2021;
background: #fb4934;
}
#workspaces button:hover {
background: #665c54;
}
#network,
#workspaces,
#bluetooth,
#tray {
color: #ebdbb2;
padding: 0 5px;
margin: 0 5px;
}
#cpu,
#memory,
#disk,
#clock {
padding: 0 5px;
margin: 0 5px;
color: #83a598;
}
'';
package = pkgs.waybar.override { wireplumberSupport = false; };
};
programs.satty = {
enable = true;
settings = {
general = {
output-filename = "${config.home.homeDirectory}/Pictures/Screenshots/satty_%Y-%m-%d_%H-%M-%S.png";
copy-command = "wl-copy";
actions-on-enter = [
"save-to-clipboard"
"save-to-file"
"exit"
];
early-exit = true;
save-after-copy = true;
};
};
};
home.activation.ensureScreenshotsDir = ''
${pkgs.coreutils}/bin/mkdir -p "$HOME/Pictures/Screenshots"
'';
home = {
packages = with pkgs; [
wlr-randr
wl-clipboard
wdisplays
grim
slurp
];
};
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
ignore-empty-password = true;
daemonize = true;
# fade-in = 0.5;
indicator = true;
clock = true;
datestr = "%d/%m/%Y";
screenshots = true;
hide-keyboard-layout = true;
indicator-caps-lock = true;
bs-hl-color = "7daea3cc";
caps-lock-bs-hl-color = "7daea3cc";
caps-lock-key-hl-color = "d3869bcc";
font = "MesloLGS Nerd Font Propo";
font-size = "35";
indicator-idle-visible = true;
indicator-radius = 100;
indicator-thickness = 7;
inside-color = "32302f66";
inside-clear-color = "89b48266";
inside-caps-lock-color = "e78a4e66";
inside-ver-color = "7daea366";
inside-wrong-color = "ea696266";
key-hl-color = "a9b665cc";
layout-bg-color = "32302f00";
layout-text-color = "d4be98";
line-color = "00000000";
ring-color = "e78a4ecc";
ring-clear-color = "89b482cc";
ring-caps-lock-color = "e78a4ecc";
ring-ver-color = "7daea3cc";
ring-wrong-color = "ea6962cc";
separator-color = "00000000";
text-color = "d4be98";
text-clear-color = "d4be98";
text-caps-lock-color = "d4be98";
text-ver-color = "d4be98";
text-wrong-color = "d4be98";
effect-blur = "9x9";
effect-greyscale = true;
# effect-vignette = "0.5:0.5";
};
};
};
xdg.portal = {
enable = true;
config.preferred = {
default = "gtk";
"org.freedesktop.impl.portal.Screencast" = "hyprland";
};
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-hyprland
];
};
hardware.graphics.enable = true;
security.pam.services.swaylock = { };
};
}

View file

@ -1,98 +1,67 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.desktop.zsh; with lib.my;
in let cfg = config.modules.desktop.zsh;
{ in {
options.modules.desktop.zsh = { options.modules.desktop.zsh = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false; config = mkIf cfg.enable {
};
config = lib.mkIf cfg.enable {
environment.pathsToLink = [ "/share/zsh" ]; environment.pathsToLink = [ "/share/zsh" ];
programs.zsh.enable = true; programs.zsh.enable = true;
users.users.${config.user.name} = { users.users.${config.user.name} = { shell = pkgs.zsh; };
shell = pkgs.zsh;
};
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
programs = { programs.zsh = {
zsh = { enable = true;
enable = true; history = {
history = { save = 50000;
save = 50000; size = 50000;
size = 50000;
};
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
initContent = # bash
''
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "$key[Up]" ]] && bindkey -- "$key[Up]" up-line-or-beginning-search
[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search
bindkey "^P" up-line-or-beginning-search
bindkey "^N" down-line-or-beginning-search
'';
oh-my-zsh = {
enable = true;
plugins = [
"git"
"terraform"
"systemd"
];
};
plugins = [
{
name = "nix-zsh-completions";
src = pkgs.nix-zsh-completions;
}
{
name = "zsh-completions";
src = pkgs.zsh-completions;
}
];
}; };
pay-respects = { enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
initExtra = ''
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "$key[Up]" ]] && bindkey -- "$key[Up]" up-line-or-beginning-search
[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search
eval $(${pkgs.thefuck}/bin/thefuck --alias)
'';
oh-my-zsh = {
enable = true; enable = true;
enableZshIntegration = true; plugins = [ "git" "terraform" "systemd" ];
}; };
starship = { plugins = [
enable = true; {
enableZshIntegration = true; name = "nix-zsh-completions";
settings = { src = pkgs.nix-zsh-completions;
add_newline = true; }
cmd_duration = { {
min_time = 0; name = "zsh-completions";
show_milliseconds = true; src = pkgs.zsh-completions;
}; }
scala = { ];
symbol = " "; };
}; programs.starship = {
terraform = { enable = true;
symbol = "󱁢 "; enableZshIntegration = true;
}; settings = {
nix_shell = { add_newline = true;
symbol = "󱄅 "; cmd_duration = {
}; min_time = 0;
nodejs = { show_milliseconds = true;
symbol = " ";
};
php = {
symbol = " ";
};
}; };
scala = { symbol = " "; };
terraform = { symbol = "󱁢 "; };
nix_shell = { symbol = "󱄅 "; };
nodejs = { symbol = " "; };
php = { symbol = " "; };
}; };
}; };
}; };

View file

@ -1,120 +1,132 @@
{ { inputs, config, lib, pkgs, ... }:
inputs,
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.editor.emacs; with lib.my;
in let cfg = config.modules.editor.emacs;
{ in {
options.modules.editor.emacs = { options.modules.editor.emacs = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
nixpkgs.overlays = [ inputs.emacs-overlay.overlay ]; nixpkgs.overlays = [ inputs.emacs-overlay.overlay ];
home = { home.packages = with pkgs.unstable; [
packages = [ binutils
pkgs.binutils ripgrep
pkgs.ripgrep fd
pkgs.fd findutils.locate
pkgs.findutils.locate python311
pkgs.python311 libsecret
pkgs.libsecret gcc
pkgs.gcc gnumake
pkgs.gnumake cmake
pkgs.cmake nodejs
pkgs.nodejs
pkgs.opentofu opentofu
pkgs.pandoc pandoc
# Formatters and linters # Formatters and linters
pkgs.nixfmt-rfc-style # nix formatter nixfmt-rfc-style # nix formatter
pkgs.nixpkgs-fmt nixpkgs-fmt
pkgs.shfmt # sh formatter shfmt # sh formatter
pkgs.shellcheck # sh linter shellcheck # sh linter
pkgs.html-tidy # HTML formatter html-tidy # HTML formatter
pkgs.nodePackages.stylelint # CSS linter nodePackages.stylelint # CSS linter
pkgs.nodePackages.js-beautify # JS/CSS/HTML formatter nodePackages.js-beautify # JS/CSS/HTML formatter
# LSPs # LSPs
pkgs.coursier coursier
# metals # Scala # metals # Scala
# Nix # Nix
pkgs.nil nil
pkgs.phpactor # PHP phpactor # PHP
#OCaml #OCaml
pkgs.ocaml ocaml
pkgs.dune_3 dune_3
pkgs.ocamlPackages.ocaml-lsp ocamlPackages.ocaml-lsp
pkgs.ocamlPackages.ocamlformat ocamlPackages.ocamlformat
pkgs.ocamlPackages.utop ocamlPackages.utop
pkgs.ocamlPackages.ocp-indent ocamlPackages.ocp-indent
pkgs.ocamlPackages.merlin ocamlPackages.merlin
# Used by org-roam # Used by org-roam
pkgs.sqlite sqlite
pkgs.graphviz graphviz
# Used by elfeed-tube # Used by elfeed-tube
pkgs.yt-dlp yt-dlp
pkgs.mpv mpv
# Used by dirvish # Used by dirvish
pkgs.imagemagick imagemagick
pkgs.ffmpegthumbnailer ffmpegthumbnailer
pkgs.mediainfo mediainfo
pkgs.poppler poppler
pkgs.gnutar gnutar
pkgs.unzip unzip
]; ];
sessionPath = [ "${config.home-manager.users.${config.user.name}.xdg.configHome}/emacs/bin" ];
activation = {
installDoomEmacs = ''
if [ ! -d "${config.home-manager.users.${config.user.name}.xdg.configHome}/emacs" ]; then
${pkgs.git}/bin/git clone --depth=1 --single-branch https://github.com/doomemacs/doomemacs "${
config.home-manager.users.${config.user.name}.xdg.configHome
}/emacs"
fi
'';
};
};
services.emacs = { services.emacs = {
enable = true; enable = true;
client.enable = true; client.enable = true;
}; };
# Use either this or nix-doom-emacs
programs.emacs = { programs.emacs = {
enable = true; enable = true;
package = pkgs.emacs30.override { package = pkgs.unstable.emacs29.override {
withNativeCompilation = true; withNativeCompilation = true;
withPgtk = true; withPgtk = true;
withSQLite3 = true; withSQLite3 = true;
withTreeSitter = true; withTreeSitter = true;
withWebP = true; withWebP = true;
}; };
extraPackages = extraPackages = epkgs:
epkgs: with epkgs; [ with epkgs; [
vterm vterm
pdf-tools pdf-tools
treesit-grammars.with-all-grammars treesit-grammars.with-all-grammars
]; ];
}; };
xdg.configFile = { xdg.configFile = { "doom" = { source = ./doom.d; }; };
"doom" = { home.sessionPath = [
source = ./doom.d; "${
}; config.home-manager.users.${config.user.name}.xdg.configHome
}/emacs/bin"
];
home.activation = {
installDoomEmacs = ''
if [ ! -d "${
config.home-manager.users.${config.user.name}.xdg.configHome
}/emacs" ]; then
git clone --depth=1 --single-branch https://github.com/doomemacs/doomemacs "${
config.home-manager.users.${config.user.name}.xdg.configHome
}/emacs"
fi
'';
}; };
# imports = [ inputs.nix-doom-emacs.hmModule ];
# programs.doom-emacs = {
# enable = true;
# doomPrivateDir = ./doom.d;
# emacsPackagesOverlay = final: prev: {
# ob-ammonite = with final;
# (trivialBuild {
# src = pkgs.fetchFromGitHub {
# owner = "zwild";
# repo = "ob-ammonite";
# rev = "39937dff395e70aff76a4224fa49cf2ec6c57cca";
# sha256 = pkgs.lib.fakeSha256;
# };
# pname = "ob-ammonite";
# packageRequires = [ s dash editorconfig ];
# });
# };
# };
}; };
}; };
} }

46
modules/editor/vim.nix Normal file
View file

@ -0,0 +1,46 @@
{ config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.editor.vim;
in {
options.modules.editor.vim = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
home-manager.users.${config.user.name} = {
programs.neovim = {
enable = true;
vimAlias = true;
plugins = with pkgs; [
vimPlugins.gruvbox-community
vimPlugins.vim-airline
vimPlugins.vim-airline-themes
vimPlugins.vim-gitgutter
vimPlugins.nerdtree
vimPlugins.nerdtree-git-plugin
vimPlugins.ctrlp-vim
vimPlugins.tabular
];
extraConfig = ''
let g:gruvbox_italic=1
colorscheme gruvbox
set background=dark
let g:airline_powerline_fonts = 1
autocmd VimEnter * hi Normal ctermbg=NONE guibg=NONE
"Toggle NERDTree with Ctrl-N
map <C-n> :NERDTreeToggle<CR>
"Show hidden files in NERDTree
let NERDTreeShowHidden=1
set number relativenumber
set ignorecase
vnoremap . :norm.<CR>
'';
};
};
};
}

View file

@ -1,15 +0,0 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
}
}

View file

@ -1,3 +0,0 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
-- Add any additional autocmds here

View file

@ -1,18 +0,0 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
local map = vim.keymap.set
-- Windows
map("n", "<leader>ww", "<C-w>p", { desc = "Other Window", remap = true })
map("n", "<leader>wd", "<C-w>c", { desc = "Delete Window", remap = true })
map("n", "<leader>ws", "<C-w>s", { desc = "Split Window Below", remap = true })
map("n", "<leader>wv", "<C-w>v", { desc = "Split Window Right", remap = true })
map("n", "<leader>wj", "<C-w>j", { desc = "Go to Lower Window", remap = true })
map("n", "<leader>wk", "<C-w>k", { desc = "Go to Upper Window", remap = true })
map("n", "<leader>wl", "<C-w>l", { desc = "Go to Right Window", remap = true })
map("n", "<leader>wh", "<C-w>h", { desc = "Go to Left Window", remap = true })
-- File
map("n", "<leader>fs", "<cmd>w<cr>", { desc = "Save File" })

View file

@ -1,3 +0,0 @@
-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here

View file

@ -1,20 +0,0 @@
return {
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
{
'nvim-telescope/telescope.nvim',
opts = {
defaults = { path_display = { "truncate" } },
},
},
{
'folke/snacks.nvim',
keys = {
{ "<leader>bk", function() Snacks.bufdelete() end, desc = "Delete Buffer" },
},
},
}

View file

@ -1,8 +0,0 @@
return {
{ "folke/tokyonight.nvim", enabled = false },
{ "catppuccin", enabled = false },
{ "mason-org/mason.nvim", enabled = false },
{ "mason-org/mason-lspconfig.nvim", enabled = false },
{ "jay-babu/mason-nvim-dap.nvim", enabled = false },
{ "Bilal2453/luvit-meta", enabled = false },
}

View file

@ -1,46 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = "scala",
root = { "build.sbt", "build.mill", "build.sc", "build.gradle", "pom.xml" },
})
end,
{
"scalameta/nvim-metals",
ft = { "scala", "sbt", "mill" },
config = function() end,
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
metals = {
settings = {
showImplicitArguments = false,
startMcpServer = true,
},
},
elixirls = {
cmd = { "elixir-ls" },
},
},
setup = {
metals = function(_, opts)
local metals = require("metals")
local metals_config = vim.tbl_deep_extend("force", metals.bare_config(), opts)
metals_config.on_attach = LazyVim.has("nvim-dap") and metals.setup_dap or nil
local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
pattern = { "scala", "sbt", "mill" },
callback = function()
metals.initialize_or_attach(metals_config)
end,
group = nvim_metals_group,
})
return true
end,
},
},
},
}

View file

@ -1,14 +0,0 @@
return {
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = {
sections = {
lualine_z = {
{
require("opencode").statusline,
},
}
}
},
}

View file

@ -1,15 +0,0 @@
return {
{
"NeogitOrg/neogit",
dependencies = { "nvim-lua/plenary.nvim", "sindrets/diffview.nvim", "nvim-telescope/telescope.nvim" },
event = "VeryLazy",
keys = {
{
"<leader>gg",
"<cmd>Neogit<cr>",
desc = "Neogit",
},
},
config = true,
},
}

View file

@ -1,39 +0,0 @@
return {
{
"mfussenegger/nvim-lint",
opts = {
linters_by_ft = {
nix = {
"statix",
},
},
},
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
nixd = {
settings = {
nixd = {
formatting = {
command = { "nixfmt" }
}
}
},
},
},
},
},
{
"stevearc/conform.nvim",
opts = {
format = {
lsp_format = "first"
},
formatters_by_ft = {
nix = { "nixfmt" },
},
},
},
}

View file

@ -1,36 +0,0 @@
return {
"NickvanDyke/opencode.nvim",
config = function()
---@type opencode.Opts
vim.g.opencode_opts = {
provider = {
enabled = "kitty",
kitty = {
location = "tab"
}
},
events = {
permissions = {
enabled = false
}
}
}
vim.o.autoread = true
vim.keymap.set({ "n", "x" }, "<leader>aa", function()
require("opencode").ask("@this: ", { submit = true })
end, { desc = "Ask opencode" })
vim.keymap.set({ "n", "x" }, "<leader>ao", function()
require("opencode").select()
end, { desc = "Execute opencode action…" })
vim.keymap.set({ "n", "x" }, "<leader>as", function()
require("opencode").prompt("@this")
end, { desc = "Add to opencode" })
vim.keymap.set({ "n", "t" }, "<leader>a.", function()
require("opencode").toggle()
end, { desc = "Toggle opencode" })
end,
}

View file

@ -1,11 +0,0 @@
return {
{
"nvim-treesitter/nvim-treesitter",
opts = {
auto_install = false,
sync_install = false,
ensure_installed = {},
parser_install_dir = vim.fs.joinpath(vim.fn.stdpath('data'), 'site'),
},
},
}

View file

@ -1,21 +0,0 @@
return {
{
"mikavilpas/yazi.nvim",
event = "VeryLazy",
keys = {
{
"<leader>.",
function()
require("yazi").yazi()
end,
desc = "Open the file manager",
},
},
opts = {
open_for_directories = true,
},
config = function(opts)
require('yazi').setup(opts)
end,
}
}

View file

@ -1,52 +0,0 @@
return {
"zk-org/zk-nvim",
keys = {
{
"<leader>zn",
"<Cmd>ZkNew { title = vim.fn.input('Title: ') }<CR>",
desc = "Create a new note after asking for its title"
},
{
"<leader>zo",
"<Cmd>ZkNotes { sort = { 'modified' } }<CR>",
desc = "Open Notes"
},
{
"<leader>zt",
"<Cmd>ZkTags<CR>",
desc = "Open notes associated with the selected tags"
},
{
"<leader>zf",
"<Cmd>ZkNotes { sort = { 'modified' }, match = { vim.fn.input('Search: ') } }<CR>",
desc = "Search for the notes matching a given query"
},
{
"<leader>zf",
":'<,'>ZkMatch<CR>",
mode = { "v" },
desc = "Search for the notes matching the current visual selection"
},
},
config = function()
require("zk").setup({
picker = "fzf_lua",
lsp = {
-- `config` is passed to `vim.lsp.start(config)`
config = {
name = "zk",
cmd = { "zk", "lsp" },
filetypes = { "markdown" },
-- on_attach = ...
-- etc, see `:h vim.lsp.start()`
},
-- automatically attach buffers in a zk notebook that match the given filetypes
auto_attach = {
enabled = true,
},
},
})
end,
}

View file

@ -1,313 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.modules.editor.vim;
in
{
options.modules.editor.vim = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} =
{ config, ... }:
{
programs.neovim = {
enable = true;
package = pkgs.neovim-unwrapped;
vimAlias = true;
vimdiffAlias = true;
withNodeJs = true;
plugins = with pkgs.vimPlugins; [
# base distro
LazyVim
conform-nvim
nvim-lint
markdown-preview-nvim
render-markdown-nvim
# theme
gruvbox-nvim
# UI
bufferline-nvim
gitsigns-nvim
neogit
diffview-nvim
edgy-nvim
dashboard-nvim
toggleterm-nvim
trouble-nvim
lualine-nvim
which-key-nvim
nvim-web-devicons
mini-nvim
mini-ai
mini-comment
mini-icons
mini-pairs
noice-nvim
nui-nvim
nvim-notify
nvim-lsp-notify
neo-tree-nvim
nvim-navic
dressing-nvim
aerial-nvim
snacks-nvim
# project management
project-nvim
neoconf-nvim
persistence-nvim
# smart typing
guess-indent-nvim
vim-illuminate
# LSP
nvim-lspconfig
nvim-lightbulb # lightbulb for quick actions
# nvim-code-action-menu # code action menu
neodev-nvim
SchemaStore-nvim # load known formats for json and yaml
nvim-metals
nvim-jdtls
# cmp plugins
nvim-cmp
blink-cmp # completion plugin
cmp_luasnip # snipper completions
# snippets
luasnip # snippet engine
friendly-snippets # a bunch of snippets to use
# search functionality
plenary-nvim
telescope-nvim
telescope-fzf-native-nvim
fzf-lua
grug-far-nvim
flash-nvim
# treesitter
nvim-treesitter-context
nvim-ts-autotag
nvim-treesitter-textobjects
nvim-treesitter.withAllGrammars
# comments
ts-comments-nvim
nvim-ts-context-commentstring
todo-comments-nvim
# leap
vim-repeat
leap-nvim
flit-nvim
# DAP
nvim-dap
nvim-dap-ui
nvim-dap-virtual-text
one-small-step-for-vimkind
# neotest
neotest
neotest-rust
neotest-elixir
# SQL
vim-dadbod
vim-dadbod-ui
vim-dadbod-completion
lazy-nvim
lazydev-nvim
vim-startuptime
yazi-nvim
zk-nvim
(pkgs.vimUtils.buildVimPlugin {
pname = "opencode.nvim";
version = "2025-12-04";
src = pkgs.fetchFromGitHub {
owner = "NickvanDyke";
repo = "opencode.nvim";
rev = "963fad75f794deb85d1c310d2e2cb033da44f670";
hash = "sha256-nKOsHgMptHnOS+SCTHa77sQ/ZiUY0aW26I8GN7ocRHE=";
};
})
];
extraPackages = with pkgs; [
gcc # needed for nvim-treesitter
# HTML, CSS, JSON
vscode-langservers-extracted
# Nix
nixd
statix
nixfmt-rfc-style
# SQL
sqlfluff
# LazyVim defaults
stylua
shfmt
# Markdown extra
markdownlint-cli2
marksman
# Docker extra
dockerfile-language-server
hadolint
docker-compose-language-service
# JSON and YAML extras
nodePackages.yaml-language-server
# Java
jdt-language-server
# Elixir
beam28Packages.elixir-ls
# Custom
editorconfig-checker
shellcheck
];
extraLuaConfig = # lua
''
require("gruvbox").setup({
overrides = {
Include = { ["link"] = "GruvboxRed" },
["@constructor"] = { ["link"] = "GruvboxYellow" },
["@function.builtin"] = { ["link"] = "GruvboxFg1" },
["@function.call"] = { ["link"] = "GruvboxFg1" },
["@function.macro"] = { ["link"] = "GruvboxFg1" },
["@function.method.call.scala"] = { ["link"] = "GruvboxFg1" },
["@method.call"] = { ["link"] = "GruvboxFg1" },
["@variable.member.scala"] = { ["link"] = "GruvboxFg1" },
["@lsp.type.type.scala"] = { ["link"] = "" },
["@lsp.type.method.scala"] = { ["link"] = "" },
["@lsp.type.modifier.scala"] = { ["link"] = "GruvboxOrange" },
["@lsp.type.typeParameter.scala"] = { ["link"] = "GruvboxAqua" },
["@lsp.type.type.nix"] = { ["link"] = "" },
["@lsp.type.method.nix"] = { ["link"] = "" },
["@lsp.type.macro.nix"] = { ["link"] = "" },
["@lsp.type.interface.nix"] = { ["link"] = "" },
},
})
require("lazy").setup({
spec = {
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import any extras modules here
{ import = "lazyvim.plugins.extras.dap.core" },
{ import = "lazyvim.plugins.extras.dap.nlua" },
{ import = "lazyvim.plugins.extras.ui.edgy" },
{ import = "lazyvim.plugins.extras.coding.mini-comment" },
{ import = "lazyvim.plugins.extras.editor.aerial" },
{ import = "lazyvim.plugins.extras.editor.leap" },
{ import = "lazyvim.plugins.extras.editor.navic" },
{ import = "lazyvim.plugins.extras.formatting.prettier" },
{ import = "lazyvim.plugins.extras.lang.angular" },
{ import = "lazyvim.plugins.extras.lang.docker" },
{ import = "lazyvim.plugins.extras.lang.java" },
{ import = "lazyvim.plugins.extras.lang.json" },
{ import = "lazyvim.plugins.extras.lang.markdown" },
{ import = "lazyvim.plugins.extras.lang.sql" },
{ import = "lazyvim.plugins.extras.lang.yaml" },
{ import = "lazyvim.plugins.extras.lang.scala" },
{ import = "lazyvim.plugins.extras.lang.elixir" },
{ import = "lazyvim.plugins.extras.test.core" },
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
performance = {
-- Used for NixOS
reset_packpath = false,
rtp = {
reset = false,
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
}
},
dev = {
path = "${pkgs.vimUtils.packDir config.programs.neovim.finalPackage.passthru.packpathDirs}/pack/myNeovimPackages/start",
patterns = {""},
},
install = {
missing = false,
},
})
'';
};
xdg.configFile."nvim/lua" = {
recursive = true;
source = ./lua;
};
home.sessionVariables = {
ZK_NOTEBOOK_DIR = "${config.home.homeDirectory}/Nextcloud/notes";
};
home.packages = with pkgs; [
ripgrep
fd
nodejs
opentofu
coursier
# LSP
yaml-language-server
typos-lsp
nodePackages.typescript-language-server
nodePackages.prettier
terraform-ls
sqls
nixd
marksman
lua-language-server
docker-compose-language-service
bash-language-server
angular-language-server
vtsls
zk
metals
];
};
};
}

View file

@ -1,19 +1,13 @@
{ { options, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.hardware.audio; with lib.my;
in let cfg = config.modules.hardware.audio;
{ in {
options.modules.hardware.audio = { options.modules.hardware.audio = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
sound.enable = true;
security.rtkit.enable = true; security.rtkit.enable = true;
@ -23,7 +17,7 @@ in
}; };
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
home.packages = [ pkgs.pulsemixer ]; home.packages = with pkgs.unstable; [ pulsemixer ];
}; };
}; };
} }

View file

@ -1,29 +1,24 @@
{ { options, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.media.emulators; with lib.my;
in let cfg = config.modules.media.emulators;
{ in {
options.modules.media.emulators = { options.modules.media.emulators = {
psx.enable = lib.my.mkBoolOpt false; # Playstation psx.enable = mkBoolOpt false; # Playstation
ds.enable = lib.my.mkBoolOpt false; # Nintendo DS ds.enable = mkBoolOpt false; # Nintendo DS
gc.enable = lib.my.mkBoolOpt false; # GameCube gc.enable = mkBoolOpt false; # GameCube
gb.enable = lib.my.mkBoolOpt false; # GameBoy + GameBoy Color gb.enable = mkBoolOpt false; # GameBoy + GameBoy Color
gba.enable = lib.my.mkBoolOpt false; # GameBoy Advance gba.enable = mkBoolOpt false; # GameBoy Advance
snes.enable = lib.my.mkBoolOpt false; # Super Nintendo snes.enable = mkBoolOpt false; # Super Nintendo
}; };
config = { config = {
user.packages = [ user.packages = with pkgs; [
(lib.mkIf cfg.psx.enable pkgs.duckstation) (mkIf cfg.psx.enable duckstation)
(lib.mkIf cfg.ds.enable pkgs.desmume) (mkIf cfg.ds.enable desmume)
(lib.mkIf cfg.gc.enable pkgs.dolphin-emu) (mkIf cfg.gc.enable dolphinEmu)
(lib.mkIf (cfg.gba.enable || cfg.gb.enable || cfg.snes.enable) pkgs.higan) (mkIf (cfg.gba.enable || cfg.gb.enable || cfg.snes.enable) higan)
]; ];
}; };
} }

View file

@ -1,44 +1,20 @@
{ { options, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.media; with lib.my;
in let cfg = config.modules.media;
{ in {
options.modules.media = { options.modules.media = {
steam.enable = lib.my.mkBoolOpt false; steam.enable = mkBoolOpt false;
lutris.enable = lib.my.mkBoolOpt false; lutris.enable = mkBoolOpt false;
}; };
config = lib.mkMerge [ config = {
{ user.packages = with pkgs; [
user.packages = [ (mkIf cfg.steam.enable steam)
(lib.mkIf cfg.lutris.enable pkgs.lutris) (mkIf cfg.lutris.enable lutris)
(lib.mkIf cfg.lutris.enable pkgs.wine) (mkIf cfg.lutris.enable wine)
(lib.mkIf (cfg.steam.enable || cfg.lutris.enable) pkgs.protontricks) (mkIf (cfg.steam.enable || cfg.lutris.enable) protontricks)
]; ];
} };
(lib.mkIf cfg.steam.enable {
hardware.steam-hardware.enable = true;
programs.steam = {
enable = true;
protontricks.enable = true;
};
})
(lib.mkIf (cfg.steam.enable || cfg.lutris.enable) {
programs.gamemode = {
enable = true;
enableRenice = true;
};
home-manager.users.${config.user.name} = {
programs.mangohud = {
enable = true;
};
};
})
];
} }

View file

@ -1,41 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.modules.media.mopidy;
in
{
options.modules.media.mopidy = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.user.name} =
{ ... }:
{
services.mopidy = {
enable = true;
extensionPackages = with pkgs; [
mopidy-mpd
mopidy-subidy
];
settings = {
mpd = {
enabled = true;
hostname = "0.0.0.0";
port = "6600";
};
subidy = {
url = "https://cloud.banditlair.com/apps/music/subsonic";
username = "paultrial";
password = "oEcMsam5uo8k";
legacy_auth = true;
};
};
};
};
};
}

View file

@ -1,38 +1,34 @@
{ config, lib, ... }: { config, lib, pkgs, ... }:
let with lib;
cfg = config.modules.media.mpd; with lib.my;
in let cfg = config.modules.media.mpd;
{ in {
options.modules.media.mpd = { options.modules.media.mpd = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false; config = mkIf cfg.enable {
}; home-manager.users.${config.user.name} = { config, ... }: {
config = lib.mkIf cfg.enable { services.mpd = {
home-manager.users.${config.user.name} = enable = true;
{ config, ... }: network.listenAddress = "any";
{ musicDirectory = "${config.home.homeDirectory}/Nextcloud/Media/Music";
services.mpd = { playlistDirectory = "${config.home.homeDirectory}/Nextcloud/Playlists";
enable = true; extraConfig = ''
network.listenAddress = "any"; max_output_buffer_size "16384"
musicDirectory = "${config.home.homeDirectory}/Nextcloud/Media/Music"; auto_update "yes"
playlistDirectory = "${config.home.homeDirectory}/Nextcloud/Playlists"; audio_output {
extraConfig = '' type "pulse"
max_output_buffer_size "16384" name "pulse audio"
auto_update "yes" device "pulse"
audio_output { mixer_type "hardware"
type "pulse" }
name "pulse audio" audio_output {
device "pulse" type "fifo"
mixer_type "hardware" name "toggle_visualizer"
} path "/tmp/mpd.fifo"
audio_output { format "44100:16:2"
type "fifo" }
name "toggle_visualizer" '';
path "/tmp/mpd.fifo"
format "44100:16:2"
}
'';
};
}; };
};
}; };
} }

View file

@ -1,32 +1,18 @@
{ { inputs, config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.media.ncmpcpp; with lib.my;
in let cfg = config.modules.media.ncmpcpp;
{ in {
options.modules.media.ncmpcpp = { options.modules.media.ncmpcpp = { enable = mkBoolOpt false; };
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${config.user.name} = { home-manager.users.${config.user.name} = {
home = { home = {
packages = with pkgs; [ packages = with pkgs.unstable; [
( (ncmpcpp.override { visualizerSupport = true; })
(ncmpcpp.override { visualizerSupport = true; }) mpc_cli
# Duplicate fix until it makes its way in unstable
.overrideAttrs
(old: {
configureFlags = old.configureFlags ++ [ (lib.withFeatureAs true "boost" boost.dev) ];
})
)
mpc
]; ];
file.".config/ncmpcpp/config".source = ./config; file.".config/ncmpcpp/config".source = ./config;

View file

@ -1,28 +1,19 @@
{ { config, options, lib, home-manager, ... }:
config,
options,
lib,
...
}:
{ with lib;
options = { with lib.my; {
user = lib.my.mkOpt lib.types.attrs { }; options = with types; { user = mkOpt attrs { }; };
};
config = { config = {
user = { user = {
name = lib.mkDefault "froidmpa"; name = "froidmpa";
description = "The primary user account"; description = "The primary user account";
extraGroups = [ extraGroups = [ "wheel" "adbusers" ];
"wheel"
"adbusers"
];
isNormalUser = true; isNormalUser = true;
}; };
users.users.${config.user.name} = lib.mkAliasDefinitions options.user; users.users.${config.user.name} = mkAliasDefinitions options.user;
home-manager = { home-manager = {
useUserPackages = true; useUserPackages = true;
@ -30,7 +21,7 @@
users.${config.user.name} = { users.${config.user.name} = {
home = { home = {
enableNixpkgsReleaseCheck = true; enableNixpkgsReleaseCheck = true;
inherit (config.system) stateVersion; stateVersion = config.system.stateVersion;
}; };
}; };
}; };

View file

@ -1,19 +1,13 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.services.belgian-eid; with lib.my;
in
{
options.modules.services.belgian-eid = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { let cfg = config.modules.services.belgian-eid;
in {
options.modules.services.belgian-eid = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
services.pcscd.enable = true; services.pcscd.enable = true;

View file

@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFYzCCA0ugAwIBAgIQGdeAPz782qlMfDK9Mp+7DjANBgkqhkiG9w0BAQsFADAe
MRwwGgYDVQQDExNGb3llci1Hcm91cC1Sb290LUNBMB4XDTE5MDIxMjEyNDAzN1oX
DTM5MDIxMjEyNTAzMlowHjEcMBoGA1UEAxMTRm95ZXItR3JvdXAtUm9vdC1DQTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1B7QRo9beAqb8aFGqGBlya
veWDPu/0ZdF4v+GCspw2AvQx9EQW373QLxa9bdnbHmij8tah/hvLaYUksRl/0kbZ
Gik6O8caY+06a3dYwpQkOCjV2tHoPiTsZUyg5hdsQYIvZXmtXlA+qcDc+N5WjPjU
4/KY/kgJNCQBh7DM2OziE6SQMn+i+iKiIuJlCT8Q03Y3FZR0n4aOW90YGYKoISh8
VKuacw0D22MvxhZX8X6zIuMpH8vEXsMwIcCBENEowi0bCye5Aj1Jeyw0mLRUaDfE
aKxFZedrAC3pZKvX9SKLqMPM/NZLgK9WTbTG1c4KrRa1S/OKrUp36y4fgdgEjvPU
WtDaGBSDOqVqylLC5FnJjYEJESQcuOzhiJyYqZY9Cme/9QoiAmPxAVjTFZVBVyJ/
0r6JVygBYS5l3BbV7hJ76aVHrwy4f/CuHlnaIpax99wljvgf0QFEyXHGgzOu8tmc
g08OhlwfydSttMrsrj1wLrOTYbGLek4l4G7hJrtbqV3M0U4lforXhEFl/PWTeh7u
ytgW7RAqC/kCUVFPgZzcgAsFXJHPAhEGjMN8//eY13tn9D9dy8kxGYt+PMHWaPdH
ZYEOrPXogQB8iU0Z7g9pjzX/GPjcsJG6wr2D8yhFmfkanKE3Q7x5xJoeATswpnT5
gYBYJ8EMnQnSydjR/0pbAgMBAAGjgZwwgZkwDgYDVR0PAQH/BAQDAgEGMBIGA1Ud
EwEB/wQIMAYBAf8CAQIwHQYDVR0OBBYEFNZ6BPnRJmRv4hzKAOWlKzYBvH8cMFQG
A1UdIARNMEswSQYJKwYBBAGCnDkBMDwwOgYIKwYBBQUHAgIwLh4sAEwAZQBnAGEA
bAAgAFAAbwBsAGkAYwB5ACAAUwB0AGEAdABlAG0AZQBuAHQwDQYJKoZIhvcNAQEL
BQADggIBAEwuHKngSP8SxCQ0qCWM1uLCdLdpdHnn4WftOczJTotXA8RZvdKQn5N2
BNR8PI3tQ7aauPB/0YNfaGDaDdg2g1is/1Oh0PFaN4mYcbZIJr6El+IDdcPcGngQ
YZYHtXqJ3y82uVM1A8cWPfx44MT5eMoK9sqpaZJaQM12BkhYkUYiAn2qaIRHrj4d
xa3mmuxUqNmxiVcFPv357TvmuGsbmgbtLE+zRzhNStoE3VNd0Efl7wYD84UpKB2x
hC/V5AD+FXwleDdCz2o+U1IjBnBos+cksqsJiLvYg2Fn4C4rRD/bYanOSP3Lh4ll
eHnXOuRDgJLyZj3MRTZl9LD5czxU+pk/luNgJyGiAuykVhcr52PKybxXYCnQmiXw
uCS8DYNjth4uSWIQqPGiNsTerdDsGUFQznTblT5e9ZArXwsa+iGno0AIUPmg08EW
/twNdm0NSVM2tzVoKsUJxNO0GwE+j4NLGdZgxs5NlpmlKqCVK+YX4XHkbfFMu5Z3
Tl+QnLP+XbKej08mO6r8IEmJmnjKvpXOYxme9XCyAeArzrhvIwMfA0Qvy2qpTaBW
WdCWCiVe2F3L3e0afsfIZ/QOApjgU0tT2iz+2cPfVYHMve0RES3CGjdMCN8WHOKt
w654Qw7ZrChUoLsPfjyhlHUB7UipQtIDT79QFxtqdi+HWTO/59Wl
-----END CERTIFICATE-----

View file

@ -1,40 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIG5zCCBM+gAwIBAgITZQAAAAgE68Dg5FuAUQAAAAAACDANBgkqhkiG9w0BAQsF
ADAeMRwwGgYDVQQDExNGb3llci1Hcm91cC1Sb290LUNBMB4XDTE5MDIxMjE1MjYx
N1oXDTI5MDIxMjE1MzYxN1owRDESMBAGCgmSJomT8ixkARkWAmx1MRcwFQYKCZIm
iZPyLGQBGRYHbGVmb3llcjEVMBMGA1UEAxMMRm95ZXItU3ViLUNBMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2lTHYcFx1SjtRKaKKYUwlZBd2PCt9D+D
qdn7qwgL8sEFSvydfIWTyq8fI4VLvjCg93G7hdK/+IKvBMuExNaUXAwquyJ7Xfez
sWPXSpCS9k8LbNpBcTQrjY6vi7ldtaveZlngzwTQ2DMj2jBcEecZCtSYjpF4Tvqd
up9U0wmzJP447cxWg+9PvU8dnt2oipeZLGjh2CjQfm26yrKse/1hEtaBkmeDo9ko
zWEiuJUjoYZ8Zi82iDftW2nwBK/4QBDPYXEcWcL2O+Y4lY5ccgQupqTIrKNuDlU0
lUBaLWeiHH+arMACi8V2PtXssFaG/FOL5IiQrqDOwQTpxUPy5AGF7wIDAQABo4IC
9jCCAvIwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFKkHvhdxLAGlvxPEzggz
LfoVCNLRMFQGA1UdIARNMEswSQYJKwYBBAGCnDkBMDwwOgYIKwYBBQUHAgIwLh4s
AEwAZQBnAGEAbAAgAFAAbwBsAGkAYwB5ACAAUwB0AGEAdABlAG0AZQBuAHQwGQYJ
KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMBIGA1UdEwEB/wQI
MAYBAf8CAQAwHwYDVR0jBBgwFoAU1noE+dEmZG/iHMoA5aUrNgG8fxwwggEKBgNV
HR8EggEBMIH+MIH7oIH4oIH1hoHFbGRhcDovLy9DTj1Gb3llci1Hcm91cC1Sb290
LUNBLENOPUZveWVyLUdyb3VwLVJvb3QtQ0EsQ049Q0RQLENOPVB1YmxpYyUyMEtl
eSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9bGVm
b3llcixEQz1sdT9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0
Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSGK2h0dHA6Ly9jcmwuZm95ZXIubHUv
Rm95ZXItR3JvdXAtUm9vdC1DQS5jcmwwgf0GCCsGAQUFBwEBBIHwMIHtMIGxBggr
BgEFBQcwAoaBpGxkYXA6Ly8vQ049Rm95ZXItR3JvdXAtUm9vdC1DQSxDTj1BSUEs
Q049UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmln
dXJhdGlvbixEQz1sZWZveWVyLERDPWx1P2NBQ2VydGlmaWNhdGU/YmFzZT9vYmpl
Y3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MDcGCCsGAQUFBzAChitodHRw
Oi8vYWlhLmZveWVyLmx1L0ZveWVyLUdyb3VwLVJvb3QtQ0EuY3J0MA0GCSqGSIb3
DQEBCwUAA4ICAQC0RdvBmQkEjTpP0VzBYojCnYBytzU/1eDtOS3t7vB7dRA6oo65
nqjUXvf5jKUD3WA7bZoBL5WO9TFlzyKgPyfGaDks20vS4Xl/bdsq9Cv9wjoenrfa
lTExbZ9u5+UgzY0dnjkJV6cUEx0v6dujviTgwyLPOL3/5JulkwmKb8tcuUedS0GP
MbshL7J73IJ7t5ZwZkJMZ2fAQEsmGjWYupe9vdKCs4WDPiNrw9zU3seuWH5dWqfS
0bO6QROc8Zqrd/+ZE7quxNFw8j/DtTrq+5Xg+uCOV6nGN6ANLbcF1DO6S8mmzXlF
2cPO3UffxCKpM+3zg+NFfOS5S7H71lxm+SgD7Qf0SPxxDOUC3p3urmAKHWvvihfc
Ttd9MOTcF5hi2Edl2NGrORxksnLAyOkPg/9H+JdL0J1h8RrkPhhl87fmQd1VONdP
D8n4/r0hD4RuhWQtih/b/Ode3b2NjW77rHd+5/kHdFAQKoJwXZ2kulJ7ANtT2DkW
hpzdvkhxOchnh39E2PEH6WiMAeKHXHgqGXqiGAWoLvIvk/ciP5VG3m/Nly9J2A7f
C8OhpoJcExnxrL1rHH+QWO3wVvbYrtKSsKqMqS7Bu8gWsAbEw8HpXgdO5TyJ3RHM
yql2gDHKnbshIff/7tjPNwk5mttAPHtignx/MvOnRmnJvpug31v0UVEcig==
-----END CERTIFICATE-----

Binary file not shown.

View file

@ -1,25 +1,19 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.services.docker; with lib.my;
in
{
options.modules.services.docker = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { let cfg = config.modules.services.docker;
in {
options.modules.services.docker = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
virtualisation = { virtualisation = {
docker = { docker = {
enable = true; enable = true;
autoPrune.enable = true; autoPrune.enable = true;
enableOnBoot = lib.mkDefault false; enableOnBoot = mkDefault false;
}; };
}; };

View file

@ -1,19 +1,13 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.services.flatpak; with lib.my;
in
{
options.modules.services.flatpak = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { let cfg = config.modules.services.flatpak;
in {
options.modules.services.flatpak = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
services.flatpak.enable = true; services.flatpak.enable = true;
xdg.portal = { xdg.portal = {

View file

@ -1,57 +0,0 @@
{
config,
lib,
...
}:
let
cfg = config.modules.services.kanata;
in
{
options.modules.services.kanata = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
services.kanata = {
enable = true;
keyboards.laptop.config = ''
;; QWERTY-shaped matrix; works for AZERTY because Kanata uses scancodes.
(defsrc
esc 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
caps a s d f g h j k l ; ' ret
lsft z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet rctl
)
(defvar
tap-time 150
hold-time 200
)
;; Home-row mod-taps (tap sends the letter; hold sends the modifier)
(defalias
a-alt (tap-hold $tap-time $hold-time a lalt)
s-ctl (tap-hold $tap-time $hold-time s lctl)
d-sft (tap-hold $tap-time $hold-time d lsft)
f-met (tap-hold $tap-time $hold-time f lmet)
j-met (tap-hold $tap-time $hold-time j rmet)
k-sft (tap-hold $tap-time $hold-time k rsft)
l-ctl (tap-hold $tap-time $hold-time l rctl)
;-alt (tap-hold $tap-time $hold-time ; ralt)
)
(deflayer main
esc 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
caps @a-alt @s-ctl @d-sft @f-met g h @j-met @k-sft @l-ctl @;-alt ' ret
lsft z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet rctl
)
'';
};
};
}

View file

@ -1,14 +1,13 @@
{ config, lib, ... }: { config, lib, pkgs, ... }:
let with lib;
cfg = config.modules.services.languagetool; with lib.my;
in
{
options.modules.services.languagetool = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { let cfg = config.modules.services.languagetool;
in {
options.modules.services.languagetool = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
services.languagetool = { services.languagetool = {
enable = true; enable = true;
allowOrigin = "*"; allowOrigin = "*";

View file

@ -1,19 +1,13 @@
{ { config, lib, pkgs, ... }:
config,
lib,
pkgs,
...
}:
let with lib;
cfg = config.modules.services.libvirt; with lib.my;
in
{
options.modules.services.libvirt = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable { let cfg = config.modules.services.libvirt;
in {
options.modules.services.libvirt = { enable = mkBoolOpt false; };
config = mkIf cfg.enable {
virtualisation = { virtualisation = {
libvirtd.enable = true; libvirtd.enable = true;

View file

@ -1,60 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.modules.services.work-proxy;
in
{
options.modules.services.work-proxy = {
enable = lib.my.mkBoolOpt false;
};
config = lib.mkIf cfg.enable {
services.tinyproxy = {
enable = true;
settings = {
LogLevel = "Info";
Port = 2345;
Upstream = [
''upstream http wsl:2345 ".microsoftonline.com"''
];
};
};
security.pki.certificateFiles = [
"${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
./certs/Foyer-Group-Root-CA.crt
./certs/Foyer-Sub-CA.crt
];
environment.variables = {
JAVAX_NET_SSL_TRUSTSTORE = ./certs/cacerts;
JAVA_OPTS = "-Djavax.net.ssl.trustStore=${./certs/cacerts} -Djavax.net.ssl.trustStorePassword=changeit";
JAVA_TOOL_OPTIONS = "-Djavax.net.ssl.trustStore=${./certs/cacerts} -Djavax.net.ssl.trustStorePassword=changeit";
};
home-manager.users.${config.user.name} = {
home = {
file.".sbt/repositories".text = ''
[repositories]
local
maven-local
nexus-maven: https://nexus.foyer.lu/repository/mvn-all/
nexus-ivy: https://nexus.foyer.lu/repository/ivy-all/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
nexus-ivy-sbt: https://nexus.foyer.lu/repository/ivy-all/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[artifact](-[classifier])-[type].[ext]
'';
};
};
environment.systemPackages = with pkgs; [
(sbt.override { jre = jdk17; })
mongodb-compass
chisel
];
};
}

View file

@ -1 +1,3 @@
final: prev: { activitywatch-bin = prev.callPackage ./packages/activitywatch.nix { }; } final: prev: {
activitywatch-bin = prev.callPackage ./packages/activitywatch.nix { };
}

View file

@ -1,13 +1,12 @@
{ { lib
lib, , stdenv
stdenv, , fetchzip
fetchzip, , autoPatchelfHook
autoPatchelfHook, , libGL
libGL, , freetype
freetype, , libdrm
libdrm, , fontconfig
fontconfig, , harfbuzz
harfbuzz,
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -19,14 +18,7 @@ stdenv.mkDerivation rec {
sha256 = "sha256-4lfUxJTBpjrsRO+pmW7DNKV69tMr2wiarA5Fy4wPgMk="; sha256 = "sha256-4lfUxJTBpjrsRO+pmW7DNKV69tMr2wiarA5Fy4wPgMk=";
}; };
nativeBuildInputs = [ nativeBuildInputs = [ autoPatchelfHook libGL freetype libdrm fontconfig harfbuzz ];
autoPatchelfHook
libGL
freetype
libdrm
fontconfig
harfbuzz
];
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
cp -r * $out/ cp -r * $out/

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILu2vaezsTNaTY8X4o2mFOmQguPnSAMOoPZRlW2ACAku froidmpa@froidmpa-laptop-2021-06-30

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk6GUenOaMxf0YquxEPubN5zjrfHvqw76IYXxD9NUo6 phfroidmont@stellaris-2025-09-09