diff --git a/files/workspace2.json b/files/i3_communicators_layout.json similarity index 100% rename from files/workspace2.json rename to files/i3_communicators_layout.json diff --git a/flake.nix b/flake.nix index b2a1994..8369617 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,6 @@ { description = ":-)"; + inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; @@ -11,17 +12,7 @@ nur.url = "github:nix-community/NUR"; }; - outputs = { nixpkgs, home-manager, nur, ... }: { - nixosConfigurations = { - "krizej-pc" = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - { nixpkgs.overlays = [ nur.overlay ]; } - nur.nixosModules.nur - home-manager.nixosModules.home-manager - ./configuration.nix - ]; - }; - }; + outputs = { ... } @ inputs: { + nixosConfigurations = import ./hosts { inherit inputs; }; }; } diff --git a/hosts/default.nix b/hosts/default.nix new file mode 100644 index 0000000..ab4ba1f --- /dev/null +++ b/hosts/default.nix @@ -0,0 +1,18 @@ +{ inputs, ... }: +{ + "desktop" = inputs.nixpkgs.lib.nixosSystem { + modules = [ + ./desktop + ../modules + inputs.home-manager.nixosModules.home-manager + ]; + }; + # "laptop" = inputs.nixpkgs.lib.nixosSystem { + # modules = [ + # ./laptop + # ../modules + # # { nixpkgs.overlays = [ nur.overlay ]; } + # # nur.nixosModules.nur + # ]; + # }; +} \ No newline at end of file diff --git a/hosts/desktop/default.nix b/hosts/desktop/default.nix new file mode 100644 index 0000000..30a807c --- /dev/null +++ b/hosts/desktop/default.nix @@ -0,0 +1,130 @@ +{ config, pkgs, ... }: +{ + imports = [ + ./hardware-configuration.nix + ]; + + config = let + monitors = { + primary = "DisplayPort-2"; + secondary = "HDMI-A-0"; + }; + user = config.chuj.system.user; + in { + hardware.amdgpu.amdvlk.enable = true; + boot = { + loader = { + timeout = 2; + grub = { + enable = true; + device = "/dev/disk/by-id/ata-Samsung_SSD_860_EVO_500GB_S4CNNE0M700172J"; + gfxmodeBios = "auto"; # 1920x1080 did not work, this doesn't either + splashImage = null; + font = null; + }; + }; + # this doesn't even work + kernelParams = [ + "video=${monitors.primary}:1920x1080@240" + "video=${monitors.secondary}:1920x1080@75" + ]; + initrd.kernelModules = [ "amdgpu" ]; + }; + environment.systemPackages = [ pkgs.ntfs3g ]; # for hdd disk + + home-manager.users.${user}.home.packages = with pkgs; [ + pamixer + kicad + sqlitebrowser + obs-studio + yt-dlp + aseprite + cloc + viu + ]; + + chuj = { + system = { + user = "krizej"; + host = "desktop"; + platform = "x86_64-linux"; + groups = [ "dialout" ]; + }; + + home-manager.enable = true; + + stuff = { + xserver.enable = true; + sddm.enable = true; + alacritty.enable = true; + vim.enable = true; + firefox.enable = true; + thunar.enable = true; + flameshot.enable = true; + git.enable = true; + other-desktop-programs.enable = true; + other-dev-programs.enable = true; + gaming.enable = true; + documentation.enable = true; + theme.enable = true; + + autorandr = { + enable = true; + fingerprint = { + "Left" = "00ffffffffffff0026cd5961830600001d1f0104b5361e783b4c70a5574ea4260b5054a56b80710081408180a940b3009500950fd1c0023a801871382d40582c4500202f2100001e000000ff0031313737393132393031363637000000fd0030f0ffff3c010a202020202020000000fc00504c3235393048530a20202020019202033bf1529005040302011112131f203f140607151640e200d52309070783010000e305c301e60605016666006d1a0000020130f00000000000005a8780a070384d4030203500202f2100001ad09480a070381e4008203500202f2100001a23e88078703887401c40980c202f2100001a000000000000000000000000000063"; + "Right" = "00ffffffffffff0026cd326162190000291c010380361e782a9055a75553a028135054a56b80710081408180a940b3009500950fd1c0023a801871382d40582c4500202f2100001e000000ff0031313534333834313036343938000000fd00374c1e5312000a202020202020000000fc00504c32353330480a2020202020016202032bf14f90050403020111121314060715161f230907078301000065030c001000681a00000101284be6023a801871382d40582c4500202f2100001f011d8018711c1620582c2500202f2100009e011d007251d01e206e285500202f2100001e2a4480a07038274030203500202f2100001a000000000000000000000000ab"; + }; + config = { + "Left" = { + enable = true; + mode = "1920x1080"; + rate = "239.76"; + position = "0x0"; + primary = true; + }; + "Right" = { + enable = true; + mode = "1920x1080"; + rate = "74.97"; + position = "1920x0"; + }; + }; + }; + + fish = { + enable = true; + extraAliases = { + "rebuild" = "sudo nixos-rebuild switch --flake ~/nix#desktop -v"; + }; + }; + + i3 = { + enable = true; + workspaceOutput = { + "1" = monitors.primary; + "2" = monitors.secondary; + }; + }; + + ssh = { + enable = true; + keys = { + "git@github.com".file = "github"; + "forgejo@git.jacekpoz.pl".file = "jacekgit"; + "krizej@192.168.1.12".file = "rpi"; + "discord@zasadzka.pl" = { + file = "zasadzka"; + env."TERM" = "xterm-256color"; + }; + }; + }; + + dunst = { + enable = true; + output = monitors.secondary; + side = "left"; + }; + }; + }; + }; +} diff --git a/hardware-configuration.nix b/hosts/desktop/hardware-configuration.nix similarity index 100% rename from hardware-configuration.nix rename to hosts/desktop/hardware-configuration.nix diff --git a/configuration.nix b/hosts/laptop/default.nix similarity index 50% rename from configuration.nix rename to hosts/laptop/default.nix index 918d0a2..7de51bf 100644 --- a/configuration.nix +++ b/hosts/laptop/default.nix @@ -1,9 +1,6 @@ -{ ... }: +{ pkgs, ... }: { imports = [ ./hardware-configuration.nix - ./programs - ./services - ./misc ]; -} +} \ No newline at end of file diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..5b59ac4 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,25 @@ +{ ... }: +{ + imports = [ + ./system.nix + ./home-manager.nix + ./stuff/ssh.nix + ./stuff/alacritty.nix + ./stuff/dunst.nix + ./stuff/firefox.nix + ./stuff/fish.nix + ./stuff/flameshot.nix + ./stuff/git.nix + ./stuff/i3.nix + ./stuff/autorandr.nix + ./stuff/sddm.nix + ./stuff/thunar.nix + ./stuff/vim.nix + ./stuff/xserver.nix + ./stuff/documentation.nix + ./stuff/theme.nix + ./stuff/gaming.nix + ./stuff/other-desktop-programs.nix + ./stuff/other-dev-programs.nix + ]; +} \ No newline at end of file diff --git a/modules/home-manager.nix b/modules/home-manager.nix new file mode 100644 index 0000000..883f04d --- /dev/null +++ b/modules/home-manager.nix @@ -0,0 +1,35 @@ +{ lib, pkgs, config, inputs, self, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.home-manager; + user = config.chuj.system.user; +in { + options.chuj.home-manager = { + enable = mkEnableOption "home-manager"; + }; + + # https://git.jacekpoz.pl/jacekpoz/niksos/src/branch/main/modules/other/home-manager.nix + + # imports = [ inputs.home-manager.nixosModules.home-manager ]; + + config = mkIf cfg.enable { + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + extraSpecialArgs = { inherit inputs self; }; + users.${user} = { + programs = { + home-manager.enable = true; + direnv = { + enable = true; + nix-direnv.enable = true; + }; + }; + home = { + username = user; + homeDirectory = "/home/${user}"; + stateVersion = lib.mkDefault "23.11"; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/alacritty.nix b/modules/stuff/alacritty.nix new file mode 100644 index 0000000..cf49eb5 --- /dev/null +++ b/modules/stuff/alacritty.nix @@ -0,0 +1,53 @@ +{ lib, pkgs, config, ... }: let + inherit (lib) mkIf mkEnableOption; + cfg = config.chuj.stuff.alacritty; +in { + options.chuj.stuff.alacritty = { + enable = mkEnableOption "alacritty"; + }; + + config = mkIf cfg.enable { + home-manager.users.krizej.programs.alacritty = { + package = pkgs.alacritty-sixel; + enable = true; + settings = { + font.size = 10; + window.padding = { x = 2; y = 2; }; + cursor = { + style = { + shape = "Beam"; + blinking = "On"; + }; + blink_timeout = 0; + unfocused_hollow = false; + }; + colors = { + primary = { + foreground = "#e4e4ef"; + background = "#181818"; + }; + normal = { + black = "#202020"; + red = "#f43841"; + green = "#73c936"; + yellow = "#ffdd33"; + blue = "#5a81ce"; + magenta = "#ae65b7"; + cyan = "#71afcf"; + white = "#dddddd"; + }; + bright = { + black = "#282828"; + red = "#ff4f58"; + green = "#91d956"; + yellow = "#ffee55"; + blue = "#71afe8"; + magenta = "#ce85e7"; + cyan = "#91dfef"; + white = "#f4f4ff"; + }; + }; + }; + }; + }; +} diff --git a/modules/stuff/autorandr.nix b/modules/stuff/autorandr.nix new file mode 100644 index 0000000..c23e9e5 --- /dev/null +++ b/modules/stuff/autorandr.nix @@ -0,0 +1,40 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption types; + cfg = config.chuj.stuff.autorandr; + user = config.chuj.system.user; +in { + options.chuj.stuff.autorandr = { + enable = mkEnableOption "autorandr"; + fingerprint = mkOption { + type = types.attrs; + default = null; + }; + config = mkOption { + type = types.attrs; + default = null; + }; + }; + + config = mkIf cfg.enable { + home-manager.users.${user} = { + programs.autorandr = { + enable = true; + profiles."main" = { inherit (cfg) fingerprint config; }; + }; + # the autorandr service from home-manager sucks, can't customize flags + services.autorandr.enable = false; + systemd.user.services.autorandr = { + Unit = { + Description = "autorandr"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + Type = "oneshot"; + ExecStart = "${pkgs.autorandr}/bin/autorandr --match-edid -l main"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/desktop-programs.nix b/modules/stuff/desktop-programs.nix new file mode 100644 index 0000000..dbab115 --- /dev/null +++ b/modules/stuff/desktop-programs.nix @@ -0,0 +1,23 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.other-desktop-programs; + user = config.chuj.system.user; +in { + options.chuj.stuff.other-desktop-programs = { + enable = mkEnableOption "other-desktop-programs"; + }; + + config = mkIf cfg.enable { + home-manager.users.${user}.home.packages = with pkgs; [ + pavucontrol + + element-desktop + discord + + libreoffice-qt + gimp + vlc + qimgv + ]; + }; +} \ No newline at end of file diff --git a/modules/stuff/dev-programs.nix b/modules/stuff/dev-programs.nix new file mode 100644 index 0000000..1d56ca7 --- /dev/null +++ b/modules/stuff/dev-programs.nix @@ -0,0 +1,29 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.other-dev-programs; + user = config.chuj.system.user; +in { + options.chuj.stuff.other-dev-programs = { + enable = mkEnableOption "other-dev-programs"; + + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + cmake + pkg-config + nixd + gdb + clang-tools + valgrind + linuxKernel.packages.linux_6_6.perf + ccache + ]; + + home-manager.users.${user}.home.packages = with pkgs; [ + # TODO: plugins + jetbrains.pycharm-community + jetbrains.clion + ]; + }; +} \ No newline at end of file diff --git a/modules/stuff/documentation.nix b/modules/stuff/documentation.nix new file mode 100644 index 0000000..44da933 --- /dev/null +++ b/modules/stuff/documentation.nix @@ -0,0 +1,37 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption types; + cfg = config.chuj.stuff.documentation; + user = config.chuj.system.user; +in { + options.chuj.stuff.documentation = { + enable = mkEnableOption "documentation"; + cDeveloper = mkOption { + type = types.bool; + default = true; + }; + }; + + config = mkIf cfg.enable { + documentation = { + enable = true; + dev.enable = true; + doc.enable = false; + info.enable = false; + man = { + enable = true; + generateCaches = false; + man-db.enable = false; + mandoc.enable = true; + }; + }; + home-manager.users.${user}.home.sessionVariables = mkIf cfg.cDeveloper { + # c docs first + "MANSECT" = "2:3:3p:3type:1:1p:n:l:8:0:0p:5:4:9:6:7"; + }; + environment.systemPackages = with pkgs; [ + man + man-pages + man-pages-posix + ]; + }; +} \ No newline at end of file diff --git a/modules/stuff/dunst.nix b/modules/stuff/dunst.nix new file mode 100644 index 0000000..ceb209d --- /dev/null +++ b/modules/stuff/dunst.nix @@ -0,0 +1,34 @@ +{ lib, pkgs, config, ... }: let + inherit (lib) mkIf mkEnableOption mkOption types; + cfg = config.chuj.stuff.dunst; + user = config.chuj.system.user; +in { + options.chuj.stuff.dunst = { + enable = mkEnableOption "dunst"; + output = mkOption { + type = types.str; + default = null; + }; + side = mkOption { + type = types.str; + default = "right"; + }; + }; + + config = mkIf cfg.enable { + home-manager.users.${user}.services.dunst = { + enable = true; + settings = { + global = { + monitor = if cfg.output != null then cfg.output else 0; + origin = "bottom-${cfg.side}"; + frame_width = 1; + background = "#333333"; + foreground = "#feeeee"; + font = "JetBrains Mono NL 10"; + frame_color = "#4c7899"; + }; + }; + }; + }; +} diff --git a/modules/stuff/firefox.nix b/modules/stuff/firefox.nix new file mode 100644 index 0000000..ee4f13d --- /dev/null +++ b/modules/stuff/firefox.nix @@ -0,0 +1,177 @@ +{ lib, pkgs, config, ... }: let + cfg = config.chuj.stuff.firefox; + inherit (lib) mkIf mkEnableOption mkOption types; +in { + options.chuj.stuff.firefox = { + enable = mkEnableOption "firefox"; + }; + + config = mkIf cfg.enable { + home-manager.users.krizej.programs.firefox = { + enable = true; + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisableFirefoxAccounts = true; + DisableAccounts = true; + DisableFirefoxScreenshots = true; + OverridePostUpdatePage = ""; + DontCheckDefaultBrowser = true; + DisplayBookmarksToolbar = "always"; + DisplayMenuBar = "default-off"; + SearchBar = "unified"; + DefaultDownloadDirectory = "$HOME/downloads"; + ExtensionSettings = { + # ublock origin + "uBlock0@raymondhill.net" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + installation_mode = "force_installed"; + }; + # youtube redux + "{2d4c0962-e9ff-4cad-8039-9a8b80d9b8b6}" = { + install_url = "https://addons.mozilla.org/firefox/downloads/file/4224361/latest.xpi"; + installation_mode = "force_installed"; + }; + # sponsorblock + "sponsorBlocker@ajay.app" = { + install_url = "https://addons.mozilla.org/firefox/downloads/file/4251917/latest.xpi"; + installation_mode = "force_installed"; + }; + # legacy wikipedia layout + "{484f3bc9-b13b-4498-8ea6-124c199c5ca8}" = { + install_url = "https://addons.mozilla.org/firefox/downloads/file/4100662/latest.xpi"; + installation_mode = "force_installed"; + }; + }; + }; + profiles.krizej = { + id = 0; + isDefault = true; + search = { + default = "envs.net - SearXNG"; + force = true; + engines = { + "envs.net - SearXNG" = { + urls = [ { template = "https://searx.envs.net/searxng/search?q={searchTerms}"; } ]; + icon = "https://envs.net/favicon.ico"; + iconUpdateURL = "https://envs.net/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; + definedAliases = [ "@sx" ]; + }; + + # searx sometimes sucks + "Google".metaData.alias = "@g"; + + "Wikipedia (en)".metaData.alias = "@w"; + + "Nix Packages" = { + urls = [ { template = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}"; } ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@np" ]; + }; + "Nix Options" = { + urls = [ { template = "https://search.nixos.org/options?channel=unstable&query={searchTerms}"; } ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@no" ]; + }; + "Home Manger" = { + urls = [ { template = "https://home-manager-options.extranix.com/?release=master&query={searchTerms}"; } ]; + icon = "https://home-manager-options.extranix.com/images/favicon.png"; + iconUpdateURL = "https://home-manager-options.extranix.com/images/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; + definedAliases = [ "@hm" ]; + }; + "Arch Wiki" = { + urls = [ { template = "https://wiki.archlinux.org/index.php?search={searchTerms}"; } ]; + icon = "https://wiki.archlinux.org/favicon.ico"; + iconUpdateURL = "https://wiki.archlinux.org/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; + definedAliases = [ "@aw" ]; + }; + "NixOS Wiki" = { + # todo the other nix wiki + urls = [ { template = "https://nixos.wiki/index.php?search={searchTerms}&go=Go"; } ]; + icon = "https://nixos.wiki/favicon.png"; + iconUpdateURL = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; + definedAliases = [ "@nw" ]; + }; + + # todo: add polish wikipedia and wolfram alpha and noogle.dev + + # the rest can fuck off + "Bing".metaData.hidden = true; + "DuckDuckGo".metaData.hidden = true; + "eBay".metaData.hidden = true; # ??? who up ebaying they firegfox + }; + }; + settings = { + "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; + "services.sync.prefs.sync.extensions.activeThemeID" = "false"; + # https://git.jacekpoz.pl/jacekpoz/niksos/src/branch/master/modules/gui/firefox.nix#L405 + # but modified (a bit) + "browser.aboutConfig.showWarning" = false; + "browser.startup.page" = 0; + "browser.startup.homepage" = "about:home"; + "browser.newtabpage.enabled" = true; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.default.sites" = ""; + "extensions.getAddons.showPane" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; + "browser.discovery.enabled" = false; + "extensions.unifiedExtensions.enabled" = false; + "datareporting.policy.dataSubmissionEnabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.server" = "data:,"; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.newProfilePing.enabled" = false; + "toolkit.telemetry.shutdownPingSender.enabled" = false; + "toolkit.telemetry.updatePing.enabled" = false; + "toolkit.telemetry.bhrPing.enabled" = false; + "toolkit.telemetry.firstShutdownPing.enabled" = false; + "toolkit.telemetry.coverage.opt-out" = true; + "toolkit.coverage.endpoint.base" = ""; + "browser.ping-centre.telemetry" = false; + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "app.shield.optoutstudies.enabled" = false; + "app.normandy.enabled" = false; + "app.normandy.api_url" = ""; + "breakpad.reportURL" = ""; + "browser.tabs.crashReporting.sendReport" = false; + "browser.crashReports.unsubmittedCheck.enabled" = false; + "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; + "captivedetect.canonicalURL" = ""; + "network.captive-portal-service.enabled" = false; + "network.connectivity-service.enabled" = false; + "browser.safebrowsing.malware.enabled" = false; + "browser.safebrowsing.phishing.enabled" = false; + "browser.safebrowsing.downloads.enabled" = false; + "browser.safebrowsing.downloads.remote.enabled" = false; + "browser.safebrowsing.downloads.remote.url" = ""; + "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; + "browser.safebrowsing.downloads.remote.block_uncommon" = false; + "browser.safebrowsing.allowOverride" = false; + "privacy.resistFingerprinting.block_mozAddonManager" = true; + + "gfx.webrender.all" = true; + # "media.ffmpeg.vaapi.enabled" = true; + + # "identity.sync.tokenserver.uri" = "https://ffsync.jacekpoz.pl/1.0/sync/1.5"; + + "dom.private-attribution.submission.enabled" = false; + }; + }; + }; + }; +} diff --git a/modules/stuff/fish.nix b/modules/stuff/fish.nix new file mode 100644 index 0000000..9bf387c --- /dev/null +++ b/modules/stuff/fish.nix @@ -0,0 +1,113 @@ +{ lib, pkgs, config, ... }: let + inherit (lib) mkIf mkEnableOption mkOption types mergeAttrs; + cfg = config.chuj.stuff.fish; + user = config.chuj.system.user; +in { + options.chuj.stuff.fish = { + enable = mkEnableOption "fish"; + extraAliases = mkOption { + type = types.attrs; + default = {}; + }; + }; + + config = let + XDG_DATA_HOME = config.home-manager.users.${user}.xdg.dataHome; + in mkIf cfg.enable { + environment.systemPackages = [ pkgs.fish ]; + programs.fish.enable = true; + users.users.${user}.shell = pkgs.fish; + + programs.fish.promptInit = '' + ${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source + ''; + + home-manager.users.${user}.programs.fish = { + enable = true; + + shellAliases = mergeAttrs { + "ls" = "${pkgs.eza}/bin/eza -lhs type"; + "cp" = "cp -v"; + "mv" = "mv -v"; + "ytmp3" = "yt-dlp -o '%(title)s.%(ext)s' -x --audio-format mp3"; + "myip" = "curl ifconfig.me"; + "0x0" = ''curl -F"file=@$argv" https://0x0.st''; + "wget" = "${pkgs.wget}/bin/wget --hsts-file='${XDG_DATA_HOME}/wget-hsts'"; + } cfg.extraAliases; + + shellAbbrs = { # mkif xclip in pkgs + "2clip" = "xclip -selection clipboard"; + }; + + functions = { + "fish_greeting" = "${(pkgs.fortune.override { withOffensive = true; })}/bin/fortune"; + "fish_prompt" = '' + # name: Informative Vcs + # author: Mariusz Smykula + + # function fish_prompt --description 'Write out the prompt' + set -l last_pipestatus $pipestatus + set -lx __fish_last_status $status # Export for __fish_print_pipestatus. + + if not set -q __fish_git_prompt_show_informative_status + set -g __fish_git_prompt_show_informative_status 1 + end + if not set -q __fish_git_prompt_hide_untrackedfiles + set -g __fish_git_prompt_hide_untrackedfiles 1 + end + if not set -q __fish_git_prompt_color_branch + set -g __fish_git_prompt_color_branch magenta --bold + end + if not set -q __fish_git_prompt_showupstream + set -g __fish_git_prompt_showupstream informative + end + if not set -q __fish_git_prompt_color_dirtystate + set -g __fish_git_prompt_color_dirtystate blue + end + if not set -q __fish_git_prompt_color_stagedstate + set -g __fish_git_prompt_color_stagedstate yellow + end + if not set -q __fish_git_prompt_color_invalidstate + set -g __fish_git_prompt_color_invalidstate red + end + if not set -q __fish_git_prompt_color_untrackedfiles + set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal + end + if not set -q __fish_git_prompt_color_cleanstate + set -g __fish_git_prompt_color_cleanstate green --bold + end + + set -l color_cwd + set -l suffix + if functions -q fish_is_root_user; and fish_is_root_user + if set -q fish_color_cwd_root + set color_cwd $fish_color_cwd_root + else + set color_cwd $fish_color_cwd + end + set suffix '#' + else + set color_cwd $fish_color_cwd + set suffix '$' + end + + # PWD + set_color $color_cwd + echo -n (prompt_pwd) + set_color normal + + printf '%s ' (fish_vcs_prompt) + + set -l status_color (set_color $fish_color_status) + set -l statusb_color (set_color --bold $fish_color_status) + set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus) + echo -n $prompt_status + set_color normal + + echo -n "$suffix " + # end + ''; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/flameshot.nix b/modules/stuff/flameshot.nix new file mode 100644 index 0000000..84c4b7c --- /dev/null +++ b/modules/stuff/flameshot.nix @@ -0,0 +1,19 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.flameshot; +in { + options.chuj.stuff.flameshot = { + enable = mkEnableOption "flameshot"; + }; + config = mkIf cfg.enable { + home-manager.users.krizej.services.flameshot = { + enable = true; + settings = { + General = { + disabledTrayIcon = true; + showStartupLaunchMessage = false; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/gaming.nix b/modules/stuff/gaming.nix new file mode 100644 index 0000000..63788f8 --- /dev/null +++ b/modules/stuff/gaming.nix @@ -0,0 +1,39 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption types optionals; + cfg = config.chuj.stuff.gaming; + user = config.chuj.system.user; +in { + options.chuj.stuff.gaming = let + gameOption = mkOption { type = types.bool; default = true; }; + in { + enable = mkEnableOption "gaming"; + quake = gameOption; + homm3 = gameOption; + dosbox = gameOption; + ror2 = gameOption; + }; + + config = mkIf cfg.enable { + programs.steam.enable = true; + + home-manager.users.${user}.home.packages = with pkgs; ([ + wineWowPackages.stable + winetricks + ] + ++ optionals cfg.dosbox [ dosbox-staging ] + ++ optionals cfg.ror2 [ r2modman ] + ++ optionals cfg.quake [ vkquake ericw-tools-latest trenchbroom fteqcc gmqcc ] + ++ optionals cfg.homm3 [ + # todo download it from rpi maybe or something + (pkgs.writeShellScriptBin "homm3" '' + cd ~/games/homm3 + wine HD_Launcher.exe + '') + ]); + + # Trenchbroom + nixpkgs.config.permittedInsecurePackages = optionals cfg.quake [ + "freeimage-unstable-2021-11-01" + ]; + }; +} \ No newline at end of file diff --git a/modules/stuff/git.nix b/modules/stuff/git.nix new file mode 100644 index 0000000..0ed254b --- /dev/null +++ b/modules/stuff/git.nix @@ -0,0 +1,18 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.git; + user = config.chuj.system.user; +in { + options.chuj.stuff.git = { + enable = mkEnableOption "git"; + }; + config = { + environment.systemPackages = [ pkgs.git ]; + home-manager.users.${user}.programs.git = { + enable = true; + userName = "krizej"; + userEmail = "krizej@protonmail.com"; + extraConfig.init.defaultBranch = "master"; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/i3.nix b/modules/stuff/i3.nix new file mode 100644 index 0000000..bfb7443 --- /dev/null +++ b/modules/stuff/i3.nix @@ -0,0 +1,279 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption types; + cfg = config.chuj.stuff.i3; + user = config.chuj.system.user; +in { + options.chuj.stuff.i3 = { + enable = mkEnableOption "i3"; + workspaceOutput = mkOption { + type = types.attrsOf types.str; + default = {}; + }; + communicators = mkOption { + type = types.submodule { + options = { + autostart = mkOption { + type = types.bool; + default = true; + }; + workspace = mkOption { + type = types.str; + default = "2"; + }; + }; + }; + default = {}; + }; + }; + + config = let + HOME = config.home-manager.users.${user}.home.homeDirectory; + in mkIf cfg.enable { + services.xserver.windowManager.i3.enable = true; + home-manager.users.${user} = { + xsession.windowManager.i3 = { + enable = true; + config = rec { + assigns = mkIf (cfg.communicators.workspace != null) { + ${cfg.communicators.workspace} = [ + { class = "discord"; } + { class = "SchildiChat"; } + { class = "element"; } + ]; + }; + + window = { + border = 1; + titlebar = true; + }; + + floating = { + border = 1; + titlebar = true; + criteria = [ + { class = "zenity"; } + { class = "fceux"; } + { title = "Friends List"; } + ]; + }; + + gaps = { + inner = 0; + outer = 0; + }; + + fonts = { + names = [ "JetBrains Mono NL" ]; + size = 10.0; + }; + + bars = [ + { + inherit fonts; + trayOutput = "primary"; + statusCommand = "${pkgs.i3status}/bin/i3status"; + } + ]; + + defaultWorkspace = "workspace number 1"; + + workspaceOutputAssign = lib.mapAttrsToList + (workspace: output: { inherit workspace output; }) + cfg.workspaceOutput; + + focus = { + followMouse = true; + mouseWarping = true; + newWindow = "urgent"; + }; + + startup = [ + { command = "autotiling &"; notification = false; } + # { command = "mpd &"; notification = false; } + ] + ++ optionals config.chuj.stuff.dunst.enable { command = "dunst &"; notification = false; } + ++ optionals config.chuj.stuff.flameshot.enable { command = "flameshot &"; notification = false; } + ++ optionals cfg.communicators.autostart [ + { command = "i3-msg \"workspace ${cfg.communicators.workspace}; append_layout ${../../files/i3_communicators_layout.json}\""; notification = false; } + { command = "discord &"; notification = false; } + { command = "element-desktop &"; notification = false; } + ]; + + modes = let + cmd_and_center = cmd: "exec --no-startup-id i3-msg '${cmd}' && i3-center-mouse-on-focus"; + in { + resize = { + "Left" = cmd_and_center "resize shrink width 10 px or 10 ppt"; + "Right" = cmd_and_center "resize grow width 10 px or 10 ppt"; + "Up" = cmd_and_center "resize shrink height 10 px or 10 ppt"; + "Down" = cmd_and_center "resize grow height 10 px or 10 ppt"; + "Escape" = "mode default"; + }; + }; + + modifier = "Mod4"; + floating.modifier = "Mod4"; + + keybindings = let + mod = modifier; + execns = "exec --no-startup-id"; + cmd_and_center = cmd: "${execns} i3-msg '${cmd}' && i3custom-center-mouse-on-focus"; + in { + # Program keybinds + "${mod}+Return" = ''${execns} ${if config.chuj.stuff.alacritty.enable then "alacritty" else "i3-sensible-terminal"}''; + "${mod}+Shift+s" = mkIf config.chuj.stuff.flameshot.enable "${execns} flameshot gui"; + "${mod}+b" = mkIf config.chuj.stuff.firefox.enable "${execns} firefox"; + "${mod}+d" = "${execns} dmenu_run"; + "--release ${mod}+k" = "${execns} xkill"; + + # Volume control + "Ctrl+F9" = "${execns} pamixer --toggle-mute"; + "Ctrl+F10" = "${execns} pamixer --decrease 5"; + "Ctrl+F11" = "${execns} pamixer --increase 5"; + + # MPD controls + # "Ctrl+F5" = "exec ~/music/select_music.sh"; + # "Ctrl+F6" = "exec mpc prev"; + # "Ctrl+F7" = "exec mpc toggle"; + # "Ctrl+F8" = "exec mpc next"; + # "Ctrl+Shift+F6" = "exec mpc seek -3"; + # "Ctrl+Shift+F7" = "exec mpc clear"; + # "Ctrl+Shift+F8" = "exec mpc seek +3"; + # "Ctrl+Shift+F10" = ''exec mpc volume -5 && dunstify "mpc $(mpc volume)" -r 420''; + # "Ctrl+Shift+F11" = ''exec mpc volume +5 && dunstify "mpc $(mpc volume)" -r 420''; + + # General i3 keybindings + "${mod}+f" = cmd_and_center "fullscreen toggle"; + "${mod}+r" = "mode resize"; + "${mod}+Shift+q" = cmd_and_center "kill"; + "${mod}+Shift+r" = "restart"; + "${mod}+Shift+e" = "${execns} i3-nagbar -t warning -m 'exit?' -b 'yes' 'i3-msg exit'"; + # Mouse bindings + "--border button3" = "${execns} i3custom-window-actions"; + + "${mod}+Left" = cmd_and_center "focus left"; + "${mod}+Right" = cmd_and_center "focus right"; + "${mod}+Up" = cmd_and_center "focus up"; + "${mod}+Down" = cmd_and_center "focus down"; + "${mod}+Shift+Left" = cmd_and_center "move left"; + "${mod}+Shift+Right" = cmd_and_center "move right"; + "${mod}+Shift+Up" = cmd_and_center "move up"; + "${mod}+Shift+Down" = cmd_and_center "move down"; + + "${mod}+q" = cmd_and_center "layout stacking"; + "${mod}+w" = cmd_and_center "layout tabbed"; + "${mod}+e" = cmd_and_center "layout toggle split"; + + "${mod}+Shift+space" = "floating toggle; ${execns} i3custom-center-mouse-on-focus"; + "${mod}+space" = cmd_and_center "focus mode_toggle"; + + "${mod}+1" = cmd_and_center "workspace number 1"; + "${mod}+2" = cmd_and_center "workspace number 2"; + "${mod}+3" = cmd_and_center "workspace number 3"; + "${mod}+4" = cmd_and_center "workspace number 4"; + "${mod}+5" = cmd_and_center "workspace number 5"; + "${mod}+6" = cmd_and_center "workspace number 6"; + "${mod}+7" = cmd_and_center "workspace number 7"; + "${mod}+8" = cmd_and_center "workspace number 8"; + "${mod}+9" = cmd_and_center "workspace number 9"; + "${mod}+0" = cmd_and_center "workspace number 10"; + + "${mod}+Shift+1" = cmd_and_center "move container to workspace number 1"; + "${mod}+Shift+2" = cmd_and_center "move container to workspace number 2"; + "${mod}+Shift+3" = cmd_and_center "move container to workspace number 3"; + "${mod}+Shift+4" = cmd_and_center "move container to workspace number 4"; + "${mod}+Shift+5" = cmd_and_center "move container to workspace number 5"; + "${mod}+Shift+6" = cmd_and_center "move container to workspace number 6"; + "${mod}+Shift+7" = cmd_and_center "move container to workspace number 7"; + "${mod}+Shift+8" = cmd_and_center "move container to workspace number 8"; + "${mod}+Shift+9" = cmd_and_center "move container to workspace number 9"; + "${mod}+Shift+0" = cmd_and_center "move container to workspace number 10"; + }; + }; + }; + + programs.i3status = { + enable = true; + enableDefault = false; + + general = { + interval = 1; + colors = true; + color_good = "#91d956"; + color_bad = "#f43841"; + color_degraded = "#ffdd33"; + output_format = "i3bar"; + }; + + modules = { + # todo MPD module (using read_file most likely, or switch to i3blocks) + + "cpu_usage" = { + position = 0; + settings = { + format = "cpu: %usage"; + }; + }; + + "memory" = { + position = 1; + settings = { + format = "mem: %used"; + threshold_degraded = "1G"; + format_degraded = "MEMORY < %available"; + }; + }; + + "volume master" = { + position = 2; + settings = { + color_degraded = "#333333"; + format = "vol: %volume"; + format_muted = "vol: ---"; + }; + }; + + "tztime local" = { + position = 3; + settings = { + format = "%Y-%m-%d %H:%M:%S (%A)"; + }; + }; + }; + }; + + home.packages = with pkgs; [ + autotiling + + (pkgs.writeShellScriptBin "i3custom-center-mouse-on-focus" '' + eval $(xdotool getwindowfocus getwindowgeometry --shell) + MX=$(($X + $WIDTH / 2)) + MY=$(($Y + $HEIGHT / 2)) + xdotool mousemove $MX $MY + '') + + (pkgs.writeShellScriptBin "i3custom-window-actions" '' + ${pkgs.yad}/bin/yad --splash --mouse \ + --title="i3 window actions" \ + --gtkrc="${HOME}/.config/i3/i3gtk.css" \ + --text="i3 window actions" \ + --button float:0 --button kill:1 + + case $? in + 0) i3-msg "floating toggle";; + 1) i3-msg "kill";; + -1) ;; + esac + '') + + (pkgs.writeShellScriptBin "i3custom-floating-toggle" '' + i3-msg "mark --add _; [con_mark=f] floating disable, border pixel 1, mark --add --toggle _; [con_mark=_] floating enable, border normal; mark --add --toggle f;" + '') + ]; + + home.file = { + ".config/i3/i3gtk.css".source = ../../files/i3gtk.css; + }; + }; + }; +} diff --git a/modules/stuff/sddm.nix b/modules/stuff/sddm.nix new file mode 100644 index 0000000..4676350 --- /dev/null +++ b/modules/stuff/sddm.nix @@ -0,0 +1,29 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.sddm; +in { + options.chuj.stuff.sddm = { + enable = mkEnableOption "sddm"; + }; + + config = mkIf cfg.enable { + services.displayManager = { + # ah fuck this + defaultSession = "none+i3"; + sddm = { + enable = true; + theme = "sddm-i3-theme"; + settings = { + General = { + InputMethod = ""; + }; + }; + }; + }; + + environment.systemPackages = [ + pkgs.sddm-i3-theme + pkgs.libsForQt5.sddm + ]; + }; +} \ No newline at end of file diff --git a/modules/stuff/ssh.nix b/modules/stuff/ssh.nix new file mode 100644 index 0000000..1a1d4f9 --- /dev/null +++ b/modules/stuff/ssh.nix @@ -0,0 +1,32 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) elemAt splitString mapAttrs' hasAttr mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.ssh; + user = config.chuj.system.user; +in { + options.chuj.stuff.ssh = { + enable = mkEnableOption "ssh"; + keys = mkOption { + type = lib.types.attrs; + default = {}; + }; + }; + config = mkIf cfg.enable { + services.openssh.enable = true; + home-manager.users.${user}.programs.ssh = { + enable = true; + matchBlocks = mapAttrs' + (host: hostcfg: { + name = elemAt (splitString "@" host) 1; + value = { + user = elemAt (splitString "@" host) 0; + + identityFile = "~/.ssh/keys/${hostcfg.file}"; + + setEnv = if hasAttr "env" hostcfg + then hostcfg.env + else {}; + }; + }) cfg.keys; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/theme.nix b/modules/stuff/theme.nix new file mode 100644 index 0000000..fa96396 --- /dev/null +++ b/modules/stuff/theme.nix @@ -0,0 +1,61 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.theme; + user = config.chuj.system.user; +in { + options.chuj.stuff.theme = { + enable = mkEnableOption "theme"; + + }; + + config = mkIf cfg.enable { + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + jetbrains-mono + ]; + fontconfig.defaultFonts = { + serif = [ "JetBrains Mono NL" ]; + sansSerif = [ "JetBrains Mono NL" ]; + monospace = [ "JetBrains Mono NL" ]; + }; + }; + + home-manager.users.${user} = { + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + name = "aero-drop"; + package = pkgs.win7-cursors; + }; + + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Vimix-Black"; + package = pkgs.vimix-icon-theme; + }; + gtk2.configLocation = "${config.home-manager.users.${user}.xdg.configHome}/gtk-2.0/gtkrc"; + }; + + qt = { + enable = true; + platformTheme.name = "adwaita"; + style = { + name = "adwaita-dark"; + package = pkgs.adwaita-qt; + }; + }; + + dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; + + home.sessionVariables = { + GTK_USE_PORTAL = "1"; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/thunar.nix b/modules/stuff/thunar.nix new file mode 100644 index 0000000..de6031d --- /dev/null +++ b/modules/stuff/thunar.nix @@ -0,0 +1,31 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.thunar; + user = config.chuj.system.user; +in { + options.chuj.stuff.thunar = { + enable = mkEnableOption "thunar"; + }; + + config = mkIf cfg.enable { + programs = { + dconf.enable = true; + xfconf.enable = true; + thunar = { + enable = true; + plugins = with pkgs.xfce; [ + thunar-volman + thunar-archive-plugin + thunar-media-tags-plugin + ]; + }; + }; + services.gvfs.enable = true; + services.tumbler.enable = true; + home-manager.users.${user}.home.packages = with pkgs; [ + ffmpegthumbnailer + gsettings-desktop-schemas + xarchiver # not really thunar but can be here ig + ]; + }; +} \ No newline at end of file diff --git a/modules/stuff/vim.nix b/modules/stuff/vim.nix new file mode 100644 index 0000000..19bdf1b --- /dev/null +++ b/modules/stuff/vim.nix @@ -0,0 +1,67 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.vim; + user = config.chuj.system.user; +in { + options.chuj.stuff.vim = { + enable = mkEnableOption "vim"; + }; + + config = mkIf cfg.enable { + environment.systemPackages = [ pkgs.vim ]; + + home-manager.users.${user} = { + home.sessionVariables = { "EDITOR" = "vim"; }; + # fixme: not .vim + home.file = { ".vim/colors/darcula.vim".source = ../../files/darcula.vim; }; + programs.vim = { + enable = true; + defaultEditor = true; + plugins = [ + pkgs.vimPlugins.indentLine + pkgs.vimPlugins.vim-gitgutter + ]; + settings = let + vimCache = "${config.home-manager.users.${user}.xdg.cacheHome}/vim"; + in { + background = "dark"; + backupdir = [ "${vimCache}/backup/" ]; + copyindent = false; + directory = [ "${vimCache}/swap/" ]; + expandtab = true; + hidden = false; + history = 420; + ignorecase = false; + modeline = true; + mouse = "a"; + mousefocus = false; + mousehide = false; + mousemodel = "popup_setpos"; + number = true; + relativenumber = true; + shiftwidth = 4; + smartcase = false; + tabstop = 4; + undodir = [ "${vimCache}/undo/" ]; + undofile = false; + }; + extraConfig = '' + set updatetime=100 + set signcolumn=yes + set termguicolors + set cursorline + colorscheme darcula + let g:indentLine_char = '▏' + let g:c_no_ansi = 1 + let g:c_functions = 1 + let g:c_no_c99 = 1 + let g:c_no_bsd = 1 + let g:c_no_c11 = 1 + let g:c_gnu = 1 + ''; + }; + }; + + programs.nano.enable = false; + }; +} \ No newline at end of file diff --git a/modules/stuff/xdg.nix b/modules/stuff/xdg.nix new file mode 100644 index 0000000..c04b29b --- /dev/null +++ b/modules/stuff/xdg.nix @@ -0,0 +1,89 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.xdg; +in { + options.chuj.xdg = { + enable = mkEnableOption "xdg"; + }; + + config = let + hmCfg = config.home-manager.users.${user}; + HOME = hmCfg.home.homeDirectory; + in mkIf cfg.enable { + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + config.common.default = [ "*" ]; + }; + + home-manager.users.${user} = { + xdg = { + dataHome = "${HOME}/.local/share"; + configHome = "${HOME}/.config"; + stateHome = "${HOME}/.local/state"; + cacheHome = "${HOME}/.cache"; + + userDirs = { + enable = true; + desktop = "${HOME}/desktop"; + documents = "${HOME}/documents"; + download = "${HOME}/downloads"; + music = "${HOME}/music"; + pictures = "${HOME}/pictures"; + publicShare = "${HOME}/public"; + templates = "${HOME}/templates"; + videos = "${HOME}/videos"; + }; + }; + + home.sessionVariables = { + XDG_DATA_HOME = hmCfg.xdg.dataHome; + XDG_CONFIG_HOME = hmCfg.xdg.configHome; + XDG_STATE_HOME = hmCfg.xdg.stateHome; + XDG_CACHE_HOME = hmCfg.xdg.cacheHome; + ANDROID_USER_HOME = "${XDG_DATA_HOME}/android"; + ANDROID_HOME = "${XDG_DATA_HOME}/android/sdk"; + GRADLE_USER_HOME = "${XDG_DATA_HOME}/gradle"; + PYTHONSTARTUP = "${XDG_CONFIG_HOME}/python/pythonrc"; + HISTFILE = "${XDG_CACHE_HOME}/bash/history"; + CARGO_HOME = "${XDG_DATA_HOME}/cargo"; + _JAVA_OPTIONS = "-Djava.utils.prefs.userRoot=${XDG_CONFIG_HOME}/java"; + GNUPGHOME = "${XDG_DATA_HOME}/gnupg"; + WINEPREFIX = "${XDG_DATA_HOME}/wine"; + RUSTUP_HOME = "${XDG_DATA_HOME}/rustup"; + NUGET_PACKAGES = "${XDG_CACHE_HOME}/NuGetPackages"; + FCEUX_HOME = "${XDG_CONFIG_HOME}/fceux"; + DOTNET_CLI_HOME = "${XDG_CONFIG_HOME}/dotnet"; + GTK2_RC_FILES = lib.mkForce "${XDG_CONFIG_HOME}/gtk-2.0/gtkrc"; + }; + + home.packages = with pkgs; [ + xdg-user-dirs + xdg-utils + ]; + + xdg.configFile = { + "python/pythonrc".text = '' + import os + import atexit + import readline + + history = os.path.join(os.environ['XDG_CACHE_HOME'], 'python_history') + try: + readline.read_history_file(history) + except OSError: + pass + + def write_history(): + try: + readline.write_history_file(history) + except OSError: + pass + + atexit.register(write_history) + ''; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/stuff/xserver.nix b/modules/stuff/xserver.nix new file mode 100644 index 0000000..bbe62e3 --- /dev/null +++ b/modules/stuff/xserver.nix @@ -0,0 +1,43 @@ +{ lib, pkgs, config, ...}: let + inherit (lib) mkIf mkEnableOption mkOption; + cfg = config.chuj.stuff.xserver; +in { + options.chuj.stuff.xserver = { + enable = mkEnableOption "xserver"; + }; + + config = mkIf cfg.enable { + services = { + xserver = { + enable = true; + xkb.layout = "pl"; + # autoRepeatDelay = 180; + # autoRepeatInterval = 50; + # ^ this doesn't work + displayManager.sessionCommands = '' + ${pkgs.xorg.xset}/bin/xset r rate 180 50 + ''; + }; + }; + + environment.systemPackages = with pkgs; [ + xclip + xorg.xkill + xorg.xev + xdotool + ]; + + # https://www.reddit.com/r/linux_gaming/comments/1dkbh5t/games_behaving_differently_on_xorg_than_on/ + # FUCK YOU LIBINPUT + services.libinput.enable = lib.mkForce false; + # services.libinput = { + # enable = true; + # touchpad = { + # naturalScrolling = false; # it's reversed on my laptop for some reason + # tapping = true; + # tappingButtonMap = "lmr"; + # scrollMethod = "edge"; + # }; + # }; + }; +} \ No newline at end of file diff --git a/modules/system.nix b/modules/system.nix new file mode 100644 index 0000000..1f5b870 --- /dev/null +++ b/modules/system.nix @@ -0,0 +1,69 @@ +{ lib, pkgs, config, ...} @ args: let + inherit (lib) mkOption types; + cfg = config.chuj.system; +in { + options.chuj.system = { + user = mkOption { + type = types.str; + }; + host = mkOption { + type = types.str; + }; + platform = mkOption { + type = types.str; + }; + groups = mkOption { + type = types.listOf types.str; + default = []; + }; + stateVersion = mkOption { + type = types.str; + default = "23.11"; + }; + }; + + config = { + networking.hostName = cfg.host; + users.users.${cfg.user} = { + isNormalUser = true; + extraGroups = [ "wheel" ] ++ cfg.groups; + }; + nixpkgs.hostPlatform = cfg.platform; + system.stateVersion = cfg.stateVersion; + + time.timeZone = "Europe/Warsaw"; + hardware.pulseaudio.enable = true; + networking.networkmanager.enable = true; + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nixpkgs.overlays = import ../pkgs args; + nixpkgs.config.allowUnfree = true; + + security.sudo = { + package = pkgs.sudo.override { withInsults = true; }; + extraConfig = '' + Defaults pwfeedback + ''; + }; + + environment.systemPackages = with pkgs; [ + ed # is the standard text editor. + + ripgrep + file + tree + btop + wget + + zip + unzip + rar + unrar + p7zip + p7zip-rar + + gcc + gnumake + python311 + ]; + }; +} \ No newline at end of file